Php请求表达式是否可以安全地将数据插入数据库


Is Php reqular expression secure to insert data into database?

我在数据库中插入数据,并进行以下验证,其中我只接受'&以及@.。之后我使用mysqli_real_escape_string($var)

所以我看到它的输出是:

I''m a good boy &@ is it secure var for input to DB.

我的问题:

1) 如果我接受'&以及@.,是否会出现任何安全问题
2) 如果不是安全问题,则将'插入数据库。用反斜杠存储数据有问题吗
3) 如果这不是安全问题,那么用户面板中的数据显示为'。那么它需要用stripslashes($var);逃生吗?

我的验证:

$var = "I'm a good boy &@ is it secure var for input to DB.";
if(preg_match("/^[a-zA-Z0-9.'&@ ]+$/", $var) !== 1)
    echo "var is NOT OK.<br/>";
else
    echo "var is ok.<br/>";
mysqli_real_escape_string($link, $var);
  1. 如果我接受,是否会出现任何安全问题;和@和
    由于单引号(')用于SQL注入,因此会出现安全问题

  2. 如果不是安全问题,则插入数据库。用反斜杠存储数据有问题吗
    不,用反斜杠存储数据没有问题,这就是转义的工作原理

  3. 如果这不是安全问题,那么用户面板中的数据将显示为。那么,它是否需要使用stripeshases($var);进行转义
    是的,这将导致显示问题,因为单引号将使用反斜杠进行转义,要在没有反斜杠的情况下显示,可以使用stripslashes()

如果你开始使用准备好的语句,你提到的所有这些问题都可以被忽略,因为它不需要任何转义,所以你的数据库将是免费的SQL注入,不会有反斜杠使你的输出看起来很糟糕。