博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[转]关于PHP的漏洞以及如何防止PHP漏洞?
阅读量:5281 次
发布时间:2019-06-14

本文共 1668 字,大约阅读时间需要 5 分钟。

漏洞无非这么几类,XSS、sql注入、命令执行、上传漏洞、本地包含、远程包含、权限绕过、信息泄露、cookie伪造、CSRF(跨站请求)等。这些漏洞不仅仅是针对PHP语言的,本文只是简单介绍PHP如何有效防止这些漏洞。

1.xss + sql注入()

其中占大头的自然是XSS与SQL注入,对于框架类型或者有公共文件的,建议在公共文件中统一做一次XSS和SQL注入的过滤。,可由如下所示:

$_REQUEST = filter_xss($_REQUEST);

$_GET = filter_xss($_GET);

$_POST = filter_xss($_POST);

$_COOKIE = filter_xss($_COOKIE);

$_POST = filter_sql($_POST);

$_GET = filter_sql($_GET);

$_COOKIE = filter_sql($_COOKIE);

$_REQUEST = filter_sql($_REQUEST);

最简单的filter_xss函数是htmlspecialchars()

最简单的filter_sql函数是mysql_real_escape_string()

当然,谁都知道这种过滤filter_sql()只能过滤字符型和搜索型的注入,对于数字型是没有办法的,但也说明做了这层过滤后,只需在后面注意数字型的SQL语句就可以了,遇到了加intval过滤就可以了,这就变得容易多了。

2. 命令执行

对于命令执行,可以从关键字入手,总共可分为3类

(1) php代码执行 :eval等

(2)shell命令执行:exec、passthru、system、shell_exec等

(3) 文件处理:fwrite、fopen、mkdir等

对于这几类需要注意其参数是否用户可控。

3.上传漏洞

对于上传漏洞,也是重点关注的地方,要仔细分析它的处理流程,针对上传的绕过方式是很多的,最保险的方式:在保存文件是采用文件名随机命名和后缀白名单方式。其次要注意的一点是上传文件的地方可能不止一处,不要有遗漏,可能会碰到这样的情况,突然在某个目录里面包含了一个第三方的编辑器在里面。

文件包含漏洞涉及的函数如include() 、include_once()、require()、require_once()、file_get_contents()等

最常见的还是出在下载文件功能函数,例如download.php?file=../../../etc/passwd 这种类型中。

4. 权限绕过

权限绕过可分为两类吧

(1)后台文件的未授权访问。后台的文件没有包含对session的验证,就容易出现这样的问题

(2)未作用户隔离,例如mail.php?id=23显示了你的信件,那么换个ID, mail.php?id=24就查看到了别人的信件,编写代码是方便,把信件都存在一个数据表里,id统一编号,前端展现时只需按id取出即可,但未作用户隔离,判定归属,容易造成越权访问。

这样的例子是很常见的,给某银行做评估是就经常发现这种漏洞。

5. 信息泄露

信息泄露算是比较低危的漏洞了,比如列目录这种就属于部署问题,而与代码审计无关了,而像暴路径、暴源码这种是需要防止的。曾经遇到这样的代码

表面上似乎没问题,可是当请求变为 xx.php?a[]=1时,即参数变为数组的时候,就会发生错误以致路径泄露,而用isset判断则不会,当然一个个防太麻烦,建议在配置文件中关闭错误提示,或者在公共文件中加入如下代码以关闭错误显示功能:

之前PHP点点通(phpddt.com)就有一篇文章: ,介绍了register_globals 的危害以及魔术引用Magic Quotes使用说明。

注明:本文部分内容摘自PHPCHINA

转载请注明地址:   尊重他人劳动成果就是尊重自己!

转载于:https://www.cnblogs.com/linewman/p/9918916.html

你可能感兴趣的文章
算法Sedgewick第四版-第1章基础-008一用数组实现栈(泛型、可变大小)
查看>>
ANDROID_MARS学习笔记_S02_007_Animation第一种使用方式:代码
查看>>
面向对象的JavaScript-004
查看>>
浏览器兼容之background-size
查看>>
CentOS Linux服务器安全设置
查看>>
自助建站的特点
查看>>
面试前,三大步让你百战百胜
查看>>
腾讯云服务器探索(一)
查看>>
【原理】LVM(Logical Volume Manager)动态卷管理
查看>>
对SpringIOC、AOP的理解
查看>>
apache ftp server的简单入门(数据库验证)
查看>>
62-U型数字
查看>>
69-矩阵求和
查看>>
WebService客户端几种实现方式
查看>>
Lua1.1 Lua 的参考手册 (二)
查看>>
linux下mysql的root密码忘记解决方
查看>>
javascript学习笔记 - 引用类型 单体内置对象
查看>>
LeetCode-Pascal's Triangle II-帕斯卡三角-DP
查看>>
boot空间不足
查看>>
在ASP.NET项目中的web.config文件里配置数据库连接并在程序代码中获取连接字符串...
查看>>