PHP是Get方法,即使用户看不到地址栏,它也不那么不安全


PHP - is Get Method still less unsecure even if the user cannot see the address bar?

可能重复:
GET或POST中的一个比另一个更安全吗
POST和GET之间有什么区别?

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

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

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

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

提前感谢:-(

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

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

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

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

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

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

您可以考虑其他选择,例如使用JSON:如何使用NSURLRequest在Http请求中发送JSON数据

祝好运

不,它不安全。您的网站仍然可以从其他机器访问,这些机器确实有可见的url栏。此外,它不需要网络浏览器就可以开始处理GETPOST请求,有些程序,如Fiddler,可以允许用户修改请求,而不管浏览器或数据是如何提交的。

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

从不情愿到信任

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

即使使用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"

现在,用户的密码以明文形式登录到服务器上。你不想那样,是吗?