我有一个功能可以从我的密码中删除字符。
public function stripChars($var)
{
$bad_symbols = array(",", "|", "'","<",">",'"');
$var = str_replace($bad_symbols, "", $var);
return $var;
}
我想知道是否有办法让用户在密码中使用逗号,而不会弄乱SQL语句?如果没有,除了我已经剥离的密码之外,我不应该在密码中使用哪些符号。感谢。
答案 0 :(得分:9)
在插入数据库之前,我应该从用户的密码中删除哪些字符?
完全没有。删除的字符越多,密码就越弱。
我想知道是否有办法让用户在密码中使用逗号,而不会弄乱SQL语句?
答案 1 :(得分:1)
without it messing up the SQL statement?
哎呀,你需要阅读SQL注入:http://en.wikipedia.org/wiki/SQL_injection
因此,您应该在密码中允许任何字符,并确保不直接在SQL语句中使用输入。
答案 2 :(得分:1)
您永远不应该从用户的密码中删除字符。如果他们输入密码为“r2 ^£XS \ '32”,然后在存储之前对其进行过滤,他们就永远无法登录,因为他们的密码不正确。
至于你是否应该限制密码中的字符,这是另一回事。您需要限制不属于您使用的任何字符编码的字符,但除此之外,这是一个坏主意。限制可用的字符集可以使蛮力攻击更容易成功。
相反,你想要做的是使用预准备语句,因为这些将阻止SQL注入(我相信,你的担忧)。
还值得一提的是,您应该在存储密码之前对其进行哈希处理;永远不要存储为纯文本或可逆加密。理想情况下,还要加密密码以增加安全性。
答案 3 :(得分:-1)
您不应该从密码中删除任何字符!但是,在将它们放入数据库或比较身份验证之前,请先“转义”它们。