【问题标题】:Does regex special character allowing security break?正则表达式特殊字符是否允许安全中断?
【发布时间】:2015-10-26 21:44:01
【问题描述】:

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

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

我也想允许特殊字符 ' 和 " 符号。我应该如何更好地实现它?以及它是否是 mysql 数据库的安全漏洞。

【问题讨论】:

标签: php mysql regex


【解决方案1】:

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

WHERE x = '$x'

$x 存在

' OR true OR '

变成

WHERE x = '' OR true OR ''

从而让黑客在不知道x 的正确值的情况下进入。这种 hack 的变体允许真正令人讨厌的事情发生。

逃避会得到

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

这将适当地失败,黑客将转向另一种方式来突破你的防御。

【讨论】:

    【解决方案2】:

    告诉我您希望在该字段中启用哪些字符和符号?我将编辑正则表达式。基本上它应该是这样的:

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

    【讨论】:

    • 我想要a到z、A到Z、0到9以及键盘上的所有特殊字符~`! @ # $ % ^ & * ( ) _ + = - } { | " : , . / \ ? ; '
    • 使用 /^[a-zA-Z0-9!@#\$%\^\&*)(+=._-]+$/g
    • 使用/^[a-zA-Z0-9!@#\$%\^\&'"*)\]\[(+=._-].*/
    • ' 和 " 不能按照允许的方式实现吗?
    猜你喜欢
    • 2015-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多