在过去的几个月里,我自己开发了关于java(servlets和jsp)中的web开发。我正在开发一个主要服务于应用程序的Web服务器。实际上它正在谷歌应用程序引擎上运行。我担心的是,虽然我使用SSL连接,但在URL中发送参数(例如https://www.xyz.com/server?password=1234&username=uname)可能并不安全。我应该使用其他方式还是真的安全?我不知道这个网址是否作为整体文本(带参数)传送?
任何帮助将不胜感激!
答案 0 :(得分:6)
您的问题似乎比Web服务器和Google App Engine更进一步。
通过Web表单向服务器发送密码是一个非常常见的安全问题。看到这个SO线程:
POST
根本不会显示网址中的参数,因此这还不够)答案 1 :(得分:6)
所有内容都已加密,包括网址及其参数。您可能仍然会避免使用它们,因为它们可能存储在服务器端日志和浏览器历史记录中。
答案 2 :(得分:2)
包括请求行的完整HTTP请求在SSL内部加密。
以上URL的示例http请求将全部包含在SSL隧道中:
GET /server?password=1234&username=uname HTTP/1.1
Host: www.xyz.com
...
虽然您的应用程序可能会记录请求的URL,因为它包含用户密码,但这可能不正常。
答案 3 :(得分:2)
嗯,除了与日志记录和URL可见性有关的问题(即安全通信之前和之后发生的事情),GET和POST同样安全;在建立加密通道之前交换的信息非常少,甚至不是HTTP协议的第一行。 但这并不意味着您应该使用GET。
问题是登录正在改变服务器的状态,如果没有正确通知用户发生这种情况,就不应该重复登录(以防止出现Javascript的意外)。正在更改的状态是服务器上的用户会话信息,因为登录的内容是将已验证的身份与该会话相关联。因为它是一个(重大的)状态变化,所以不应该通过GET进行操作;虽然你可以通过PUT在技术上做到这一点,但POST更好,因为与它相关的非幂等性假设(这反过来又鼓励浏览器弹出一个警告对话框)。