-3

我正在使用此功能来防止 sql 注入:

function filter($input)
{
  if(strpos(str_replace("''","","$input"),"'") != false)
  {
    return str_replace("'", "''", $input);
  }
  return $input;
}

使用它安全吗?有人可以绕过它吗?如果可以绕过它,请给我一个关于如何保护这个功能的提示或一个关于你如何看到绕过它的例子

更新:它用于 SQL Server

4

3 回答 3

2

如果您不是问题领域的专家,请不要发明自己的安全解决方案。看看这里http://php.net/manual/en/security.database.sql-injection.php了解更多关于 SQL 注入的信息。

还可以通过http://www.php.net/manual/en/book.pdo.phphttp://www.php.net/manual/en/pdo.prepare.php进行适当的预防

如果工具已经存在,您不需要自己发明。

于 2013-04-07T10:47:41.770 回答
0

使用它安全吗?

有人可以绕过它吗?

是的

  1. 无论如何,它都不应该是输入过滤器。但是用于 SQL 查询的数据格式化程序。
  2. 至少它必须是

    function SQLstrFormat($str)
    {
        return "'".str_replace("'", "''", $str)."'";
    }
    

这种方式在适用时是安全的。

于 2013-04-07T10:43:20.490 回答
0
    function mysql_pre($value) {

            $magic_quotes_active = get_magic_quotes_gpc();
            $new_enough_php =      function_exists("mysql_real_escape_string(unescaped_string)"); //i.e. PHP >= v4.3.0

            if($new_enough_php) { //PHP v4.3.0 or higher
                //undo any magic quote effect so mysql_real_escape_string can do the work

                if($magic_quotes_active) {$value = stripslashes($value);}

                $value = mysql_real_escape_string($value);

            } else { //before PHP v4.3.0

                if(!$magic_quotes_active) {
                    $value = addslashes($value);
                }
            }
            return $value;
        }
于 2015-01-03T08:00:46.113 回答