处理办法一:
假如体系中只是跟数据库停止交互,那末完整可以屏障失落这些文件存取函数,象fopen、file、file_get_contents、readfile、opendir等函数,办法就是在php的设置装备摆设文件php.ini中停止制止,php.ini中有一个选项叫做disable_functions,咱们可以把需求屏障的函数放到外面:
disable_functions = highlight_file,fopen,file,file_get_contents,readfile,opendir
那末下面那些函数就没法利用了,好比你挪用了highlight_file函数,那末php引擎会提醒你:
Warning: highlight_file() has been disabled for security reasons in /home/heiyeluren/public_html/test.php on line 5
固然,咱们不克不及一概而杀,只是说你可以制止失落那些根基不怎样利用的函数,好比highlight_file我感觉就利用的对照少。
处理办法二:
第一种办法太强迫性了,函数制止后将没法会见该函数,老是不是那末的合适,关于一些空间供应商来说,是不公道的,那末还有一个处理办法,仍是设置装备摆设咱们的php.ini,翻开php的平安形式:
safe_mode = On
固然,假如你需求,最好再设置装备摆设一下open_basedir之类的选项来更好的掌握,详细可参考php手册。
当咱们翻开了php的平安形式后,咱们再来会见一下/etc/passwd,提交URL:
http://192.168.0.1/~heiyeluren/test.php?f=/etc/passwd
那末阅读器中即刻就显示:
Warning: highlight_file() [function.highlight-file]: SAFE MODE Restriction in effect. The script whose uid is 500 is not allowed to access /etc/passwd owned by uid 0 in /home/heiyeluren/public_html/test.php on line 5
咱们设置设置一下不是随意可以读的:
[~]# chmod 640 /usr/local/php/lib/php.ini
[~]# ls -al /usr/local/php/lib/php.ini
-rw-r----- 1 root root 1865 Nov 27 01:16 /usr/local/php/lib/php.ini
如今,咱们在会见http://192.168.0.1/~heiyeluren/test.php?f=/usr/local/php/lib/php.ini 看看:
Warning: highlight_file(/usr/local/php/lib/php.ini) [function.highlight-file]: failed to open stream: Permission denied in /home/heiyeluren/public_html/test.php on line 5
Warning: highlight_file() [function.highlight-file]: Failed opening '/usr/local/php/lib/php.ini' for highlighting in /home/heiyeluren/public_html/test.php on line 5
正告说没有权限读取/usr/local/php/lib/php.ini这个文件,顺遂到达咱们的目标。