我已经在我网站的每个页面上的其他任何内容之前运行了清理类.我非常确定addslashes与使用mysql_real_escape_string进行转义相同.
class sanatize { private static $singleton; function __construct(){ $_CLEAN_POST = array(); $_CLEAN_GET = array(); $_CLEAN_REQUEST = array(); foreach($_REQUEST as $key => $value) { $key = addslashes(trim(strip_tags($key))); $value = addslashes(trim(strip_tags($value))); $_CLEAN_REQUEST[$key] = $value; } foreach($_GET as $key => $value) { $key = addslashes(trim(strip_tags($key))); $value = addslashes(trim(strip_tags($value))); $_CLEAN_GET[$key] = $value; } foreach($_POST as $key => $value) { if(is_array($value)){ foreach($value as $key2 => $value2){ $key2 = addslashes(trim(strip_tags($key2))); $value2 = addslashes(trim(strip_tags($value2))); $_CLEAN_POST[$key][$key2] = $value2; } } else{ $key = addslashes(trim(strip_tags($key))); $value = addslashes(trim(strip_tags($value))); $_CLEAN_POST[$key] = $value; } } $_POST = array(); $_GET = array(); $_REQUEST = array(); $_POST = $_CLEAN_POST; $_GET = $_CLEAN_GET; $_REQUEST = $_CLEAN_REQUEST; } function __destruct() { //echo "cleaned"; } public static function getInstance() { if(is_null(self::$singleton)) { self::$singleton = new sanatize(); } return self::$singleton; } }
然后我会用它来称呼它
$sanatize = sanatize::getInstance();
Matthew Flas.. 7
"我非常确定addslashes与使用mysql_real_escape_string进行转义相同."
首先,事实并非如此. mysql_real_escape_string
知道连接,并考虑该连接的字符集.
其次,你基本上复制了失败的magic_quotes
设计.并非所有这些字段都进入数据库,因此您正在进行不必要的工作.你也必须要小心,不要在"干净"的阵列中重新逃脱; 双重逃避是一个非常普遍的问题.
在我看来,SQL注入的最简单的解决方案是准备语句.我建议使用PDO
或者mysqli
.
编辑:既然你已经在使用mysqli,你应该忘记这个清洁的想法,并简单地使用MySQLi_STMT
. mysqli::prepare
给出了如何创建变量并将变量绑定到预准备语句的示例.注意?
占位符.另外看看mysqli_stmt::bind_param
.
"我非常确定addslashes与使用mysql_real_escape_string进行转义相同."
首先,事实并非如此. mysql_real_escape_string
知道连接,并考虑该连接的字符集.
其次,你基本上复制了失败的magic_quotes
设计.并非所有这些字段都进入数据库,因此您正在进行不必要的工作.你也必须要小心,不要在"干净"的阵列中重新逃脱; 双重逃避是一个非常普遍的问题.
在我看来,SQL注入的最简单的解决方案是准备语句.我建议使用PDO
或者mysqli
.
编辑:既然你已经在使用mysqli,你应该忘记这个清洁的想法,并简单地使用MySQLi_STMT
. mysqli::prepare
给出了如何创建变量并将变量绑定到预准备语句的示例.注意?
占位符.另外看看mysqli_stmt::bind_param
.