快捷搜索:  as  test  1111  test aNd 8=8  test++aNd+8=8  as++aNd+8=8  as aNd 8=8

和记娱最好h88285愽娱:PHP程序漏洞产生的原因和防范方法



滥用include

1.破绽缘故原由:

Include是编写PHP网站中最常用的函数,并且支持相对路径。有很多PHP脚本直接把某输入变量作为Include的参数,造成随意率性引用脚本、绝对路径泄露等破绽。看以下代码:

...

$includepage=$_GET["includepage"];

include($includepage);

...

很显着,我们只必要提交不合的Includepage变量就可以得到想要的页面。假如提交一个不存在的页面,就可以使PHP脚本发生差错而泄露实际绝对路径(这个问题的办理法子鄙人面的文章有阐明)。

2.破绽办理:

这个破绽的办理很简单,便是先判断页面是否存在再进行Include。或者更和记娱最好h88285愽娱严格地,应用数组对可Include的文件作出规定。看以下代码:

$pagelist=array("test1.php","test2.php","test3.php"); //这里规定可进行include的文件

if(isset($_GET["includepage"])) //判断是否有$includepage

{

$includepage=$_GET["includepage"];

foreach($pagelist as $prepage)

{

if($includepage==$prepage) //反省文件是否在容许列表中

{

include($prepage);

$checkfind=true;

break;

}

}

if($checkfind==true){ unset($checkfind); }

else{ die("无效引用页!"); }

}

这样就可以很好地办理问题了。

小提示:有此问题的函数还有:require(),require_once(),include_once(),readfile()等,在编写的时刻也要留意。

未对输入变量进行过滤

1.破绽缘故原由:

这个破绽早在ASP中呈现过,当时造成的注入破绽弗成胜数。但因为PHP在当时的影响力较小,以是没有太多的人能够留意这点。对付PHP来说,这个破绽的影响性比ASP更大年夜,由于有对照多的PHP脚本应用到文本型数据库。当然也存在SQL语句的注入问题。举个对照经典的例子,首先是数据库的:

$id=$_GET["id"];

$query="SELECT * FROM my_table where id='".$id."'"; //很经典的SQL注入破绽

$result=mysql_query($query);

这里很显着我们可以用注入来得到数据库的其它内容了。这里就不再具体论述,和ASP注入一样的,大年夜家可以看看曩昔的黑防。然后我们看文本数据库的问题:

$text1=$_POST["text1"];

$text2=$_POST["text2"];

$text3=$_POST["text3"];

$fd=fopen("test.php","a");

