HTTPS查询字符串安全吗?

7 浏览
0 Comments

HTTPS查询字符串安全吗?

我正在创建一个安全的基于Web的API,使用HTTPS;然而,如果我允许用户通过查询字符串配置(包括发送密码),这样是否安全,还是应该强制使用POST方法?

0
0 Comments

HTTPS查询字符串是否安全?

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

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

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

https://example.com/login?username=alice&password=12345)

1. 客户端(例如浏览器/移动应用程序)首先使用DNS请求将您的域名example.com解析为IP地址(124.21.12.31)。查询该信息时,只使用特定于域的信息,即仅使用example.com。

2. 现在,客户端将尝试连接到IP地址124.21.12.31,并尝试连接到端口443(SSL服务端口而不是默认的HTTP端口80)。

3. 现在,example.com上的服务器将向您的客户端发送其证书。

4. 客户端将验证证书并开始交换用于会话的共享密钥。

5. 成功建立安全连接后,才会通过安全连接发送您的查询参数。

因此,您不会暴露敏感数据。但是,使用这种方法通过HTTPS会话发送凭据并不是最佳方式。您应该选择其他方法。

但是,请查看evil的答案,查询字符串可能会出现在日志文件和缓存中,因此在服务器上可能不安全。

嗨zaph,在HTTPS安全性方面,目标是在没有中间人能够窃取数据的情况下将数据安全地发送到服务器。虽然这是可能的,并且回答了问题,但是很难控制服务器之后会发生什么。这就是为什么我还提到这不是正确的方式。此外,您永远不应该从客户端发送密码。您应该在设备上进行哈希处理,并将哈希值发送到服务器。

从安全角度来看,使用查询字符串发送机密信息是不安全的,最好使用POST方法发送。此外,密码通常由服务器进行哈希处理,而不是由客户端处理。"您永远不应该从客户端发送密码"与答案冲突:(例如http://example.com/login?username=alice&password=12345)。

在客户端进行哈希处理是没有意义的,因为私钥很容易从前端检索出来。

"私钥很容易从前端检索出来"是指哪个密钥?

是的,好观点。并且哈希算法本身不会使事物本身的"不可逆哈希"成为可能。在前端进行哈希处理可以限制中间人攻击。我弄错了,不知为何我把哈希和加密混淆了。

0
0 Comments

HTTPS查询字符串是否安全的问题是因为GET请求的URL会被存储在用户的浏览器历史记录/自动完成中,这不是存储密码等敏感数据的好地方。当然,这仅适用于更广泛的“Web服务”定义,可能从浏览器访问服务。如果只从您自定义的应用程序访问服务,则不应该是一个问题。

因此,至少对于密码对话框,使用POST更为推荐。此外,如上面提到的,GET URL更有可能被写入服务器日志中。

为了解决这个问题,可以通过使用POST请求而不是GET请求来避免将敏感数据暴露在URL中。通过使用POST请求,数据将被包含在请求的主体中,而不是作为URL参数传递。这样可以确保数据不会被存储在浏览器历史记录/自动完成中,也不会被写入服务器日志中。

以下是使用POST请求发送查询字符串的示例代码:

这个例子中,我们使用了HTML表单来发送POST请求。表单的`action`属性指定了请求的目标URL,而`method`属性指定了请求的类型为POST。在表单中,我们可以使用`input`元素来定义各个查询参数的名称和类型。

通过使用POST请求来发送查询字符串,可以更好地保护用户的敏感数据,并提高安全性。同时,我们还可以通过使用HTTPS来确保数据在传输过程中的加密和安全性。

0
0 Comments

HTTPS查询字符串是安全的吗?

是的,它是安全的。但是出于几个原因,使用GET请求传输敏感数据是一个坏主意:

- 主要是HTTP引用泄漏(目标页面中的外部图像可能会泄漏密码[1])

- 密码将存储在服务器日志中(这显然是不好的)

- 浏览器中的历史缓存

因此,尽管查询字符串是安全的,但不建议通过查询字符串传输敏感数据。

关于HTTPS到HTTPS引用,如果我使用HTTPS从第三方站点获取图像,浏览器会发送我之前请求的整个查询字符串到第三方服务器吗?

是的,它会发送,这听起来没有意义,但这就是设计方式。

那么为什么OAuth2规范不建议在查询参数中(URL中)发送敏感数据?即使它始终建议使用TLS(HTTPS)。请参考tools.ietf.org/html/draft-ietf-oauth-v2-bearer-16#section-4.3中的最后一点。

能否详细说明一下浏览器中的历史缓存问题,或者添加一些参考资料?

为了提供最新信息,可以参考securitynewspaper.com/2016/08/01/…(代理PAC黑客允许拦截HTTPS URLS)。

我相信大多数平台要求页面上的所有资源在使用HTTPS请求页面时都使用HTTPS(至少在.NET中是如此)。

原始问题中提到他正在创建一个API。所以是服务器对服务器的调用。这里引用泄漏或浏览器历史记录是如何相关的?关于服务器端记录GET参数;一个服务器管理员可能会(无意中)启用POST参数的记录;因此,可以质疑这是否真的有很大的区别?我建议总体上要控制好服务器环境,无论是为某些请求禁用GET参数的记录,还是确保禁用POST参数的记录。

它从来没有直接说是服务器到服务器的。API经常从浏览器中调用。

问题中确实没有明确说明;但是他谈到在调用中包含密码。对我来说,这听起来不像是从客户端浏览器使用的API;否则,您将向所有客户端公开API密码..(无论是作为GET还是POST参数包含)

我明白了。发送密码到API服务器是过去的事情,我没有理解到这是意图。你是对的。对于其他人阅读这篇文章,这个问题对于理解URL可见性很有用,但整体方法应该重新考虑。

WSS连接是否也适用?也就是说,我可以安全地将密钥与连接URL一起发送吗?

您可以关闭引用。 developer.mozilla.org/en-US/docs/Web/HTTP/Headers/… 缓存也可以禁用。 developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control developer.mozilla.org/en-US/docs/Web/HTTP/Headers/… 唯一的问题是历史记录。我们可以使用location.replace来欺骗它。 stackoverflow.com/a/2196109/607033

如果POST包含查询字符串,它是安全的吗?我的意思是,通过查询字符串传递的数据如何?是否可以通过篡改/嗅探(如Wireshark或Burp Suite)获取查询字符串数据?

0