PHP函数可清理数据并防止SQL注入

时间:2018-10-19 08:45:07

标签: php function sql-injection sanitization

我通常使用下面的函数来清理表单输入并获取值。但这突然停止了工作,并且了解到自5.4版以来,已经从PHP中删除了get_magic_quotes_gpc()功能。并且无法再启用或配置它,它已永久设置为“关闭”。现在我正在使用PHP 5.6,有人可以建议我像这样的函数来清理数据并防止SQL注入。

function clean($str) {
    $str = @trim($str);
    if(get_magic_quotes_gpc()) {
        $str = stripslashes($str);
    }
    return mysql_real_escape_string($str);
}

3 个答案:

答案 0 :(得分:0)

如果不使用PDO(强烈建议使用),则应使用mysqli_*函数。在其中,您具有mysqli_real_escape_string()函数来清理用户输入。您还可以使用utilize filter_var()函数来过滤输入。

答案 1 :(得分:0)

我强烈建议升级到php7.2

不过,要回答您的问题,使用htmlspecialchars()函数会将特殊字符转换为html。

http://php.net/manual/en/function.htmlspecialchars.php

示例htmlspecialchars()

<?php
$new = htmlspecialchars("<a href='test'>Test</a>", ENT_QUOTES);
echo $new; // &lt;a href=&#039;test&#039;&gt;Test&lt;/a&gt;
?>

尽管使用htmlentities()更为常见,因为它会转换更大范围的字符。

http://php.net/manual/en/function.htmlentities.php

示例htmlentities()

<?php
$str = "A 'quote' is <b>bold</b>";

// Outputs: A 'quote' is &lt;b&gt;bold&lt;/b&gt;
echo htmlentities($str);

// Outputs: A &#039;quote&#039; is &lt;b&gt;bold&lt;/b&gt;
echo htmlentities($str, ENT_QUOTES);
?>

答案 2 :(得分:0)

mysql_real_escape_string 选项仅适用于旧版本PHP上的遗留代码,并且如果您不打算升级MySQL版本。

function clean($str) {
    $str = @trim($str);
    return mysql_real_escape_string($str);
}

推荐: 将MySQL版本升级到最新版本。 使用参数化的查询/准备语句。 Here 您会发现有用的讨论。