完整性检查:SSL + POST与未加密的GET

时间:2013-04-24 21:26:23

标签: security post ssl

一个经典的愚蠢的事情是通过查询字符串ala上的GET传递一些与安全相关的信息:

http://foo?SecretFilterUsedForSecurity=username

......任何雅虎都可以使用Fiddler或者某些人来看看发生了什么......

通过POST将此信息传递给应用服务器(运行SSL)的安全性如何?来自Fiddler网站的这个链接似乎表明可以解密HTTPS流量:

http://fiddler2.com/documentation/Configure-Fiddler/Tasks/DecryptHTTPS

如果目标是确保客户端无法捕获/读取您不喜欢的信息,那么这同样是愚蠢的吗?好像是。

感谢。

4 个答案:

答案 0 :(得分:2)

是的,它“同样愚蠢”。 SSL仅保护数据不被第三方读取;它不会阻止客户端(或服务器)读取它。如果您不信任客户端读取某些数据,则不应授予他们访问该数据的权限,即使只是为了进行POST。

答案 1 :(得分:2)

是的,任何用户都可以使用Burp SuiteWebscarabParos Proxy等软件轻松检查POST请求中的数据,即使是通过HTTPS / SSL也是如此。这些代理将完成与服务器的SSL事务,然后将数据传递给客户端。通过代理传递的所有数据都已存储,并且对客户端可见。

也许您正试图在客户端存储敏感/秘密数据以减轻服务器上的负载?这样做的方法是,即使使用代理,用户也无法查看(或更改),使用只有服务器知道的强对称密钥对其进行加密。如果您想确保加密数据未被篡改,请使用HMAC。确保使用足够随机的密钥和强加密算法以及密钥长度,例如AES 256.

如果你这样做,你可以将这些数据的存储卸载到客户端,但仍然保证自服务器上次看到它以来它没有改变,并且客户端无法查看它。

答案 2 :(得分:1)

这取决于您尝试保护数据的人以及您对客户端软件的控制程度。从根本上说,在任何客户端 - 服务器应用程序中,客户端必须知道它发送到服务器的内容。

如果正确实施,SSL将阻止任何中间嗅探或改变流量而不修改客户端。但是,这依赖于使用服务器域的有效证书加密的连接,并且如果不是这种情况,客户端拒绝执行操作。鉴于这种情况,连接只能由持有该SSL证书的私钥的人解密。 如果您的“客户”只是一个网络浏览器,这意味着第三方(例如在公共Wi-Fi位置)不能在不警告使用该网站的人可疑的情况下拦截数据。但是,它并不会阻止用户故意在浏览器中传递该提示,以便自己嗅探流量。

如果您的客户端是自定义二进制应用程序,那么对于“八卦”用户来说,事情会更安全一些:为了检查流量,他们必须修改客户端以绕过您的证书检查(例如,通过更改目标网址,或欺骗应用程序以信任伪造的证书。)

简而言之,没有任何东西可以完全阻止确定的用户嗅探他们自己的流量(虽然你可以使其更难)但正确实施的SSL将阻止第三方拦截流量

答案 3 :(得分:1)

不使用GET请求将机密信息添加到URL中的另一个更重要的原因是Web服务器和路上的任何代理都将记录它。默认情况下不会记录POST参数。

您不希望密码显示在服务器日志中 - 日志通常受到的保护很多,远远低于密码数据库本身。