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