防止 MySQL 注入(inject)的最常见建议是准备好的语句(来自 mysqli 的 PDO)。比如说,无论出于何种原因,我无法使用准备好的状态网......我如何保护我的数据?
我很想创建一个如下所示的函数...
function cleanse($val) {
global $db;
$val = $db->real_escape_string($val);
return $val;
}
//Then I use it like
$sql = "select abc from dyf where z='".cleanse($_GET['id'])."'";
$db->query($sql); //etc...
但我不确定这是否可以阻止 1=1 攻击和来自奇怪外来字符的攻击。</p>
是否有一种万无一失的方法可以使我的清理功能安全(没有准备好的功能!)?
我需要将任何字符串转换为 utf-8 吗?
如果我将所有列值括在引号中并使用 mysqli 的 real_escape_string,我可以吗?
还有其他技巧可以使我的清理功能安全地防止注入(inject)吗?
最佳答案
我不会推荐它,但使用mysql_real_escape_string
可以做到这一点。
$sql = "select abc from dyf where z='".mysql_real_escape_string($_GET['id'])."'";
但是,如果您可以使用PDO
,那么随时使用它,如果您受到限制,这将是一个机会。仅适用于某些版本的 PHP
。
http://php.net/manual/en/function.mysql-real-escape-string.php
关于php - 如果没有准备好的语句,如何防止 SQL 注入(inject)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33683197/