我绝对同意上述的说法,但我想补充一件事,以回应Cheekysoft的答覆,特别是:当涉及到数据库查询时,始终尝试并使用准备好的参数化查询。mysqli和PDO库支持这一点。这比使用转义函数(如MySQL_REAL_EXECH_String)安全得多。是的,MySQL_REARY_EXIFE_String实际上只是一个字符串转义函数。这不是一颗神奇的子弹。它所要做的就是转义危险字符,以便它们可以安全地在单个查询字符串中使用。但是,如果您不事先清理您的输入,那么您将容易受到某些攻击向量的攻击。想象一下下面的SQL:$Response=“从表中选择字段id=”.mysql_Real_EXECH_String($_POST[‘id’]);您应该能够看到这很容易被利用。假设id参数包含公共攻击向量:1或1=1没有危险的字符在那里编码,所以它将直接通过转义过滤器。离开我们:从表中选择字段,其中id=1或1=1我编写了一个快速的小函数,放在我的数据库类中,它将剔除任何不是数字的东西。它使用PREG_REPLE,所以有一个更优化的函数,但它在紧要关头工作.function Numbers($input) {
$input = preg_replace("/[^0-9]/","", $input);
if($input == '') $input = 0;
return $input;}所以不要用$Resue=“从表中选择字段,其中id=”.mysqlrealfreestring(“1 or 1=1”);我会用$READ=“从表中选择字段,其中id=”.Numbers(“1 or 1=1”);它将安全地运行查询。从表中选择字段,其中id=111当然,这只是阻止了它显示正确的行,但我认为这对试图将SQL注入到您的站点的人来说不是什么大问题;)