Ssl HTTPS查询字符串是否安全?

Ssl HTTPS查询字符串是否安全?,ssl,https,query-string,Ssl,Https,Query String,我正在创建一个使用HTTPS的基于web的安全API;但是,如果我允许用户使用查询字符串配置它(包括发送密码),这也是安全的,还是应该通过POST强制执行?是。HTTPS会话的整个文本由SSL保护。这包括查询和标题。在这方面,POST和GET是完全相同的 至于您的方法的安全性,如果没有适当的检查,就没有真正的方法来说明。是的,从您建立HTTPS连接的那一刻起,一切都是安全的。POST通过SSL发送时的查询字符串(GET)。从“嗅探网络数据包”的角度来看,GET请求是安全的,因为浏览器将首先建立安

我正在创建一个使用HTTPS的基于web的安全API;但是,如果我允许用户使用查询字符串配置它(包括发送密码),这也是安全的,还是应该通过POST强制执行?

是。HTTPS会话的整个文本由SSL保护。这包括查询和标题。在这方面,POST和GET是完全相同的


至于您的方法的安全性,如果没有适当的检查,就没有真正的方法来说明。

是的,从您建立HTTPS连接的那一刻起,一切都是安全的。POST通过SSL发送时的查询字符串(GET)。

从“嗅探网络数据包”的角度来看,GET请求是安全的,因为浏览器将首先建立安全连接,然后发送包含GET参数的请求。但是GET url将存储在用户浏览器历史记录/自动完成中,这不是存储密码数据的好地方。当然,这仅适用于您采用更广泛的“Webservice”定义,该定义可能从浏览器访问服务,如果您仅从自定义应用程序访问服务,则这应该不是问题


因此,至少在密码对话框中使用post应该是首选。正如littlegeek发布的链接所指出的,GET URL更有可能写入服务器日志。

SSL首先连接到主机,因此主机名和端口号以明文形式传输。当主机响应且质询成功时,客户端将使用实际URL(即第三个斜杠后的任何内容)加密HTTP请求并将其发送到服务器

有几种方法可以破坏这种安全性


可以将代理配置为“中间人”。基本上,浏览器将连接到真实服务器的请求发送到代理。如果以这种方式配置代理,它将通过SSL连接到实际服务器,但浏览器仍将与代理通信。因此,如果攻击者能够访问该代理,他就可以以明文形式查看流经该代理的所有数据

您的请求也将显示在浏览器历史记录中。用户可能会尝试将该站点添加到书签中。一些用户安装了书签同步工具,因此密码可能会出现在deli.ci.us或其他地方

最后,可能有人入侵了你的计算机,安装了键盘记录器或屏幕刮板(很多特洛伊木马类型的病毒都是这样)。由于密码直接在屏幕上可见(与密码对话框中的“*”相反),这是另一个安全漏洞


结论:在安全问题上,总是走老路。有太多你不知道、想不到的东西,这些东西会让你头疼。

是的,的确如此但是使用GET处理敏感数据是个坏主意,原因如下:

  • 主要是HTTP引用泄漏(目标页面中的外部映像可能泄漏密码[1])
  • 密码将存储在服务器日志中(这显然是错误的)
  • 浏览器中的历史缓存
因此,即使Querystring是安全的,也不建议通过Querystring传输敏感数据


[1] 尽管我需要注意RFC声明浏览器不应该将引用者从HTTPS发送到HTTP。但这并不意味着一个坏的第三方浏览器工具栏或HTTPS站点的外部图像/闪存不会泄漏它。

我不同意关于[…]HTTP引用泄漏(目标页面中的外部图像可能泄漏密码)的说法

HTTP 1.1 RFC:

客户不应包括推荐人 (非安全)HTTP中的标头字段 请求引用页面是否为空 使用安全协议传输


无论如何,服务器日志和浏览器历史记录是不将敏感数据放入查询字符串中的充分理由。

是的,只要没有人在监视器后面看。

您可以将密码作为MD5哈希参数发送,并添加一些盐。在服务器端比较它的身份验证

,您的查询字符串将被加密

背后的原因是查询字符串是HTTP协议的一部分,HTTP协议是应用层协议,而安全性(SSL/TLS)部分来自传输层。首先建立SSL连接,然后将查询参数(属于HTTP协议)发送到服务器

建立SSL连接时,客户端将依次执行以下步骤。假设您尝试登录到名为example.com的站点,并希望使用查询参数发送凭据。您的完整URL可能如下所示:

https://example.com/login?username=alice&password=12345)
  • 您的客户端(例如浏览器/移动应用程序)将首先使用DNS请求将您的域名
    example.com
    解析为IP地址
    (124.21.12.31)
    。查询该信息时,仅使用特定于域的信息,即仅使用
    example.com
  • 现在,您的客户端将尝试使用IP地址
    124.21.12.31
    连接到服务器,并尝试连接到端口443(SSL服务端口不是默认的HTTP端口80)
  • 现在,
    example.com
    上的服务器将向您的客户端发送证书
  • 您的客户端将验证证书并开始为您的会话交换共享密钥
  • 在成功建立安全连接后,只有这样才能通过安全连接发送查询参数

  • 因此,您不会公开敏感数据。但是,使用此方法通过HTTPS会话发送凭据并不是最好的方法。你应该换一种方式。

    安全不仅仅是浏览器和服务器之间的通信,还有“应该”这个词。你会相信每个浏览器的每个版本都有你的密码吗?这与GET vs POST有什么关系?“每个浏览器的每个版本