2014-10-29 38 views
1

我正在向db中插入数据,并且进行了以下验证,其中我只接受'&@.。之后,我使用mysqli_real_escape_string($var)Php请求表达式是否安全以将数据插入数据库?

所以我看到它的输出是:

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

我的问题:

1)是否有任何安全问题,如果我接受'&@.会出现在哪里?
2)如果它不是安全问题,那么它将db插入\。用反斜杠存储数据有问题吗?
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); 
+3

使用预准备语句时不需要所有这些。 – 2014-10-29 06:32:32

+0

只需使用预准备语句而不是使用mysqli_real_escape_string – Ali 2014-10-29 06:33:39

+0

@ Fred-ii-哇,就可以忽略由单引号引起的所有安全问题!大。一行答案。但根据我的问题,你有任何答案? – creativeartbd 2014-10-29 06:34:22

回答

-1
  1. 有没有,如果我接受'和&和@和任何安全问题就会出现。 ?
    会有安全问题作为一个单引号(')用于SQL注入

  2. 如果不是安全问题,那么它插入\为DB。用反斜杠存储数据有问题吗?
    不,用反斜线存储数据没有问题,这就是逃避工作的方式。

  3. 如果它不是安全问题,那么在用户面板数据显示。那么它是否需要用stripslashes($ var)来转义;?
    是的,这会造成显示器中的一个问题,因为单引号将用一个反斜杠,没有一个反斜杠,以显示它进行转义,你可以使用stripslashes()

所有这些问题,你提的问题可以简单地忽略,如果你开始使用预处理语句,因为它不需要任何转义,所以你的数据库将是无SQL注入的,不会有反斜杠使你的输出看起来很糟糕。