php 安全模式的不足
PHP的safe_mode选项的目的是为了解决本章所述的某些问题。
但是,在PHP层面上去解决这类问题从架构上来看是不正确的,正如PHP手册所述(http://php.net/features.safe-mode)。
当安全模式生效时,PHP会对正在执行的脚本所读取(或所操作)文件的属主进行检查,以保证与该脚本的属主是相同的。
虽然这样确实可以防范本章中的很多例子,但它不会影响其它语言编写的程序。
例如,使用Bash写的CGI脚本:
#!/bin/bash
echo "Content-Type:text/plain"
echo ""
cat /home/victim/inc/db.inc
Bash解析器会去关心甚至检查PHP配置文件中的打开安全模式的配置字符串吗?
当然不会。同样的,该服务器支持的其它语言,如Perl,Python等都不会去关心这个。
本章中的所有例子可以很简单地被改编成其它编程语言。
另一个典型的问题是安全模式不会拒绝属于WEB服务器文件的访问。
这是由于一段脚本可以用于建立另一段脚本,而新脚本是属于WEB服务器的,因此它可以访问所有属于WEB服务器的文件:
<?php
$filename='file.php';
$script='<?php
header(\'Content-Type:text/plain\');
readfile($_GET[\'file\']);
?>';
file_put_contents($filename,$script);
?>
上面的脚本建立了下面的文件:
<?php
header('Content-Type:text/plain');
readfile($_GET['file']);
?>
由于该文件是由Web服务器所建立的,因此它的属主是Web服务器(Apache一般以nobody用户运行):
$ls file.php
-rw-r--r-- 1 nobody nobody 72 May 21 12:34 file.php
因此,这个脚本可以绕过很多安全模式所提供的安全措施。
即使打开了安全模式,攻击者也能显示一些信息如保存在/tmp目录内的会话信息,
这是由于这些文件是属于Web服务器的(nobody)。
PHP的安全模式确实起到了一些作用,可以认为它是一种深度防范机制。
可是,它只提供了可怜的保护,同时在本章中也没有其它安全措施来替代它。
相关文档:
年前帮sw666迁移网站到我们服务器,结果,批发中心两张图片不显示,商品添加的缩略图不显示,由于第一次搭PHP环境,所以照着网上的教程一步步搞,搭好后能访问,但就是图片有问题。怎么弄都搞不定
前几天周尚辉大哥说是gd库的问题,我就配置了下php.ini文件,改成支持了gd库,后面要查看是否有gd库,编写php.php文件
< ......
向mysql写入数据时,如:mysql_query("update tableName set `title`='goaler's blog'");
这个时候,PHP将会报错,ASP中处理时也一样。
因为数据库对单引号过敏。
ASP中需要进行replace("'","''",str);
而PHP中则可以直接使用addslashes。
ASP问题这里暂不考虑,本文要说的是PHP相关的strip ......
最近去面试PHP程序员 出了一道这样的题 “php遍历整个目录的文件以及文件夹 封装成函数”顺便也就贴了上来。需要的朋友可以拿去用用,仅供学习交流使用。如有不恰当的地方还请各位高手“嘴下留人” 啊!
<?php
$path=$_SERVER["DOCUMENT_ROOT"];
$path=str_replace("/","\\",$path);
$path="$ ......
首先Perl mkdir 的语法是:
1.mkdir('dir', 代表九位二进制数字的十进制值)
设置775,则该值为十进制的509,即二进制的111111101
此数值不能设置为111111111即十进制的511即777。
2.mkdir('dir', 0常见unix3位权限)
可以设置777。
然后在linux下时,由于umask的原因,只能设置为755。
因为创建文件时的权限是umask和 ......
配置PHP开发环境,这是老掉牙的问题了,在网络上一找一大堆。
不过看来看去,头都晕了。还是选定一个文摘好好实践下,若安装成功的话记下来以便以后重装有用处。
最终花了一个下午终于配置好了,够折磨人的说,不过学到很多了。
xp环境
mysql5.0.22
php5.3.2 win32-VC6-x86.zip
httpd2.2.15 win32.msi
phpmyadmin3.3 ......