由于程序开发人员对程序中的一些数据类型没有经过检查、向 MYSQL 提交正确的数据类型以及特殊数据的转义,导致程序容易受SQL注入式攻击。就此,PHP对此已提供了安全的设置及内置函数来防止此问题的发生。以下就个人在开发应用中写点........
1、magic_quotes_runtime 设置
当它打开时,php的大部分函数自动的给从外部引入的(包括数据库或者文件)数据中的溢出字符加上反斜线。如果设定了 magic_quotes_runtime为 on 那么提交的数值就会自动将 ' 变成 /' 。为了使自己的程序不管服务器是什么设置都能正常执行,在开始(或不需要自动转义的时候)用set_magic_quotes_runtime(0)关掉。当然如果重复给溢出字符加反斜线,那么字符串中就会有多个反斜线,所以这时就要用 set_magic_quotes_runtime()与 get_magic_quotes_runtime()设置和检测php.ini文件中magic_quotes_runtime状态。
2、magic_quotes_gpc 设置
magic_quotes_gpc 设置是否自动为GPC(get,post,cookie)传来的数据中的' " / 加上反斜线。可以用 get_magic_quotes_gpc()检测系统设置。如果没有打开这项设置,可以使用addslashes()函数添加,它的功能就是给数据库查 询语句等的需要在某些字符前加上了反斜线。这些字符是单引号(')、双引号(")、反斜线(/)与 NUL(NULL 字符)。即 ' 变成 /', "变成 /"。
3、一些常用的内置函数(addslashes , stripslashes ,htmlspecialchars,trim......)
define('MAGIC_QUOTES_GPC', get_magic_quotes_gpc());
function strAddslashes($string, $force = 0, $strip = FALSE) {
if(!MAGIC_QUOTES_GPC || $force) {
if(is_array($string)) {
foreach($string as $key => $val) {
$string[$key] = strAddslashes($val, $force);
}
} else {
$string = addslashes($strip ? stripslashes($string) : $string);
//stripslashes -- 去掉反斜线字符
}
}
return $string;
}
PHP如何防止SQL注入式攻击
最新推荐文章于 2024-08-24 09:58:50 发布