Bri*_*ian 0 php xss sql-injection
我已经在我网站的每个页面上的其他任何内容之前运行了清理类.我非常确定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;
}
}
Run Code Online (Sandbox Code Playgroud)
然后我会用它来称呼它
$sanatize = sanatize::getInstance();
Run Code Online (Sandbox Code Playgroud)
"我非常确定addslashes与使用mysql_real_escape_string进行转义相同."
首先,事实并非如此. mysql_real_escape_string知道连接,并考虑该连接的字符集.
其次,你基本上复制了失败的magic_quotes设计.并非所有这些字段都进入数据库,因此您正在进行不必要的工作.你也必须要小心,不要在"干净"的阵列中重新逃脱; 双重逃避是一个非常普遍的问题.
在我看来,SQL注入的最简单的解决方案是准备语句.我建议使用PDO或者mysqli.
编辑:既然你已经在使用mysqli,你应该忘记这个清洁的想法,并简单地使用MySQLi_STMT. mysqli::prepare给出了如何创建变量并将变量绑定到预准备语句的示例.注意?占位符.另外看看mysqli_stmt::bind_param.
| 归档时间: |
|
| 查看次数: |
469 次 |
| 最近记录: |