PHP教程之经由过程对php一些办事器端特征的设置装备摆设增强p...
不懂的问题有很多高手帮你解决。但不要认为你是新手,就不能帮助别人,比如今天你学会了怎样安装PHP,明天还可能有朋友会问这个问题,你就可以给他解答,不要认为这是浪费时间,忙别人其实就是帮助自己。平安|办事器 后面象Shaun Clowes和rfp等都对照具体的引见了php、cgi法式在编程过程当中碰到的成绩,和若何经由过程使用法式破绽冲破体系,这篇文章咱们来经由过程对php的一些办事器端特征来停止设置装备摆设增强php的平安。写cgi剧本的时分咱们切实其实必定注重各类平安成绩,对用户输出停止严厉的过滤,然而常在岸边走哪有不湿鞋,吃烧饼哪有不失落芝麻,人有掉蹄马有掉手,连有名的phpnuke、phpMyAdmin等法式都呈现过很严重的成绩,更况且象我等小混混写的剧本。所以如今咱们假定php剧本已呈现严重成绩,好比象前一阵子 phpnuke的可以上传php剧本的大成绩了,咱们若何经由过程对办事器的设置装备摆设使剧本呈现如斯成绩也不克不及冲破体系。1、编译的时分注重补上已知的破绽
从4.0.5入手下手,php的mail函数到场了第五个参数,但它没有好好过滤,使得php使用法式能冲破safe_mode的限制而去履行号令。所以利用4.0.5和4.0.6的时分在编译前咱们需求修正php源码包里ext/standard/mail.c文件,制止mail函数的第五参数或过滤shell字符。在mail.c文件的第152行,也就是上面这行:
if (extra_cmd != NULL) {
前面加上extra_cmd=NULL;或extra_cmd = php_escape_shell_cmd(extra_cmd);然后编译php那末咱们就修补了这个破绽。
2、修正php.ini设置装备摆设文件
以php刊行版的php.ini-dist为底本停止修正。
1)Error handling and logging
在Error handling and logging局部可以做一些设定。先找到:
display_errors = On
php缺省是翻开毛病信息显示的,咱们把它改成:
display_errors = Off
封闭毛病显示后,php函数履行毛病的信息将不会再显示给用户,如许能在必定水平上避免进击者从毛病信息得知剧本的物理地位,和一些其它有效的信息,最少给进击者的黑箱检测形成必定的妨碍。这些毛病信息能够对咱们本人有效,可让它写到指定文件中去,那末修正以下:
log_errors = Off
改成:
log_errors = On
和指定文件,找到上面这行:
;error_log = filename
去失落后面的;正文,把filename改成指定文件,如/usr/local/apache/logs/php_error.log
error_log = /usr/local/apache/logs/php_error.log
如许一切的毛病城市写到php_error.log文件里。
2)Safe Mode
php的safe_mode功效对良多函数停止了限制或禁用了,能在很大水平处理php的平安成绩。在Safe Mode局部找到:
safe_mode = Off
改成:
safe_mode = On
如许就翻开了safe_mode功效。象一些能履行体系号令的函数shell_exec()和``被制止,其它的一些履行函数如:exec(), system(), passthru(), popen()将被限制只能履行safe_mode_exec_dir指定目次下的法式。假如你其实是要履行一些号令或法式,找到以下:
safe_mode_exec_dir =
指定要履行的法式的途径,如:
safe_mode_exec_dir = /usr/local/php/exec
然后把要用的法式拷到/usr/local/php/exec目次下,如许,象下面的被限制的函数还能履行该目次里的法式。
关于平安形式下受限函数的具体信息请检查php主站的申明:
http://www.php.net/manual/en/features.safe-mode.php
3)disable_functions
假如你对一些函数的伤害性不太清晰,并且也没有利用,索性把这些函数制止了。找到上面这行:
disable_functions =
在”=“前面加上要制止的函数,多个函数用”,“离隔。
3、修正httpd.conf
假如你只答应你的php剧本法式在web目次里操作,还可以修正httpd.conf文件限制php的操作途径。好比你的web目次是/usr/local/apache/htdocs,那末在httpd.conf里加上这么几行:
<Directory /usr/local/apache/htdocs>
php_admin_value open_basedir /usr/local/apache/htdocs
</Directory>
如许,假如剧本要读取/usr/local/apache/htdocs之外的文件将不会被答应,假如毛病显示翻开的话会提醒如许的毛病:
Warning: open_basedir restriction in effect. File is in wrong directory in
/usr/local/apache/htdocs/open.php on line 4 等等。
4、对php代码停止编译
Zend对php的奉献很大,php4的引擎就是用Zend的,并且它还开辟了ZendOptimizer和ZendEncode等很多php的增强组件。优化器ZendOptimizer只需在http://www.zend.com注册就能够收费失掉,上面几个是用于4.0.5和4.0.6的ZendOptimizer,文件名分离关于各自的体系:
ZendOptimizer-1.1.0-PHP_4.0.5-FreeBSD4.0-i386.tar.gz
ZendOptimizer-1.1.0-PHP_4.0.5-Linux_glibc21-i386.tar.gz
ZendOptimizer-1.1.0-PHP_4.0.5-Solaris-sparc.tar.gz
ZendOptimizer-1.1.0-PHP_4.0.5-Windows-i386.zip
优化器的装置十分便利,包外面都有具体的申明。以UNIX版本的为例,看清操作体系,把包里的ZendOptimizer.so文件解压到一个目次,假定是/usr/local/lib下,在php.ini里加上两句:
zend_optimizer.optimization_level=15
zend_extension="/usr/local/lib/ZendOptimizer.so" 就能够了。用phpinfo()看到Zend图标右边有上面文字:
with Zend Optimizer v1.1.0, Copyright (c) 1998-2000, by Zend Technologies
那末,优化器已挂接胜利了。
然而编译器ZendEncode并非收费的,这里供应给人人一个http://www.PHPease.com的马勇设计的 编译器外壳,假如用于贸易目标,请与http://www.zend.com接洽获得允许协定。
php剧本编译后,剧本的履行速度增添很多,剧本文件只能看到一堆乱码,这将禁止进击者进一步剖析服
务器上的剧本法式,并且本来在php剧本里以明文存储的口令也失掉了保密,如mysql的口令。不外在办事器端改剧本就对照费事了,仍是当地改好再上传吧。
5、文件及目次的权限设置
web目次里除上传目次,其它的目次和文件的权限必定不克不及让nobody用户有写权限。不然,进击者可以修正主页文件,所以web目次的权限必定要设置好。
还有,php剧本的属主万万不克不及是root,由于safe_mode下读文件的函数被限制成被读文件的属主必需和以后履行剧本的属主是一样才干被读,不然假如毛病显示翻开的话会显示诸如以下的毛病:
Warning: SAFE MODE Restriction in effect. The script whose uid is 500 is not
allowed to access /etc/passwd owned by uid 0 in /usr/local/apache/htdocs/open.php
on line 3
如许咱们能避免很多体系文件被读,好比:/etc/passwd等。
上传目次和上传剧本的属主也要设成一样,不然会呈现毛病的,在safe_mode下这些要注重。
6、mysql的启动权限设置
mysql要注重的是不要用root来启动,最好别的建一个mysqladm用户。可以在/etc/rc.local等体系启动剧本里加上一句:
su mysqladm -c "/usr/local/mysql/share/mysql/mysql.server start"
如许体系重启后,也会主动用mysqladmin用户启动mysql历程。
7、日记文件及上传目次的审核及
检查日记和人的惰性有很大关系,要从那末大的日记文件里查找进击陈迹有些易如反掌,并且也未必有。
web上传的目次里的文件,也应当常常反省,或许法式有成绩,用户传上了一些不法的文件,好比履行剧本等。
8、操作体系本身的补钉
一样,给体系打已知破绽的补钉是体系办理员最根基的职责,这也是最初一道防地。
经由以上的设置装备摆设,固然说不上坚如盘石,然而也在相当水平上给进击者的测试形成良多费事,即便php剧本法式呈现对照严重的破绽,进击者也没法形成实践性的损坏。
假如您还有更乖僻,更反常的设置装备摆设办法,但愿能一同分享分享;)
多去关于PHP的网站,尤其有很多经典的文章,多读读这些文章显然是有好处的。 其实没啥难的,多练习,练习写程序,真正的实践比看100遍都有用。不过要熟悉引擎 我要在声明一下:我是个菜鸟!!我对php这门优秀的语言也是知之甚少。但是我要在这里说一下php在网站开发中最常用的几个功能: 建议加几个专业的phper的群,当然啦需要说话的人多,一处一点问题能有人回答你的,当然啦要让人回答你的问题,平时就得躲在里面聊天,大家混熟啦,愿意回答你问题的人自然就多啦。 做为1门年轻的语言,php一直很努力。 Apache不是非得用80或者8080端口的,我刚开始安得时候就是80端口老占用,就用了个 81端口,结果照常,就是输localhost的时候,应该输入为 localhost:81 微软最近出的新字体“微软雅黑”,虽然是挺漂亮的,不过firefox支持的不是很好,所以能少用还是少用的好。 其实没啥难的,多练习,练习写程序,真正的实践比看100遍都有用。不过要熟悉引擎 在学习的过程中不能怕麻烦,不能有懒惰的思想。学习php首先应该搭建一个lamp环境或者是wamp环境。这是学习php开发的根本。虽然网络上有很多集成的环境,安装很方便,使用起来也很稳定、 先学习php和mysql,还有css(html语言很简单)我认为现在的效果比以前的方法好。 我学习了一段时间后,我发现效果并不好(估计是我自身的问题)。因为一个人的精力总是有限的,同时学习这么多,会导致每个的学习时间都得不到保证。 做为1门年轻的语言,php一直很努力。 在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。 再就是混迹于论坛啦,咱们的phpchina的论坛就很强大,提出的问题一般都是有达人去解答的,以前的帖子也要多看看也能学到不少前辈们的经验。别的不错的论坛例如php100,javaeye也是很不错的。 php是动态网站开发的优秀语言,在学习的时候万万不能冒进。在系统的学习前,我认为不应该只是追求实现某种效果,因为即使你复制他人的代码调试成功,实现了你所期望的效果,你也不了解其中的原理。 在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。 当留言板完成的时候,下步可以把做1个单人的blog程序,做为目标, 学好程序语言,多些才是王道,写两个小时代码的作用绝对超过看一天书,这个我是深有体会(顺便还能练打字速度)。 作为一个合格的coder 编码的规范是必须,命名方面我推崇“驼峰法”,另外就是自己写的代码最好要带注释,不然时间长了,就算是自己的代码估计看起来都费事,更不用说别人拉。 当然这种网站的会员费就几十块钱。
页:
[1]