另类代码应用 PHP在安全方面的使用窍门

2016-01-29 13:23 6 1 收藏

另类代码应用 PHP在安全方面的使用窍门,另类代码应用 PHP在安全方面的使用窍门

【 tulaoshi.com - 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 "例子:<brhttp://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$rooturl2",$a);
  $a = preg_replace("/(src[[:space:]]*=)([^h'"].*?)/is","1$rooturl2",$a); //转换图片地址
  $a = preg_replace("/(action[[:space:]]*=['"])([^h].*?)/is","1$php_self?$rooturl2",$a);
  $a = preg_replace("/(action[[:space:]]*=)([^h'"].*?)/is","1$php_self?$rooturl2",$a); //转换POST地址
  $a = preg_replace("/(<a.+?href[[:space:]]*=['"])([^h].*?)/is","1$php_self?$rooturl2",$a);
  $a

来源:http://www.tulaoshi.com/n/20160129/1490008.html

延伸阅读
标签: 亲子游戏 元旦
提前办理护照 如果出国旅游,一定要提前办理好护照,大人的护照也要看好有效期。如果宝宝没有身份证,换领登机牌需要提供出生证明或者户口本。 预订飞机票和酒店 2岁以上的宝宝机票是成人全价票的5折,如果能买到2-3折的航线特价机票,可直接给宝宝选择成人票即可。 提前规划行程 小宝宝去度假,不要安排太多景点...
标签: PHP
  PHP包含支持Expat 解析器的可选XML扩展。PHP中的XML相关函数可以让你创建一个解析器来处理有效的XML文档。如果你所使用的Apache版本为1.3.7后的版本,则不用添加任何函数库。所需要做的只是使用--with-xml配置PHP。 在PHP手册中有好几个创建基于PHP的XML解析器很好的例子。此外,New Riders的Web Application Development with PHP 4....
标签: flash教程
AS在计算方面会有小小的偏差,而这份偏差可能会导致很多问题。那么通常出现的问题有哪几种呢?这里我把本身遇到和其他以前看过的凑起来 第一种 var a=(1/3); trace(a); // 输出 0.333333333333333 trace(a*3); // 输出 1 到这里为止的计算没有问题,那么接下来看看所出现的问题 var b=a.toString(); //把a转换为文字 var c=Number(b); ...
标签: Web开发
ajax.html 程序代码 代码如下: !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" html xmlns="http://www.w3.org/1999/xhtml" head meta http-equiv="Content-Type" content="text/html; charset=gb2312" / title兼容多浏览器的AJAX入门实例(超详细注释)/t...
标签: PHP
    vim是一款跨平台编辑器,可以在 linux 下使用,也可以在windows下使用,其官方网站为 www.vim.org。要使其高亮显示 php 代码可以进入vim后,在普通模式下输入如下命令,开启php代码高亮显示 :syntax enable :source $VIMRUNTIME/syntax/php.vim

经验教程

87

收藏

75
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部