来说说 系统参数安全过滤问题。
1.前置条件:
目前服务器配置:最好是关闭
magic_quotes_gpc =On
2.安全过滤 (行为类):
可直接用阿里云文件全局控制。拦截
3.参数安全过滤和替换:
(默认I或者过滤类包(最基本转实体,剔除代码等,注意文章等编辑内容除外也不要转实体))
包含确保转义过滤(行为类):
确保不论魔术开关是否开启,进入系统的数据都是转义过的
参考NC的核心主干方法。
4.数据库插入前 字段过滤
处理:
入库前最终的转义即可
数据库过滤 (框架DB类库addslashes(
stripslashes()))
综上,
整站防止SQL注入方案:
1.全局安全过滤----全局拦截
2.参数安全过滤和替换---默认I或者过滤类包(最基本转实体,剔除代码等,注意文章富文本编辑内容除外也不要转实体,直接入后端处理。如果插库前不判断转义则在数据进入后判断转义再进入,入库前反转义,转实体,插库)
(确保转义过滤的方法:addslashes(
stripslashes())-----无论是ON还是OFF,先去再转义。还有注意不要二次转义入库)
3.如果参数进入没做转义,进入数据库之前做转义和一些特殊字符的处理(如下)。-----最终确保特殊字符转义入库不报错,特殊字符(按需定义一般是<>等,'或者/一般是允许的)和
代码要转实体,最好不要入库。
转义完入库,数据库会吃掉转义符。
$str = stripslashes($str);
mysql_real_escape_string()
-----------------------
拦截---危险攻击代码。
替换过滤,html可先去转义符再转实体入库---危险字符。
转义(重点是在入库而不是进入)
---入库不报错,要么进来处理要么入库前处理,但不要二次转义。
转义:
主要是防止一些符号歧义造成数据错误。
如你要保存一个词don't。如果你的sql语句用单引号引的话就变成'don't',这时t'就没有意义了,会认为是一个错误语句。另一个原因是为了防止sql注入攻击用的