php程序异或运算,关于PHP异或运算不可靠性的分析

细节分析:

在正常情况下,通过PHP上传文件,需要通过is_uploaded_file函数来判断文件是否是通过HTTP POST上传的,这可以用来确保恶意的用户无法欺骗脚本去访问本不能访问的文件,例如/etc/passwd。

而最近遇到一个问题:在利用MooPHP的一个项目中,接到用户反馈说其所有客户不能上传文件,都返回失败,经过排查发现是is_uploaded_file函数在捣鬼。本来应该是C:WINDOWSTempphp99.tmp这样的tmp_name,却变成了C:WINDOWSTempphp99.tmp这种,导致is_uploaded_file函数返回错误的信息。

处理方式:

在加上如下代码后,问题解决。

$file['tmp_name'] = str_replace(’’, ‘’, $file['tmp_name']);

注意,“”实际字符串就是两个,其他两个是用来表示转义的。

深入研究:

为什么在默写特定的环境下会出现这种情况呢,我们来看如下分析:

; Magic quotes for incoming GET/POST/Cookie data.

magic_quotes_gpc = On

在PHP的默认配置中magic_quotes_gpc是On的,而打开了magic_quotes_gpc参数的PHP环境会自动对GET/POST/Cookie添加addslashes效果。注意,并不会为$_FILES添加addslashes效果。

而当magic_quotes_gpc是Off的时候,由于为$_FILES数组添加了addslashes作用,反而出现了问题。也就在magic_quotes_gpc是Off的PHP环境下都会出现此问题。

顺带说句,SVN上的MooPHP代码已经修复此问题。

is_uploaded_file函数解析:

判断文件是否是通过HTTP POST上传的

bool is_uploaded_file ( string $filename )

如果filename所给出的文件是通过HTTP POST上传的则返回TRUE。这可以用来确保恶意的用户无法欺骗脚本去访问本不能访问的文件,例如/etc/passwd。 这种检查显得格外重要,如果上传的文件有可能会造成对用户或本系统的其他用户显示其内容的话。

为了能使is_uploaded_file()函数正常工作,必段指定类似于$_FILES['userfile']['tmp_name']的变量,而在从客户端上传的文件名$_FILES['userfile']['name']不能正常运作。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值