我正在创建一个使用HTTPS的基于API的安全web;然而,如果我允许用户配置它(包括发送密码)使用查询字符串这也将是安全的,或者我应该强制它通过POST?
当前回答
是的。HTTPS会话的整个文本都由SSL保护。这包括查询和报头。在这方面,POST和GET完全相同。
至于你的方法的安全性,没有经过适当的检查,也很难说。
其他回答
From a "sniff the network packet" point of view a GET request is safe, as the browser will first establish the secure connection and then send the request containing the GET parameters. But GET url's will be stored in the users browser history / autocomplete, which is not a good place to store e.g. password data in. Of course this only applies if you take the broader "Webservice" definition that might access the service from a browser, if you access it only from your custom application this should not be a problem.
所以使用post至少密码对话框应该是首选的。另外,正如littlegeek在链接中指出的那样,GET URL更有可能写入你的服务器日志。
我不同意关于……的说法。Slough响应中的HTTP引用泄漏(目标页面中的外部图像可能泄漏密码)。
HTTP 1.1 RFC明确声明:
客户不应包括推荐人 (非安全)HTTP中的报头字段 请求参考页是否为 通过安全协议传输。
无论如何,服务器日志和浏览器历史记录是不将敏感数据放入查询字符串的充分理由。
是的。HTTPS会话的整个文本都由SSL保护。这包括查询和报头。在这方面,POST和GET完全相同。
至于你的方法的安全性,没有经过适当的检查,也很难说。
SSL首先连接到主机,因此主机名和端口号以明文形式传输。当主机响应并且挑战成功时,客户端将使用实际的URL(即第三个斜杠之后的任何内容)加密HTTP请求,并将其发送给服务器。
有几种方法可以打破这种安全性。
可以将代理配置为“中间人”。基本上,浏览器将连接实服务器的请求发送到代理。如果代理以这种方式配置,它将通过SSL连接到实服务器,但浏览器仍将与代理通信。因此,如果攻击者能够访问代理,他就可以以明文形式看到流经代理的所有数据。
您的请求也将在浏览器历史记录中可见。用户可能会忍不住收藏该网站。有些用户安装了书签同步工具,因此密码可能会出现在deli.ci.us或其他地方。
最后,有人可能已经侵入了你的电脑,并安装了键盘记录器或屏幕刮板(许多特洛伊木马类型的病毒都这样做)。由于密码直接显示在屏幕上(而不是密码对话框中的“*”),这是另一个安全漏洞。
结论:当涉及到安全问题时,总是要依靠惯用的方法。有太多的事情是你不知道的,不会想到的,这会让你崩溃。
您可以发送密码作为MD5哈希参数与一些盐添加。在服务器端比较它的身份验证。
推荐文章
- 使用JavaScript更改URL参数并指定默认值
- URL方案/主机/路径中的“+”是否代表空格?
- 使用请求包时出现SSL InsecurePlatform错误
- 可选查询字符串参数。NET Web API
- 如何删除查询字符串,只得到URL?
- 你从哪里包含jQuery库?谷歌JSAPI吗?CDN吗?
- 我可以把我所有的http://链接都改成//吗?
- 如何使用网络强制HTTPS。配置文件
- 摘要认证和基本认证的区别是什么?
- 浏览器会通过https缓存内容吗
- 没有为Android SSL连接找到信任锚
- 使用.htaccess和mod_rewrite强制SSL/https
- REST API最佳实践:查询字符串中的参数vs请求体中的参数
- 在尝试访问HTTPS url时,如何使用cURL处理证书?
- 在Java客户端中接受服务器的自签名ssl证书