《白帽子讲web安全》读书笔记系列12:PHP安全

1、文件包含漏洞

代码注入的典型代表,主要由4个函数完成:

include()

require()

include_once()

require_once()

当使用这4个函数包含一个新文件时,该文件将作为PHP代码执行,PHP内核并不会在意该被包含的文件是什么类型。想要利用文件包含漏洞,需要:

1)include()等函数通过动态变量的方式引入需要包含的文件;

2)用户能够控制该动态变量

 

本地文件包含 Local File Inclusion 简称LFI

open_basedir参数能限制PHP只能打开特定目录下的文件,可以很好的保护服务器;

要解决文件包含漏洞,应尽量避免包含动态的变量,尤其是用户可以控制的变量。

 

远程文件包含

allow_url_include为ON,则可以加载远程文件,Remote File Inclusion 简称RFI

 

2、变量覆盖漏洞

全局变量覆盖:变量如果未被初始化,且能被用户所控制,则很可能导致安全问题,PHP的register_globals为ON时,尤其严重。PHP4.2.0之后register_globals默认OFF

extract()变量覆盖

遍历初始化变量

import_request_variables变量覆盖

parse_str()变量覆盖

应对变量覆盖的安全建议:

1)确保register_globals=ON,若不能自定义php.ini,则应该在代码中控制;

2)熟悉可能造成变量覆盖的函数和方法,检查用户是否能控制变量的来源;

3)初始化变量

 

3、代码执行漏洞

危险函数执行代码

1)phpMyAdmin3.4.3.1远程代码执行漏洞

2)MyBB1.4远程代码执行漏洞

 

文件写入执行代码

其他执行代码方式

1)直接执行代码的函数

2)文件包含

3)本地文件写入

4)preg_replace代码执行

5)动态函数执行

6)curly syntax

7)回调函数执行代码

8)unserialize代码执行

 

4、定制安全的PHP环境

register_globals=OFF

open_basedir=/xxxx/xx/

allow_url_include、allow_url_fopen、allow_url_include=off

display_errors=off 关闭错误回显

log_errors=ON

magic_quotes_gpc=OFF

cgi.gix_pathinfo=0 若PHP以CGI方式安装,则关闭此项,避免出现文件解析问题;

session.cookie_httponly=1 避免跨站脚本攻击

session.cookie_secure=1 若全站HTTPS,则开启

safe_mode 争议较大,酌情取舍

disable_functions 可禁用危险函数,但同时给开发带来不便

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值