3 回答
TA贡献1934条经验 获得超2个赞
是的,它们会保护你的安全,但前提是它们的使用是绝对正确的。如果不正确地使用它们,您将仍然容易受到攻击,并且可能会出现其他问题(例如,数据损坏)。 请改用参数化查询(如上文所述)。您可以通过例如PDO或PEARDB之类的包装器使用它们。 确保魔术_引号_gpc和魔术_引号_运行时在任何时候都是关闭的,并且不会意外地打开,甚至不会被短暂地打开。这些都是PHP开发人员为防止安全问题(破坏数据)而进行的一次早期和严重错误的尝试。
TA贡献1821条经验 获得超4个赞
当涉及到数据库查询时,始终尝试并使用准备好的参数化查询。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
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
添加回答
举报