php 对特殊字符转义_php中对特殊字符进行转义的选项 与phpweb的上传漏洞

今天在大疯子的博客看到说phpweb的上传漏洞还需要gpc=off才行,不由纳闷了,无论是iis6/iis7/apache/nginx哪一个的解析漏洞,文件名再畸形好像都不会涉及到gpc的吧?

2251191wzy0mxcemywnz4j.png

来简单科普下php中具备对特殊字符进行转义功能的选项。

在php的配置文件中,有个布尔值的设置,就是magic_quotes_gpc。当它的值为on时,php的大部分函数自动的给所有GPC(GET/POST/COOKIE)提交的数据中的特殊字符加上反斜线。

224710bo7ulmxxjnj431nx.png

受影响的字符有:

单引号(\’)、双引号(\”)、反斜线(\\)与 NUL(NULL 字符)。

magic_quotes_gpc和magic_quotes_runtime的区别

除了magic_quotes_gpc之外,php中还有一个magic_quotes_runtime,当它的值为on时,大多数返回任何形式外部数据的函数,包括数据库和文本段将会用反斜线转义引号。

magic_quotes_gpc和magic_quotes_runtime最大的区别在于作用范围不同,magic_quotes_gpc的值只影响程序通过Get/Post/Cookies获得的数据,magic_quotes_runtime的值只会影响程序从文件中读取的数据或从数据库查询得到的数据。

与magic_quotes_gpc和magic_quotes_runtime相关的magic_quotes_sybase

与magic_quotes_gpc和magic_quotes_runtime相关的还有一个magic_quotes_sybase,如果启用了 magic_quotes_sybase,单引号会被单引号转义而不是反斜线。

受 magic_quotes_runtime 影响的函数(不包括 PECL 里的函数):

上边说了,magic_quotes_runtime的值只会影响程序从文件中读取的数据或从数据库查询得到的数据,那么程序无论是从文件中读取数据还是从数据库中查询得到数据,都需要通过函数来完成这些操作,所以在php官方网站上可以明确的看到受到magic_quotes_runtime影响的函数列表。而对于magic_quotes_gpc来说,无论程序通过什么函数获得数据,只要数据是以GPC(GET/POST/COOKIE)方式提交的,都会受到影响,所以不存在明确的受到影响的函数列表。

下面是受magic_quotes_runtime影响的函数列表:

get_meta_tags()

file_get_contents()

file()

fgets()

fwrite()

fread()

fputcsv()

stream_socket_recvfrom()

exec()

system()

passthru()

stream_get_contents()

bzread()

gzfile()

gzgets()

gzwrite()

gzread()

exif_read_data()

dba_insert()

dba_replace()

dba_fetch()

ibase_fetch_row()

ibase_fetch_assoc()

ibase_fetch_object()

mssql_fetch_row()

mssql_fetch_object()

mssql_fetch_array()

mssql_fetch_assoc()

mysqli_fetch_row()

mysqli_fetch_array()

mysqli_fetch_assoc()

mysqli_fetch_object()

pg_fetch_row()

pg_fetch_assoc()

pg_fetch_array()

pg_fetch_object()

pg_fetch_all()

pg_select()

sybase_fetch_object()

sybase_fetch_array()

sybase_fetch_assoc()

SplFileObject::fgets()

SplFileObject::fgetcsv()

SplFileObject::fwrite()

受影响的PHP版本

无论是magic_quotes_gpc、magic_quotes_runtime,还是magic_quotes_sybase,都是PHP  5.3.0之前为了保证程序的安全性设定的,但是随着PHP版本的升高,这些当初的设定已经不能适应当前的开发环境,所以这3个选项都在PHP 5.3.0中被废弃,在5.4.0中被移除。

最后提一句,phpweb的上传漏洞其实是不需要登录后台的,直接写好脚本上传就行了,所以大疯子博客里说需要登录后台也是错误的说法。当然,除了不登录后台直接用脚本上传之外,进入后台之后直接在编辑器处上传图片并拦截修改数据包中的fileName也是可以的。

由此可见,网络上传的东西是亦真亦假,想要分辨还得靠自己的火眼真睛,只是人云亦云是肯定不行的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值