2009-05-06 99 views
28

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

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

+1

您的意思是SSL而不是SSH? – Greg 2009-05-06 15:09:51

+0

SSH没有意义。 SSL可用于HTTPS以外的其他环境,但这足够接近。 – MSalters 2009-05-06 15:12:20

+0

是的,我的意思是HTTPS,而不是SSL。我纠正了标题。 – 2009-05-06 15:21:17

回答

37

请求的URL可能在Web服务器日志浏览器历史记录/书签这是不是一件好事出现。

+0

如果用户名 - 密码对是一次性的,使用(如OTP),它实际上是一个非常安全的方案,通过URL发送它们。更多信息@ http://stackoverflow.com/q/4833314/632951 – Pacerier 2014-03-15 10:35:14

5

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

4

我不知道HTTPS也加密了URL,这很好。

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

8

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

26

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

+8

+1提供解决方案,而不仅仅是一个答案。 – 2009-05-06 16:25:03

+0

那为什么不用OAuth呢? – Victor 2015-09-11 17:57:48

1

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

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

相关问题