仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 4286|回复: 18
打印 上一主题 下一主题

[学习教程] PHP教程之PHP法式破绽发生的缘由和提防办法

[复制链接]
飘飘悠悠 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-16 00:29:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

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] 下一页  

  让好朋友来看看,嘿,看咱写的多棒,然后再在网上宣传一下。
简单生活 该用户已被删除
沙发
发表于 2015-2-16 05:04:13 | 只看该作者
Apache不是非得用80或者8080端口的,我刚开始安得时候就是80端口老占用,就用了个 81端口,结果照常,就是输localhost的时候,应该输入为 localhost:81
小魔女 该用户已被删除
板凳
发表于 2015-3-5 00:01:23 | 只看该作者
为了以后维护的方便最好是代码上都加上注释,“予人方便,自己方便”。此外开发文档什么的最好都弄齐全。我觉得这是程序员必备的素质。虽然会消耗点很多的时间。但是确实是非常有必要的。
再见西城 该用户已被删除
地板
发表于 2015-3-11 00:28:09 | 只看该作者
有时候汉字的空格也能导致页面出错,所以在写代码的时候,要输入空格最好用引文模式。
飘灵儿 该用户已被删除
5#
发表于 2015-3-17 17:07:28 | 只看该作者
实践是检验自己会不会的真理。
冷月葬花魂 该用户已被删除
6#
发表于 2015-3-18 18:57:17 | 只看该作者
个人呢觉得,配wamp 最容易漏的一步就是忘了把$PHP$目录下的libmysql.dll拷贝到windows系统目录的system32目录下,还有重启apache。
小女巫 该用户已被删除
7#
发表于 2015-3-26 19:16:51 | 只看该作者
如果你可以写完像留言板这样的程序,那么你可以去一些别人的代码了,
莫相离 该用户已被删除
8#
发表于 2015-4-4 21:35:55 | 只看该作者
个人呢觉得,配wamp 最容易漏的一步就是忘了把$PHP$目录下的libmysql.dll拷贝到windows系统目录的system32目录下,还有重启apache。
第二个灵魂 该用户已被删除
9#
发表于 2015-4-18 22:07:19 | 只看该作者
为了以后维护的方便最好是代码上都加上注释,“予人方便,自己方便”。此外开发文档什么的最好都弄齐全。我觉得这是程序员必备的素质。虽然会消耗点很多的时间。但是确实是非常有必要的。
10#
发表于 2015-4-21 05:01:22 | 只看该作者
写的比较杂,因为我也是个新手,不当至于大家多多指正。
谁可相欹 该用户已被删除
11#
发表于 2015-4-26 05:11:23 | 只看该作者
当留言板完成的时候,下步可以把做1个单人的blog程序,做为目标,
金色的骷髅 该用户已被删除
12#
发表于 2015-5-6 03:10:00 | 只看该作者
在学习的过程中不能怕麻烦,不能有懒惰的思想。学习php首先应该搭建一个lamp环境或者是wamp环境。这是学习php开发的根本。虽然网络上有很多集成的环境,安装很方便,使用起来也很稳定、
灵魂腐蚀 该用户已被删除
13#
发表于 2015-5-7 11:16:02 | 只看该作者
我还是推荐用firefox ,配上firebug 插件调试js能省下不受时间。谷歌的浏览器最好也不少用,因为谷歌的大侠们实在是太天才啦,把一些原来的js代码加了一些特效。
柔情似水 该用户已被删除
14#
发表于 2015-5-8 05:13:47 | 只看该作者
找到的的资料很多都是在论坛里的,需要注册,所以我一般没到一个论坛都注册一个id,所有的id都注册成一样的,这样下次再进来的时候就不用重复注册啦。当然有些论坛的某些资料是需要的付费的。
飘飘悠悠 该用户已被删除
15#
 楼主| 发表于 2015-6-12 05:45:54 | 只看该作者
学习php的目的往往是为了开发动态网站,phper就业的要求也涵盖了很多。我大致总结为:精通php和mysql
若天明 该用户已被删除
16#
发表于 2015-6-17 20:40:02 | 只看该作者
个人呢觉得,配wamp 最容易漏的一步就是忘了把$PHP$目录下的libmysql.dll拷贝到windows系统目录的system32目录下,还有重启apache。
只想知道 该用户已被删除
17#
发表于 2015-6-28 21:47:18 | 只看该作者
最后介绍一个代码出错,但是老找不到错误方法,就是 go to wc (囧),出去换换气没准回来就找到错误啦。
乐观 该用户已被删除
18#
发表于 2015-7-9 21:25:11 | 只看该作者
做为1门年轻的语言,php一直很努力。
变相怪杰 该用户已被删除
19#
发表于 2015-7-21 12:30:56 | 只看该作者
对于懒惰的朋友,我推荐php的集成环境xampp或者是wamp。这两个软件安装方便,使用简单。但是我还是强烈建议自己动手搭建开发环境。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 13:16

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表