在插入数据库之前,我应该从用户的密码中删除哪些字符?

时间:2013-03-15 21:11:37

标签: php sql

我有一个功能可以从我的密码中删除字符。

public function stripChars($var)
{
    $bad_symbols = array(",", "|", "'","<",">",'"');
    $var = str_replace($bad_symbols, "", $var);
    return $var;
}

我想知道是否有办法让用户在密码中使用逗号,而不会弄乱SQL语句?如果没有,除了我已经剥离的密码之外,我不应该在密码中使用哪些符号。感谢。

4 个答案:

答案 0 :(得分:9)

  

在插入数据库之前,我应该从用户的密码中删除哪些字符?

完全没有。删除的字符越多,密码就越弱。

  

我想知道是否有办法让用户在密码中使用逗号,而不会弄乱SQL语句?

  1. 不要手动构建SQL。使用prepared statements and bound variables。这将逃避任何可能导致问题的角色。
  2. 不要在数据库中存储纯文本密码。 Hash them

答案 1 :(得分:1)

without it messing up the SQL statement?

哎呀,你需要阅读SQL注入:http://en.wikipedia.org/wiki/SQL_injection

因此,您应该在密码中允许任何字符,并确保不直接在SQL语句中使用输入。

答案 2 :(得分:1)

您永远不应该从用户的密码中删除字符。如果他们输入密码为“r2 ^£XS \ '32”,然后在存储之前对其进行过滤,他们就永远无法登录,因为他们的密码不正确。

至于你是否应该限制密码中的字符,这是另一回事。您需要限制不属于您使用的任何字符编码的字符,但除此之外,这是一个坏主意。限制可用的字符集可以使蛮力攻击更容易成功。

相反,你想要做的是使用预准备语句,因为这些将阻止SQL注入(我相信,你的担忧)。

还值得一提的是,您应该在存储密码之前对其进行哈希处理;永远不要存储为纯文本或可逆加密。理想情况下,还要加密密码以增加安全性。

查看Password HashingPDO and Prepared Statements了解详情

答案 3 :(得分:-1)

您不应该从密码中删除任何字符!但是,在将它们放入数据库或比较身份验证之前,请先“转义”它们。