仓酷云

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

[学习教程] PHP编程:PHP破绽中的和平

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

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

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

x
你的留言本应该加入注册以及分页功能了,而如果你更强的话,UI(用户界面)也可以加强,完成之后,感觉是不是特有成就感?不管怎么样,咱好歹是写了一个动态网站程序了,放在自己的网站上耍耍吧。   滥用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.破绽缘由:
咱们用PHP写剧本,凡是要触及办理员的权限成绩。而一些剧本仅仅对办理员权限作出"是"判别,而常常疏忽了"否"判别。在PHP设置装备摆设文件中register_globals翻开的情形下(4.2.0今后版本默许封闭,但有很多工资了便利而翻开它,这是极端风险的行动),就会呈现提交变量假充办理员的情形。咱们看一下的例子代码:
$cookiesign="admincookiesign"; //判别是不是Admin的cookie变量
$adminsign=$_COOKIE["sign"]; //获得用户的cookie变量

if($adminsign==$cookiesign)
{
$admin=true;
}

if($admin){ echo "如今是办理员形态。"; }
看上去仿佛很平安的模样,呵呵。如今咱们假定PHP设置装备摆设文件中register_globals为翻开形态。咱们提交如许一个地址“test.php?admin=true”,了局看到了吗?咱们固然没有准确的Cookie,但因为register_globals为翻开形态,使得咱们提交的admin变量主动注册为true。并且剧本短少“否”判别,就使得咱们顺遂地经由过程admin=true获得办理员的权限了。这个成绩存在于大局部网站和服装论坛傍边。
2.破绽处理:
处理这个成绩,咱们只需求在剧本中到场对办理员的“否”判别便可。咱们依然假定PHP设置装备摆设文件中register_globals为翻开形态。看一下的代码:
$cookiesign="admincookiesign"; //判别是不是Admin的cookie变量
$adminsign=$_COOKIE["sign"]; //获得用户的cookie变量

if($adminsign==$cookiesign)
{
$admin=true;
}
else
{
$admin=false;
}
if($admin){ echo "如今是办理员形态。"; }
如许,就算进击者在没有准确Cookie的情形下提交了admin=true的变量,剧本在今后的判别中也会把$admin设置为False。如许就处理了局部的成绩。但因为$admin是变量,倘使在今后的其他剧本援用中呈现了破绽使得$admin被从头赋值就会激发新的危机。因而,咱们应当利用常量来寄存办理员权限的剖断。利用Define()语句界说一个admin常量来纪录办理员权限,在此今后若配从头赋值就会失足,到达回护的目标。看以下代码:
$cookiesign="admincookiesign"; //判别是不是Admin的cookie变量
$adminsign=$_COOKIE["sign"]; //获得用户的cookie变量

if($adminsign==$cookiesign)
{
define(admin,true);
}
else
{
define(admin,false);
}
if(admin){ echo "如今是办理员形态。"; }
值得注重的是,咱们利用了Define语句,所以在挪用Admin常量时后面不要习气性的加变量符号$,而应当利用Admin和!admin。


[1] [2] 下一页  

  学会了PHP,那么学其他的语言,肯定速成,反过来也一样,如果你之前学过其他的语言,那么学PHP肯定快。
愤怒的大鸟 该用户已被删除
沙发
发表于 2015-2-4 12:36:18 | 只看该作者
我还是强烈建议自己搭建php环境。因为在搭建的过程中你会遇到一些问题,通过搜索或是看php手册解决问题后,你会更加深刻的理解它们的工作原理,了解到php配置文件中的一些选项设置。
老尸 该用户已被删除
板凳
发表于 2015-2-5 16:13:55 | 只看该作者
如果你已经到这种程度了,那么你已经可以做我的老师了。其实php也分很多的区域,
山那边是海 该用户已被删除
地板
发表于 2015-2-6 18:35:47 | 只看该作者
学习php的目的往往是为了开发动态网站,phper就业的要求也涵盖了很多。我大致总结为:精通php和mysql
金色的骷髅 该用户已被删除
5#
发表于 2015-2-7 19:55:18 | 只看该作者
这些中手常用的知识,当你把我说的这些关键字都可以熟练运用的时候,你可以选择自己
活着的死人 该用户已被删除
6#
发表于 2015-2-27 05:01:22 | 只看该作者
使用 jquery 等js框架的时候,要随时注意浏览器的更新情况,不然很容易发生框架不能使用。
7#
发表于 2015-3-4 23:14:18 | 只看该作者
实践是检验自己会不会的真理。
分手快乐 该用户已被删除
8#
发表于 2015-3-7 20:10:56 | 只看该作者
爱上php,他也会爱上你。
不帅 该用户已被删除
9#
 楼主| 发表于 2015-3-15 13:04:57 | 只看该作者
最后介绍一个代码出错,但是老找不到错误方法,就是 go to wc (囧),出去换换气没准回来就找到错误啦。
灵魂腐蚀 该用户已被删除
10#
发表于 2015-3-18 13:48:08 | 只看该作者
本文当是我的笔记啦,遇到的问题随时填充
透明 该用户已被删除
11#
发表于 2015-3-20 10:29:24 | 只看该作者
首推的搜索引擎当然是Google大神,其次我比较喜欢 百度知道。不过搜出来的结果往往都是 大家copy来copy去的,运气的的概率很大。
若相依 该用户已被删除
12#
发表于 2015-4-1 14:09:58 | 只看该作者
如果你可以写完像留言板这样的程序,那么你可以去一些别人的代码了,
蒙在股里 该用户已被删除
13#
发表于 2015-4-7 20:00:38 | 只看该作者
爱上php,他也会爱上你。
谁可相欹 该用户已被删除
14#
发表于 2015-4-8 22:30:46 | 只看该作者
我学习了一段时间后,我发现效果并不好(估计是我自身的问题)。因为一个人的精力总是有限的,同时学习这么多,会导致每个的学习时间都得不到保证。
若天明 该用户已被删除
15#
发表于 2015-4-9 11:30:00 | 只看该作者
php是动态网站开发的优秀语言,在学习的时候万万不能冒进。在系统的学习前,我认为不应该只是追求实现某种效果,因为即使你复制他人的代码调试成功,实现了你所期望的效果,你也不了解其中的原理。
冷月葬花魂 该用户已被删除
16#
发表于 2015-4-12 06:59:58 | 只看该作者
有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。
变相怪杰 该用户已被删除
17#
发表于 2015-4-16 04:10:08 | 只看该作者
我还是推荐用firefox ,配上firebug 插件调试js能省下不受时间。谷歌的浏览器最好也不少用,因为谷歌的大侠们实在是太天才啦,把一些原来的js代码加了一些特效。
精灵巫婆 该用户已被删除
18#
发表于 2015-4-24 02:16:14 | 只看该作者
环境搭建好,当你看见你的浏览器输出“it works\\\\\\\"时你一定是喜悦的。在你解决问题的时候,我强烈建议多读php手册。
飘灵儿 该用户已被删除
19#
发表于 2015-5-4 02:42:36 | 只看该作者
找到的的资料很多都是在论坛里的,需要注册,所以我一般没到一个论坛都注册一个id,所有的id都注册成一样的,这样下次再进来的时候就不用重复注册啦。当然有些论坛的某些资料是需要的付费的。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-14 13:11

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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