PHP网页编程之浅析PHP法式中的目次遍历破绽
HTML中的任何元素都要亲自实践,只有明白了什么元素会起到什么效果之后,你才会记忆深刻,而一味的啃书,绝对是不行的,我想大部分新手之所以觉得概念难学,大部分是一个字“懒”,懒是阻止进步的最大敌人,所以克服掉懒的习惯,才能更快的学好一样东西。 目次遍历破绽在国际外有很多分歧的叫法,好比也能够叫做信息泄漏破绽,非受权文件包括破绽.称号固然多,可他们却有一个配合的成因,就是在法式中没有过滤用户输出的../和./之类的目次跳转符,招致歹意用户可以经由过程提交目次跳转来遍历办事器上的恣意文件,其伤害可想而知.这类破绽人人对照熟习的能够就是在一些邮件列表法式和收集硬盘法式中,其实这类破绽还普遍存在与一些国外的BLOG法式中,这类破绽也许分两种上面就来经由过程实例来讲明这类破绽是若何发生和该若何提防.起首,咱们来看一个国外的BLOG,头几天从网高低了一个名为LoudBlog的BLOG法式,
在它的index.php页面中看到以下代码:
//build an include-path from the url-request
else {
$loadme = "inc/backend_" . $_GET['page'] . ".php";
}
//yee-hah! finally we do show real content on our page!
include ($loadme);
?>
这段法式很复杂却包括了一个恐怖的破绽,变量$page是咱们GET上去的,假如没有设置page参数,法式就主动包括inc/backend_postings.php这个文件,假如有page参数就把$page的值放到inc目次下以backend_前缀开首的文件构成一个新的文件.这里并没有对$page的值做任何的过滤,招致咱们可以遍历一切文件了.
这里要注重的是,咱们提交的$page的值会主动的加上php后缀,所以咱们浏览php文件是不会无效果的.固然咱们可以读一些设置装备摆设文件也是很有效的.上面就来测试一下,咱们在inc目次外创立一个 TXT文件,内容为Wh0 !s H4K_BaN?咱们提交以下URL看看了局:
http://localhost/loudblog/loudblog/loudblog/index.php?page=/../../hello.txt%00这里要说的是因为变量会加上php后缀,所以咱们要用%00来截断后缀如许才干正常显示文件内容,了局如图1
测试胜利申明破绽存在了,那咱们接着读一些敏感文件吧,提交以下URL:
http://localhost/loudblog/loudblog/loudblog/index.php?page=/../../../../../../conf/httpd.conf%00了局如图2
APACHE的设置装备摆设文件也顺遂读出来了,接上去就来看别的一种情形.
这类破绽次要是存在与基于PHP+TXT布局的法式中,破绽代码也是来自于一个国外的BLOG,代码以下:
$act = $_GET['act'];
if ($act == '')
{
include("blog.txt");
}
else
{
include("act/$act.txt");
}
?>
$blog_id = $_GET['blogid'];
if ($blog_id == '')
{
include("blog.txt");
}
else
{
include("./blog_entries/$blog_id.txt");
}
?>
从下面的代码可以明晰的看出成绩地点,第一段法式取得$_GET[]提交的数据并赋值给$act,这里没有对act做任何的过滤,而在前面判别假如变量为空就把blog.txt包括出去,假如不为空就包括act目次下的$act.txt文件,不外只能读以.txt开头的文件,读其余文件加上 txt后缀后会提醒找不到文件,可以共同某些上传破绽把文件包括出来,好比提交以下URL:
index.php?act=blog&blogid=../../filename如许带到法式里就成了include("./filename.txt");包括最近的文件只需外面含有PHP代码就算后缀是TXT文件也会被履行,道理给下面的一样,我就不截图了.
下面分离引见了如今最次要的两种目次遍历破绽,从外表上看基于TXT的PHP法式假如有这类破绽仿佛使用更便利一些,其实二者的伤害性都是等价的.其实防止这类破绽也是很复杂的工作,象$blog-id这类数字形的参数只需用intval()函数强迫整形化就能够了,关于字符形的参数咱们可以本人写一个过滤函数把风险字符过滤失落,相似代码以下:
function fuckchar($var){
$var = str_replace("..","",$var);
$var = str_replace(".","",$var);
$var = str_replace("/","",$var);
$var = str_replace("\","",$var);
$var = str_replace(" ","",$var);
}
人人可以本人测试一下这类破绽,不论甚么言语过滤的思绪都是一样的,用GOOGLE搜刮: powered by Loudblog可以找到一些这类法式,不外官方如今已推出新版本了,更多的破绽守候人人本人去开掘吧.
当PHP设置装备摆设文件中的allow_url_open翻开的话,咱们可以在本人的WEB办事器上创立一个同名文件外面包括shell号令,然后提交咱们本人创立的shell文件让被进击的办事器近程包括,可以以WEB权限履行号令,如许就是所谓的近程履行号令破绽了。
<P style="TEXT-INDENT: 2em">
PHP原始为Personal Home Page的缩写,已经正式更名为 "PHP: Hypertext Preprocessor"。注意不是“Hypertext Preprocessor”的缩写,这种将名称放到定义中的写法被称作递归缩写。 最后祝愿,php会给你带来快乐的同时 你也会给他带来快乐。 不禁又想起那些说php是草根语言的人,为什么认得差距这么大呢。 遇到出错的时候,我经常把错误信息直接复制到 google的搜索栏,一般情况都是能搜到结果的,不过有时候会搜出来一大片英文的出来,这时候就得过滤一下,吧中文的弄出来,挨着式方法。 个人呢觉得,配wamp 最容易漏的一步就是忘了把$PHP$目录下的libmysql.dll拷贝到windows系统目录的system32目录下,还有重启apache。 Apache不是非得用80或者8080端口的,我刚开始安得时候就是80端口老占用,就用了个 81端口,结果照常,就是输localhost的时候,应该输入为 localhost:81 找到的的资料很多都是在论坛里的,需要注册,所以我一般没到一个论坛都注册一个id,所有的id都注册成一样的,这样下次再进来的时候就不用重复注册啦。当然有些论坛的某些资料是需要的付费的。 多看优秀程序员编写的代码,仔细理解他们解决问题的方法,对自身有很大的帮助。 本人接触php时间不长,算是phper中的小菜鸟一只吧。由于刚开始学的时候没有名师指,碰过不少疙瘩,呗很多小问题卡过很久,白白浪费不少宝贵的时间,在次分享一些子的学习的心得。 多看优秀程序员编写的代码,仔细理解他们解决问题的方法,对自身有很大的帮助。 说点我烦的低级错误吧,曾经有次插入mysql的时间 弄了300年结果老报错,其实mysql的时间是有限制的,大概是到203X年具体的记不清啦,囧。 本人接触php时间不长,算是phper中的小菜鸟一只吧。由于刚开始学的时候没有名师指,碰过不少疙瘩,呗很多小问题卡过很久,白白浪费不少宝贵的时间,在次分享一些子的学习的心得。 有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。 写js我最烦的就是 ie 和 firefox下同样的代码 结果显示的结果千差万别,还是就是最好不要用遨游去调试,因为有时候遨游是禁用js的,有可能代码是争取结果被遨游折腾的认为是代码写错。 本人接触php时间不长,算是phper中的小菜鸟一只吧。由于刚开始学的时候没有名师指,碰过不少疙瘩,呗很多小问题卡过很久,白白浪费不少宝贵的时间,在次分享一些子的学习的心得。 微软最近出的新字体“微软雅黑”,虽然是挺漂亮的,不过firefox支持的不是很好,所以能少用还是少用的好。 为了以后维护的方便最好是代码上都加上注释,“予人方便,自己方便”。此外开发文档什么的最好都弄齐全。我觉得这是程序员必备的素质。虽然会消耗点很多的时间。但是确实是非常有必要的。 曾经犯过一个很低级的错误,我在文件命名的时候用了一个横线\\\\\\\'-\\\\\\\' 号,结果找了好几个小时的错误,事实是命名的时候 是不能用横线 \\\\\\\'-\\\\\\\' 的,应该用的是下划线\\\\\\\'_\\\\\\\' ; Ps:以上纯属原创,如有雷同,纯属巧合 这些中手常用的知识,当你把我说的这些关键字都可以熟练运用的时候,你可以选择自己
页:
[1]