电脑安全

您当前的位置:主页 > 电脑安全 >

PHP漏洞中的战争-网络编程

来源:[db:来源]标题:   漏洞    编辑:电脑技术全能网 时间:2019-09-22 18:27

原标题:PHP漏洞中的战争-网络编程
   滥用include 1.破绽起因: Include是编写PHP网站中最罕用的函数,而且支撑绝对门路。有许多PHP剧本间接把某输出变量作为Include的参数,形成恣意援用剧本、相对门路泄漏等破绽。看以下代码: ... $includepage=$_GET["includepage"]; include($includepage); ... 很显明,咱们只要要提交差别的Includepage变量便可以取得想要的页面。假如提交一个不存在的页面,便可以使PHP剧本产生过错而泄漏现实相对门路(这个成绩的处理方法鄙人面的文章有阐明)。 2.破绽处理: 这个破绽的处理很简略,就是先推断页面能否存在再停止Include。或许更严厉地,应用数组对可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($fd,"rn$text1&line;$text2&line;$text3"); fclose($fd); 文本的破绽能够说是愈加严峻。假使咱们的提交的变量中拔出一段很小的PHP代码,便可以另这个文本数据库test.php酿成PHP后门。乃至拔出上传代码,让咱们能够上传一个完美的PHP后门。接着晋升权限,效劳器就是你的了。 2.破绽处理: 这个破绽的处理方式实在很简略,就是严厉对全体提交的变量停止过滤。对一些敏感的字符停止调换。咱们能够借助PHP供给的htmlspecialchars()函数来调换HTML的内容。这里给出一段例子: //结构过滤函数 www.dnjishu.com function flt_tags($text) { $badwords=array("操你妈","fuck"); //辞汇过滤列表 $text=rtrim($text); foreach($badwords as $badword) //这里停止辞汇的过滤 { if(stristr($text,$badword)==true){ die("过错:你提交的内容含有敏感字眼,请不要提交敏感内容