PHP preg_匹配A-Z、A-Z、0-9、u、-,和一个空格

PHP preg_匹配A-Z、A-Z、0-9、u、-,和一个空格,php,mysql,mysqli,Php,Mysql,Mysqli,我找到了a-Z、a-Z、0-9、Z、-、和一个空格的PHP preg匹配项。我在我的网站上使用它进行用户名验证。如果preg_匹配“不够安全”,我将重定向。我想我唯一需要担心的是我正在阅读的内容中的(下划线)。是否有人知道我可以运行和测试的SQL注入代码是否存在漏洞?或者这段代码对于我想要实现的目标是否足够。PS-我也将使用准备好的语句,因为这个用户输入将进入我的数据库 // escapes special characters $username = mysqli_real_escape_st

我找到了a-Z、a-Z、0-9、Z、-、和一个空格的PHP preg匹配项。我在我的网站上使用它进行用户名验证。如果preg_匹配“不够安全”,我将重定向。我想我唯一需要担心的是我正在阅读的内容中的(下划线)。是否有人知道我可以运行和测试的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';
}

不要限制密码或检查是否有任何你认为会攻击你的字符
preg_match()
不是你想要的,相信我

你现在所做的一切都是毫无必要的

通过使用
password\u hash()
password\u verify()
(以及准备好的语句),将确保您的数据库不会受到损害

让您的用户选择自己的密码,并使用PHP.net手册中的函数,如下所示

参考资料:

诸如
--DELETE 123'\
之类的密码被认为是完全有效的

这两个散列函数对于任何字符都是完全安全的。在运输过程中,任何东西都不会造成安全风险

使用
mysqli\u real\u escape\u string()
将对
\
等字符产生不利影响

例如:
abc\
将变为
abc\\
,斜杠将被转义

所以再一次,不要使用你现在想要使用的东西



阅读(这里是关于堆栈溢出的),因为它谈到散列密码如何使数据在无需准备的情况下安全存储。

\w
相当于
[a-zA-Z0-9]
“如果预匹配“不够安全”,我将重定向。”-你说的“不够安全”是什么意思?你害怕有人会用被认为是注射的字符来攻击你吗?我删除了我的答案;你在下面留下的评论“我这样做只是为了对我的数据库进行用户名检查。我的用户可以创建自己的密码,我可以使用标准的PHP哈希和salt函数来创建密码。但如果他们一开始输入这些字符,我会认为这是恶意的,只是让他们重定向回去,然后重新键入他们的用户名。“不支持你在这里发布的内容,没有任何意义。投票以不清楚的方式结束。”我还将使用准备好的声明。。。“-如果使用准备好的语句,就不必担心sql注入…@Philipp okay我的用户在创建用户名时只允许使用上面指定的preg_匹配。是否仍然需要真正的_escape _字符串,或者我也应该消除它?我这样做仅仅是为了对我的数据库进行用户名检查。我的用户可以创建自己的密码,我可以使用标准的PHP哈希和salt函数来创建密码。但如果他们一开始输入这些字符,我会认为这是恶意的,只是让他们重定向回去,然后重新键入用户名。@hbennet3我不明白你的意思,对不起。我在你的帖子上提交了这个。