PHP preg_match适用于A-Z,a-z,0-9,_,-和一个空格

时间:2018-08-06 22:01:37

标签: php mysql mysqli

我发现A,Z,a-z,0-9,_,-和一个空格的PHP preg匹配项。我将其用于我的网站上的用户名验证。如果preg_match“不够安全”,我将重定向。我认为我唯一需要担心的字符是我正在阅读的内容中的_(下划线)。有人知道我可以运行和测试这种情况是否容易受到攻击的任何SQL注入代码吗?还是这段代码足以满足我想要实现的目标。 PS-我还将使用准备好的语句,因为此用户输入将进入我的数据库...

// escapes special characters
$username = mysqli_real_escape_string($connection, $username);
// checks to see if characters other than A-Z, a-z, 0-9, " "(white space), -(hyphen), and _ (underscore)...
if (preg_match('/^[a-zA-Z0-9\040\_\-]+$/i', $username))
{
    echo 'secure';
}
else
{
    echo 'not secure';
}

1 个答案:

答案 0 :(得分:1)

不要限制密码,也不要检查您认为有什么字符会入侵您。相信我,preg_match()并不是您想要的。

您现在正在做的一切都没有必要。

通过使用password_hash()password_verify()(以及准备好的语句),将确保您的数据库不会受到损害。

让您的用户选择自己的密码,并使用下面显示的PHP.net手册中的功能。

参考文献:

诸如--DELETE 123, '\<br>之类的密码被视为完全有效。

这两个哈希函数对于任何字符都非常安全。在运输过程中不会造成安全隐患。

使用mysqli_real_escape_string()将对诸如\之类的字符产生不利影响。

即:abc\将变成abc\\,其中的斜杠被转义。

同样,不要使用您现在想要使用的东西。


请阅读Cleansing User Passwords(在堆栈溢出此处为 ),其中讨论了散列密码如何使数据安全地存储而无需准备。