0

可能重复:
GET 或 POST 是否比另一个更安全?
POST 和 GET 有什么区别?

$_GET我的理解是和之间的区别在于$_POST$_GET您可以在地址栏中看到表单发送的内容。

现在我正在制作一个 iPhone 应用程序,它正在发送一个带有 $_GET 详细信息的 url。用户无法看到或猜测正在使用的变量。我不应该使用 GET 还有其他原因吗?

我通过 URL 发送敏感数据,所以我问如果用户看不到 URL,使用 $_GET 是否足够安全。

此外,数据是从 IOS 应用程序生成的,因此我的服务器上没有包含此数据的网站。

提前致谢:-)

4

5 回答 5

1

GET 和 POST 是HTTP 的请求方法,还有更多像 PUT 和 DELETE 这样的 PHP 不使用的方法。尽管最佳实践是使用 GET 进行任何数据/信息检索(例如搜索操作)并使用 POST 发送一些数据以存储(例如用户输入),但坚持使用 POST 或 GET 没有安全论据。

如果您要发送敏感数据,您应该考虑 SSL 而不是请求方法。

于 2013-01-12T08:44:51.477 回答
1

这里的每个人都是正确的,如果您不通过安全(即 SSL)连接发送数据,中间人可以嗅探这两个请求。

但是,您需要记住的一件事是您的 Web 服务器如何处理这两者。请求发送的数据POST通常不被服务器记录,而GET请求则被记录。这是因为 GET 数据实际上只是 URL 的一部分。我们只是将其视为单独的数据,因为 PHP 有助于将其分类为我们的超全局数组。尽管没有查询字符串,但对像这样的裸 URL 的http://www.google.com请求仍然是 GET 请求(除非您在客户端中专门调用不同的协议)。

与其他 GET 请求一样,带有查询字符串的请求仍将输入到服务器的访问日志中。如果您通过查询字符串传递敏感信息,则需要制定策略来安全地处理这些日志以及可能记录此类数据的其他位置。

于 2013-01-12T09:05:25.560 回答
0

不,它不安全。您的网站仍然可以从其他具有可见 url 栏的机器访问。此外,它不需要网络浏览器来开始操作GETPOST请求,有一些程序,例如Fiddler,将允许某人修改请求,而不管浏览器或数据如何提交。

使用POST而不是GET使攻击者更难向您发送恶意数据,它可能会阻止临时用户尝试使用该 url,但不会阻止它。本质上客户端数据不可信,您必须在服务器上对其进行验证。如果您需要传输敏感数据,您应该使用HTTPS.

从不情愿到信任

与其做出需要成立的假设,不如不愿扩大信任。服务器应该被设计成不信任客户端,反之亦然,因为客户端和服务器都会被黑客入侵。不愿信任有助于划分。

于 2013-01-12T08:42:24.260 回答
0

好问题。如果数据非常敏感,例如密码,我不建议使用 $_GET ,因为嗅探无线网络的人可以拦截请求的网站。假设恶意用户正在使用诸如http://www.wireshark.org/之类的工具嗅探网络上的所有 Web 流量,则密码或其他敏感信息将简单地显示在 URL 中。此外,如果 iOS App 用户通过网络嗅探找到 URL,用户自己可以通过提交自定义 HTTP 请求从自己的浏览器更改数据。考虑使用 SSL 或 HTTPS 发送数据并避免网络嗅探(在一定程度上)。

您可以查看替代方案,例如使用 JSON:How to send json data in the Http request using NSURLRequest

祝你好运

于 2013-01-12T08:42:36.330 回答
0

即使您使用 SSL,也不要使用 GET 传输敏感数据,因为 Web 服务器通常会在其访问日志文件中记录带有查询字符串(但不是 POST 正文)的 GET URL。请参阅此答案此答案此评论

以下是在我的测试 Web 服务器上找到的一些示例日志记录(我使用的是 Apache)

127.0.0.1 - - [10/Jan/2013:14:50:57 +0800] "GET /Web/WebAPI.php?action=login&username=ttt&password=uuu HTTP/1.1" 200 380 "-" "Opera/9.80 (Windows NT 6.1) Presto/2.12.388 Version/12.12"
127.0.0.1 - - [10/Jan/2013:14:51:05 +0800] "GET /Web/WebAPI.php?action=logout HTTP/1.1" 200 87 "-" "Opera/9.80 (Windows NT 6.1) Presto/2.12.388 Version/12.12"
127.0.0.1 - - [12/Jan/2013:13:26:13 +0800] "GET /Web/WebAPI.php?action=login&username=ttt&password=uuu HTTP/1.1" 200 380 "-" "Opera/9.80 (Windows NT 6.1) Presto/2.12.388 Version/12.12"

现在用户的密码以纯文本形式登录服务器。你不想要那个,是吗?

于 2013-01-12T09:00:37.167 回答