|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
毕业设计作品自己个人还是觉得比较满意的,尽管有些功能考虑的不全面,也没有很好的实现。法式 滥用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,"\r\n$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("\r"," ",$text);
$text=str_replace("\n","",$text);
$text=str_replace("&line;","│",$text); //文本数据库分隔符"&line;"交换为全角的"│"
$text=preg_replace("/\s{ 2 }/"," ",$text); //空格交换
$text=preg_replace("/\t/"," ",$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,"\r\n$text1&line;$text2&line;$text3");
fclose($fd);
经由一番交换和过滤后,你就能够平安地把数据写入文本或数据库了。
[1] [2] 下一页
让好朋友来看看,嘿,看咱写的多棒,然后再在网上宣传一下。 |
|