代码之家  ›  专栏  ›  技术社区  ›  Norbert Pushparaj Yuvaraj

基本SQL注入?

  •  4
  • Norbert Pushparaj Yuvaraj  · 技术社区  · 15 年前

    有人告诉我 previous question 我的查询容易被SQL注入。

    get_stats = mysql_query("SELECT * 
                                   FROM visitors 
                                  WHERE site='$_GET[site]' 
                                    AND date BETWEEN '$start_date' AND '$end_date' ");
    

    解决这个问题最简单的方法是什么?关于注射的问题,你有没有进一步的阅读?(我在谷歌可能会错过的东西)。谢谢!

    3 回复  |  直到 13 年前
        1
  •  16
  •   Jeremy Meo    13 年前

    使用 Prepared Statements .

    在大多数情况下,准备好的语句可以安全地将查询与参数结合起来。

        2
  •  8
  •   JasonDavis    15 年前

    $获取['site']是直接从浏览器中的URL获取的值,这意味着用户可以轻松地将此值更改为他们想要的任何值,在将其发送到数据库之前,您应该检查/清理该值以及所有实际值。

    像这样的事情将是一个开始,仍然可以使用更多的工作,有很多方法可以做到这一点,我将创建一个自定义函数/类,以便轻松地将所有变量通过站点范围传递,这可以简单地重复类似的事情。

    $site = mysql_real_escape_string($_GET['site']);
    $start_date = mysql_real_escape_string($start_date);
    $end_date = mysql_real_escape_string($end_date);
    
    get_stats = mysql_query("SELECT * FROM visitors WHERE site='$site' AND date >= '$start_date' AND date <= '$end_date' ");
    
        3
  •  2
  •   Ben Shelock    15 年前

    mysql_real_escape_string 是这里最基本和最简单的安全形式。