有什么方法可以改进我的PHP数据卫生课程?

sto*_*yri 1 php sql security sanitization class

我正在组建一个网站,(我们已经在客户端使用javascript进行预验证).但是厌倦了每隔一行编写mysql_real_escape_string.我写了这个类只有两个函数,主要集中在用户输入/ sql中清理数据.我的问题是,有哪些方法可以实现更轻松的输入消毒并提高代码可读性?

<?php 
class Safe {
    function userinput($string){
        $string = strip_tags($string);
        $string = htmlspecialchars($string);
        return $string;
    }
    function sql ($string){
       $sqlstuff = Array("union", "select", "update", "delete", "outfile", "create");
       $string = Safe::str($string);
       $string = mysql_escape_string($string);
       $string = str_ireplace($sqlstuff, "", $string);
       return $string;

    }
}
?>
Run Code Online (Sandbox Code Playgroud)

mea*_*gar 5

对不起,这听起来很刺耳,但你的班级完全被打破了.

  • 您不应该htmlspecialchars用于清理输入,它只对转义输出有用.您不需要编码HTML以插入数据库也不需要.仅htmlspecialchars在将输出发送到浏览器时使用
  • 您不应该从输入中剥离标记,您应该将它们单独留下并htmlspecialchars在以后输出该数据时再次使用以确保HTML标记被转义而不被浏览器解释
  • 您不应该使用mysql_escape_string或mysql_real_escape_string,您应该使用PDO.如果您正在编写新站点,则绝对没有理由不正确启动并使用PDO.做吧.
  • 你不应该过滤掉"联合","选择"等,这是愚蠢的.这些单词可以用普通英语出现,如果你正确地逃避PDO为你处理的引号,它们就是无害的.

再次,抱歉这个答案的严厉语气,但废弃整个事情并使用PDO.这里几乎没有任何可挽救的东西.