如何改进PHP脚本中使用的函数

时间:2012-05-18 07:29:31

标签: php mysql function sql-injection

,我正在尝试阻止SQL注入 ,当我使用MySQL时,我的功能是否足够?我该如何改进呢?

感谢您的时间和耐心。

    <?php
    function sanitize($data) {
        if (is_array($data)) {
            foreach($data as $var=>$val) {
                $output[$var] = sanitize($val);
            }
         }
         else {
             if (get_magic_quotes_gpc()) {
                 $data = stripslashes($data);
             }
             $data = htmlspecialchars($data);
             $output = mysql_real_escape_string($data);
         }
         return $output;
    }
    ?>

1 个答案:

答案 0 :(得分:4)

这是您在代码中永远不会使用的完美示例。规则很简单:

a)使用准备好的陈述(我强烈推荐这个解决方案)

或(如果由于某种原因你不能使用PDO或mysqli)

b.1)每个(即使您从“受信任”来源获得的 没有任何例外)充当值的字符串应为{{1} } ED
b.2)每个整数应为mysql_real_escape_string b.3)如果它是预期的,则应检查每个非整数的数字 b.4)永远不要使用用户的输入作为列/表名的替换,总是使用白名单

简单到1-2-3

因此,只有在需要时才应用消毒功能 - 您永远不会对所有变量应用某些“通用”功能

  

我该如何改进?

改善它的唯一方法 - 删除它

<强> UPD

什么是白名单 - 假设您接受用户输入以用作列名。例如,用于分拣设施。

因此,您需要创建(int)并检查用户的输入是否存在于此数组中(所谓的白名单)。如果是的话 - 你可以使用它,否则 - 你不会那样做