可以通过URL参数通过HTTPS安全地发送用户名和密码吗?

时间:2009-05-06 15:07:35

标签: security authentication https

一位同事和我昨天进行了激烈辩论,是否可以通过URL参数作为身份验证手段发送登录凭据。他正确地指出,在向服务器端发送请求之前,HTTPS会对URL中的所有非主机名/端口字符进行加密。

但是,我仍然认为这里存在可以窃取这些凭据的边缘情况,并且认为它们应该通过HTTPS POST发送。这实际上是一种发送登录/令牌数据的安全方法吗?

6 个答案:

答案 0 :(得分:49)

请求的网址可能会显示在网络服务器日志浏览器历史记录/书签中,这不是一件好事。

答案 1 :(得分:32)

如果您有后端数据库,请采取额外步骤。通过表单发布提交用户名和密码,让后端返回一个令牌(guid会这样做),将令牌写入数据库表并分配到期时间,然后在查询字符串中使用该令牌代替凭据。现在您的系统将非常安全,并且您有一个唯一的会话标识符作为加号。

答案 2 :(得分:8)

就证书的传输而言,他是对的。但还有许多其他需要考虑的事情,比如brwser历史记录,服务器日志文件,观看屏幕的用户等,在这种情况下会有风险。

答案 3 :(得分:5)

安全是一个大词。 SSH会阻止其他用户检索它,但你真的想在查询字符串上显示某人的密码吗?那个站在用户肩膀上的家伙怎么样? SQL注入怎么样?真是个糟糕的主意,至少把它放在一个表格中。

答案 4 :(得分:5)

我不知道HTTPS也加密了网址,很高兴知道。

但是,从安全角度来看,我会更加担心可以在URL栏中读取凭据。更不用说可能存储在浏览器历史记录中了。

答案 5 :(得分:1)

我正在尝试另一种解决方案。您可以将PHP处理程序用于会话,以便使用其处理程序将会话数据作为字符串直接存储到数据库中。 您将需要数据库中的会话表,并且到期时间。 一旦你通过HTTPS登录数据发送,如果它是正确的,你可以将它存储在$ _SESSION变量中,如果你做得好接口,它将转到你的数据库。 由于这不会暴露在PHP之外,因此您将拥有一个强大的登录系统,并且在客户端cookie中只存储会话ID而不是令牌,帐户或其他敏感数据。

参考:http://es.php.net/manual/en/function.session-set-save-handler.php