fwrite和记娱最好h88285愽娱($fd,"

$text1&line;$text2&line;$text3");

fclose($fd);

文本的破绽可以说是加倍严重。假使我们的提交的变量中插入一段很小的PHP代码,就可以另这个文本数据库test.php变成PHP后门。以致插入上传代码,让我们可以上传一个完善的PHP后门。接着提升权限,办事器便是你的了。

2.破绽办理:

这个破绽的办理措施着实很简单,便是严格对整个提交的变量进行过滤。对一些敏感的字符进行调换。我们可以借助PHP供给的htmlspecialchars()函数来调换HTML的内容。这里给出一段例子:

//构造过滤函数

function flt_tags($text)

{

$badwords=array("操你妈","fuck"); //词汇过滤列表

$text=rtrim($text);

foreach($badwords as $badword) //这里进行词汇的过滤

{

if(stristr($text,$badword)==true){ die("差错:你提交的内容含有敏感字眼,请不要提交敏感内容。"); }

}

$text=htmlspecialchars($text); //HTML调换

//这两行把回车调换为

$text=str_replace("

"," ",$text);

$text=str_replace("

","",$text);

$text=str_replace("&line;","│",$text); //文本数据库分隔符"&line;"调换为全角的"│"

$text=preg_replace("/s{ 2 }/"," ",$text); //空格调换

$text=preg_replace("/  /"," ",$text); //照样空格调换

if(get_magic_quotes_gpc()){ $text=stripslashes($text); } //假如magic_quotes开启,则进行'的调换

return $text;

}

$text1=$_POST["text1"];

$text2=$_POST["text2"];

$text3=$_POST["text3"];

//过滤整个输入

$text1=flt_tags($text1);

$text2=flt_tags($text2);

$text3=flt_tags($text3);

$fd=fopen("test.php","a");

fwrite($fd,"

$text1&line;$text2&line;$text3");

fclose($fd);

这样,就算进击者在没有精确Cookie的环境下提交了admin=true的变量,脚本在今后的判断中也会把$admin设置为False。这样就办理了部分的问题。但因为$admin是变量,假使在今后的其他脚本引用中呈现了破绽使得$admin被从新赋值就会激发新的危急。是以,我们应该应用常量来寄放治理员权限的鉴定。应用Define()语句定义一个admin常量来记录治理员权限,在此今后若配从新赋值就会掉足,达到保护的目的。看以下代码:

$cookiesign="admincookiesign"; //判断是否Admin的cookie变量

$adminsign=$_COOKIE["sign"];和记娱最好h88285愽娱 //获取用户的cookie变量

if($adminsign==$cookiesign)

{

define(admin,true);

}

else

{

define(admin,false);

}

if(admin){ echo "现在是治理员状态。"; }

值得留意的是,我们应用了Define语句,以是在调用Admin常量时前面不要习气性的加变量符号$,而应该应用Admin和!admin。

文本数据库裸露

1.破绽缘故原由:

前面已经说过,因为文本数据库具有很大年夜的机动性,不必要任何外部支持。加上PHP对文件的处置惩罚能力十分强,是以文本数据库在PHP脚本中的利用甚广。以致有几个很好的论坛法度榜样便是应用文本数据库的。但有得必有掉,文本数据库的安然性也是比其他数据库要低的。

2.破绽办理:

文本数据库作为一个通俗的文件,它可以被下载,就像MDB一样。以是我们要用保护MDB的法子来保护文本数据库。把文本数据库的后缀名改为.PHP。并在数据库的第一行加入。这样文本数据库就会作为一个PHP文件,并且在第一行退出履行。也便是返回一个空页面,从而达到保护文本数据库的目的。

这样,就可以很好地办理安然和调试方便的抵触了。而且你还可以花点心思,使差错提示加倍美不雅以共同网站的风格。不过留意两点是:

(1)E_ERROR、E_PARSE、E_CORE_ERROR、E_CORE_WARNING、E_COMPILE_ERROR、E_COMPILE_WARNING是不会被这个句柄处置惩罚的,也便是会用最原始的要领显示出来。不过呈现这些差错都是编译或PHP内核掉足,在平日环境下不会发生。

(2)应用set_error_handler()后,error_reporting ()将会掉效。也便是所有的差错(除上述的差错)都邑交给自定义的函数处置惩罚。

其它有关于set_error_handler()的信息,大年夜家可以参考PHP的官方手册。

POST破绽

1.破绽缘故原由:和记娱最好h88285愽娱

前面已经说过,寄托register_globals来注册变量是个不好的习气。在一些留言本和论坛法度榜样中,更要严格反省得到页面的要领和提交的光阴距离。以防止注水式发帖和外部提交。我们看一下以下某留言本法度榜样的代码:

..和记娱最好h88285愽娱.

$text1=flt_tags($text1);

$text2=flt_tags($text2);

$text3=flt_tags($text3);

$fd=fopen("data.php","a");

fwrite($fd,"

$text1&line;$text2&line;$text3");

fclose($fd);

...

很显着的,假如我们提交网址”post.php?text1=testhaha&text2=testhaha&text3=testhaha”。数据就会被正常写入文件中。此法度榜样并没有检测变量的滥觞和浏览器得到页面的要领。假如我们向这个页面重复多次提交,就会起到洪流的感化。现在也有一些软件使用这个破绽来在论坛或留言本上发广告,这是可耻的行径(我同伙的留言本就在1礼拜内被灌了10多页,无奈)。

2.破绽办理:

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

您可能还会对下面的文章感兴趣: