如何保护这段代码免受sql注入?

时间:2011-01-16 15:33:55

标签: php sql code-injection

嘿所有,我创建了一个文本框,通过从数据库中获取内容来自动填充输入,现在它的工作方式如下:

<script type="text/javascript">
$().ready(function() {
    $("#food").autocomplete("get_course_list.php", {
        width: 260,
        cacheLength: 10,
        matchContains: false,

        //mustMatch: true,
        //minChars: 0,
        //multiple: true,
        //highlight: false,
        //multipleSeparator: ",",
        selectFirst: true

    });
});
</script>

,这在.php文件中:

<?php
require_once "config2.php";
$q = strtolower($_GET["q"]);
if (!$q) return;

$sql = "select DISTINCT voedsel as voed from voedingswaarden where voedsel LIKE '%$q%'";
$rsd = mysql_query($sql);
while($rs = mysql_fetch_array($rsd)) {
    $cname = $rs['voed'];
    echo "$cname\n";
}
?>

但现在我读到了sql注入等,所以我想用mysql_real_escape_string()来保护我的php脚本。但我似乎无法让它发挥作用。任何想法如何在我的.php文件中实现这个,如果这是足够的保护?

2 个答案:

答案 0 :(得分:1)

$q = strtolower($_GET["q"]);

变为

$q = mysql_real_escape_string(strtolower($_GET["q"]));

必须建立与数据库的连接,并且必须只有一个链接,否则你的mysql_query将无法正常工作。

代码不是很优雅,但它会起作用。

你可能想要改变它:

if (!$q) return;

if (strlen($q) == 0) return;

答案 1 :(得分:0)

之前我已经说过了,但我认为mysql_real_escape_string()应该被取消,你应该使用PDO代替。

  

“PDO - PHP数据对象 - 是一个   数据库访问层提供   统一访问多个方法   数据库“。

PDO是与数据库通信的新改进方式。 PDO准备了使您的网站更快/更安全的声明,因为:

  

准备好的声明是预编译的   可以执行的SQL语句   多次通过发送   数据到服务器。它有补充   自动制作的优点   占位符中使用的数据安全   来自SQL注入攻击。