正则表达式特殊字符允许安全性中断?

时间:2015-08-04 13:01:12

标签: php mysql regex

我的正则表达式看起来像这样。

    if (preg_match("/^[a-zA-Z0-9~@#$^*()_+=[\]{}|\\,.?: -]*$/", $text) == FALSE) {
      echo 'Wrong!'
    }

我想允许特殊字符'和'签名。我应该如何更好地实现它?以及它是否是mysql数据库的安全中断。

2 个答案:

答案 0 :(得分:1)

最好通过转义来自用户的任何内容来阻止SQL注入。没有这个,

WHERE x = '$x'

$ x

' OR true OR '

变成

WHERE x = '' OR true OR ''

从而让黑客不知道x的正确价值。这种黑客的变种允许真正令人讨厌的事情发生。

逃避会给出

WHERE x = '\' OR true OR \''

这将适当地失败,黑客将继续以另一种方式突破你的防御。

答案 1 :(得分:0)

准确地告诉我你想在字段中启用哪些字符和符号?我将编辑正则表达式..基本上它应该是这样的:

$yourString = "blahblah";
if (preg_match('/^[A-Za-z0-9_-]*$/', $yourString)) {
    #your string is good!
}
else {
    #your string is wrong.
}