PHP常见漏洞防范

普通sql注入防范

1.gpc/rutime魔术引号

magic_quotes_gpc

magic_quotes_runtime

magic_quotes_sybase

2.使用过滤函数

addslashes()

mysql_real_escape_string()

mysql_escape_string()

宽字节注入防范

1.在设置SET NSMES 'gbk‘,character_set_client=binary设置character_set_client为binary

2.使用mysql_set_charset(‘gbk’)设置编码,然后使用mysql_real_escape_string()函数被参数过滤

3.使用pdo方式,在PHP5.3.6及以下版本需要设置setAttribute(PDO::ATTR_EMULATE_PREPARES,false);来禁用prepared statements的 仿真效果

二次urldecode注入防范

代码审计时重点检查urldecode和rawurldecode函数

XSS漏洞防范

1.html实体转码

2.过滤特殊字符

单引号(’)

双引号(")

尖括号(<>)

反斜杠(\)

冒号(:)

与符(&)

井号(#)

3.创建黑名单与白名单

CSRF防范

1.增加token/referer验证避免img标签请求的水坑攻击

在页面或cookie里面加一个不可预测的字符串,服务器在接收操作请求的时候只要验证这个字符串是否是上次访问留下的即可判断是不是可信请求

2.增加验证码

文件上传漏洞防范

1.白名单方式过滤文件扩展名,使用in_array或者(===)来对比扩展名

2.保存上传的文件时重命名文件,文件命名规则采用时间戳的拼接随机数的MD5值方式"md5(time()+rand(1,10000))"

代码执行漏洞防范

结合正则表达式进行白名单限制

命令执行漏洞防范

1.命令防注入函数

escapeshellcmd()

escapeshellarg()

2.创建参数白名单

变量覆盖函数漏洞防范

1.使用原始变量

不进行变量注册,直接用原生的 G E T 、 _GET、 GET_POST等数组变量进行操作,如果考虑程序可读性等原因,需要注册个别变量,可以直接在代码中定义变量,然后再把请求中的值赋值给它。

2.验证变量存在

在注册变量前先判断变量是否存在

参考文献《代码审计》尹毅 著
https://www.w3school.com.cn

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

C1yas0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值