在URL中发布用户数据

时间:2012-08-17 17:19:35

标签: security url

这样做是不明智的吗?我正在谈论的是将用户名和密码传递给处理文件,如下所示:

echo'<script>location.href="process.php?u='.$_POST['username'].'&p='.md5($_POST['password']).'"</script>';

这是在验证了用户名和密码之后。这可能以某种方式被恶意拦截?或者这是否足够安全?

4 个答案:

答案 0 :(得分:4)

这是一件非常糟糕的事情。所有用户数据都应存储在$_SESSION中,或者您应设置验证Cookie并将其用于身份验证。

此外,您永远不应该“保留”用户的密码。您应该对其进行哈希并将哈希值存储在数据库中,然后根据登录时的哈希检查发布的密码。

此外,您的哈希应该是一种方式,您应该无法检索或查看用户的原始密码。

最后,MD5被击败了。它不再是远程安全的,可以通过彩虹表攻击拆除。你应该研究一些更强大,更慢(慢慢好)的东西,比如bcrypt

答案 1 :(得分:4)

请勿这样做

在那里,现在我们已经清除了,请允许我解释......

您实际上在做的是以明文形式将此数据发送给用户。即使您使用SSL加密进行传输,它仍然是一个很大的风险。它不是“在浏览器中呈现”,但这并不重要。它仍然被发送到浏览器。即使在这种特殊情况下你没有遇到任何问题,这也是一个不好的习惯。

您甚至可能会问,“但我正在使用md5(),因此密码被遮盖了,对吧?”

错误。

文字模糊不清,是的。但是,您将文本的模糊版本提供给客户端,然后键入该文本。这意味着你仍然会显示一个有效的密码供所有人查看。

如果密码是“correcthorsebatterystaple”,那么你不想以纯文本显示它,因为这会给某人一个密码,对吧? (事实上​​,你甚至不想以纯文本存储它。无处不在。作为网站管理员,你甚至不想知道或拥有< em>任何方式来查找密码文本。如果可以,其他人可以。)对。

因此,您将密码隐藏为“elughwelfguweliurgnswfglwerlgu”,您的代码将其解释为密码。所以你可以显示,对吗?错误。因为现在,通过从客户端接受“elughwelfguweliurgnswfglwerlgu”作为密码,您已将“elughwelfguweliurgnswfglwerlgu”制作成系统接受的纯文本密码。因此,文本的模糊无效。

简而言之,永远不要以任何形式向任何人提供密码。您的应用程序应接收密码作为输入,但从不任何方式将其作为输出生成。

答案 2 :(得分:1)

否否否

当某人输入密码来设置帐户(或更改密码)时,请使用POST和SSL。

否则,密码是单行道,网址中没有MD5或纯文本。

当用户登录时为他们提供会话。这可能会失效,因此无效。

截获 - 你可以获得一个数据包嗅探器

答案 3 :(得分:1)

  

这会以某种方式被恶意拦截吗?

是。任何人都可以查看页面的来源并查看用户名和密码的md5哈希值。当页面重定向用户时,它也会显示在浏览器的URL中。

是否可以通过中间人攻击拦截?不必要。如果您使用的是HTTPS,则会在SSL数据包中加密查询字符串以及请求的其余部分。如果您没有使用HTTPS,那么任何人都可以看到查询字符串,因此您知道,在查看中间人攻击时,GET与POST一样安全。

这里很好地比较了GET在HTTPS环境中的安全性如何:Is an HTTPS query string secure?