0

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

http://foo?SecretFilterUsedForSecurity=username

...任何雅虎都可以使用 Fiddler 或类似的东西来看看发生了什么......

但是,通过 POST 将此信息传递到应用服务器(运行 SSL)有多安全?Fiddler 网站上的这个链接似乎表明可以解密 HTTPS 流量:

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

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

谢谢。

4

4 回答 4

2

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

于 2013-04-24T21:40:55.007 回答
2

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

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

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

于 2013-04-25T02:34:52.953 回答
1

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

如果实施得当,SSL 将在不修改客户端的情况下防止任何中介嗅探或更改流量。但是,这依赖于使用服务器域的有效证书对连接进行加密,并且如果不是这种情况,客户端将拒绝采取行动。鉴于这种情况,连接只能由持有该 SSL 证书的私钥的人解密。如果您的“客户端”只是一个网络浏览器,这意味着第三方(例如在公共 Wi-Fi 位置)无法在不提醒使用该网站的人存在可疑情况的情况下拦截数据。但是,它不会阻止用户故意绕过浏览器中的提示以自行嗅探流量。

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

简而言之,没有什么可以完全阻止坚定的用户嗅探他们自己的流量(尽管您可以使其更难),但正确实施的 SSL 将阻止第三方拦截流量。

于 2013-04-24T21:40:35.957 回答
1

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

您不希望您的密码出现在服务器日志中 - 日志的保护通常比密码数据库本身要少得多。

于 2013-04-25T06:59:41.037 回答