进行安全查询,mysqli_real_escape_string替代

时间:2016-02-12 07:55:12

标签: php mysql

我有一个关于如何使字符串在查询中安全运行的问题,通常。

我有一个secure_input函数,它通过一些PHP函数拖动所有$_POST$_GET以使其安全,并且似乎重新格式化工作,但我仍然单引号出错,即使它们使用mysqli_real_escape_string()的反斜杠正确转义。

以下是它的运行方式:

// function which drives on every post and get
function secureinput($link, $value) {
    $value = htmlentities(stripslashes($value));
    $value = str_ireplace("script", "blocked", $value);
    $value = mysqli_real_escape_string($link, $value);
    return $value;
}

// then I got another function which performs all of the mysqli requests and it starts with converting all the post and get data
if(isset($_POST)) {
    foreach($_POST as $post) {
        $post = secureinput($link, $post);
        echo "post converted<pre>" . $post . "</pre><br />";
    }
}
if(isset($_GET)) {
    foreach($_GET as $get) {
        $get = secureinput($link, $get);
        echo "get converted<pre>" . $get . "</pre><br />";
    }
}

输出看起来非常适合查询,但查询仍然存在:

  

&#34;一些不起作用的文字&#34;

怎么还会失败?

我为某些textareas实现了ckeditor,它为单引号发送了一个替代方案,它在查询中完美运行,ckeditor将其替换为S#39; (&amp;而不是S)。

PHP中是否有一个函数可以执行相同的操作,而不是反斜杠?单引号以同样的方式进行格式化也是相当不错的。

2 个答案:

答案 0 :(得分:0)

如果您使用PDO,则内置了为您执行此操作的功能。查看this question.

答案 1 :(得分:0)

为了避免诸如可能的SQL注入之类的不良行为,我建议您使用mysqli扩展提供的预准备语句作为描述here

另一种选择是使用PDO abstraction layer