PHP常见漏洞

1、不安全的权限设置

安全风险:不安全的权限设置

权限为0777表示所有权限均开放,即属性为:drwxrwxrwx(用户可读可写可执行)。

修复方案:设置相应的权限,尽量减少权限为0777。

2、PHP反序列化漏洞

安全风险: PHP反序列化漏洞(PHP对象注入漏洞)

传给 unserialize()的参数可控 + 构造序列化字符串 --> 从而控制对象内部的变量甚至是函数

修复方案 严格控制 unserialize函数的参数,对unserialize后的变量内容进行检查

注入案例:https://chybeta.github.io/2017/06/17/浅谈php反序列化漏洞/

3、直接输出入参可能导致XSS

安全风险:直接输出入参会导致XSS

修复方案 :使用htmlentities函数进行转义

注入案例:https://qiuzhenyuan.github.io/2017/11/11/Web安全系列——XSS攻击/

4、cURL导致的SSRF

安全风险:SSRF漏洞(Server-Side Request Forgery)

形成原理 SSRF形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。

风险

1、攻击者可以对外网、服务器所在内网、本地进行端口扫描,获取服务的banner信息。

2、攻击运行在内网或本地的应用程序。

3、对内网web应用进行指纹识别。

4、攻击内外网的web应用。

5、利用file协议读取本地文件等。

注入案例:

function curl($url){ c h = c u r l i n i t ( ) ; c u r l s e t o p t ( ch = curl_init(); curl_setopt( ch=curlinit();curlsetopt(ch, CURLOPT_URL, u r l ) ; c u r l s e t o p t ( url); curl_setopt( url);curlsetopt(ch, CURLOPT_HEADER, 0); curl_exec( c h ) ; c u r l c l o s e ( ch); curl_close( ch);curlclose(ch); } $url = G E T [ ′ u r l ′ ] ; c u r l ( _GET['url']; curl( GET[url];curl(url);

以上代码未做任何SSRF防御,风险举例如下:

利用file协议任意文件读取

curl -v ‘http://test.com:8082/ssrf.php?url=file:///etc/passwd’

利用dict协议查看端口

curl -v ‘http://test.com:8082/ssrf.php?url=dict://127.0.0.1:22’

修复方案

  1. 限制协议为HTTP、HTTPS

curl_setopt($ch, CURLOPT_PROTOCOLS, CURLPROTO_HTTP | CURLPROTO_HTTPS);

  1. 限制请求域名白名单

  2. 禁止30x跳转

删掉 curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

5、SESSION固定攻击
安全风险

/index.php?sessid=1f3870be274f6c49b3e31a0c6728957f

修复方案 删除

注入案例:http://www.cnblogs.com/phpstudy2015-6/p/6776919.html

6、拼接SQL注入

安全风险 SQL注入漏洞形成原因

SQL语句拼接,若未对用户可控参数进行足够过滤,可能会导致SQL注入

风险 - 用户信息被篡改 - 攻击者偷取代码和用户数据 - 业务运营的数据被恶意获取 - 线上代码被非法篡改,并造成为恶意攻击者输送流量或其他利益的影响

修复方案 - 已不再使用的功能,直接做下线处理 - 引入安全组件 - 代码层修复:尽量不要拼接SQL语句。如必要,需对用户可控的参数进行严格过滤

举例:若输入的数据为 php $_POST['username'] = 'adan'; $_POST['password'] = '' OR ''='';SQL语句变为 SELECT * FROM users WHERE user='adan' AND password='' OR ''='' 发生SQL注入,攻击者无需密码即可登录。 尽量不要使用拼接的SQL语句。若不得不使用,尽量不要用户可控SQL语句的参数。 若必须用户可控,请对用户输入的参数进行严格的限制和过滤。

7、file_get_contents漏洞

http://www.nowamagic.net/librarys/veda/detail/2071

8、远程代码执行

https://baike.baidu.com/item/远程代码执行漏洞

> /logs/".$pre."/".$pre.".".date("Y-m-d").".log");}
?>

恶意用户只需要构造xxx.php?log='id’形式的URL,即可通过浏览器在远程服务器上执行任意系统命令

9、其他错误

http://www.nowamagic.net/librarys/veda/detail/2071 延伸阅读

你可能感兴趣的:(PHP语言)