Chinaunix

标题: [缺陷代码]可导致泄露网站路径 [打印本页]

作者: scriptkidz    时间: 2006-07-03 10:39
标题: [缺陷代码]可导致泄露网站路径
在网上看到的PHPBB里的代码~
  1. if ( isset($HTTP_POST_VARS['folder']) || isset($HTTP_GET_VARS['folder']) )

  2. {

  3. $folder = ( isset($HTTP_POST_VARS['folder']) ) ? $HTTP_POST_VARS['folder'] : $HTTP_GET_VARS['folder'];

  4. $folder = htmlspecialchars($folder);

  5. if ( $folder != 'inbox' && $folder != 'outbox' && $folder != 'sentbox' && $folder != 'savebox' )

  6. {

  7. $folder = 'inbox';

  8. }

  9. }

  10. else

  11. {

  12. $folder = 'inbox';

  13. }
复制代码

提交:http://localhost/phpBB2/privmsg.php?folder[]=
回显:
Warning: htmlspecialchars() expects parameter 1 to be string, array given in /www/phpbb2/privmsg.php on line 61

挺有意思的,做下is_string判断就好了
作者: xabbca    时间: 2006-07-03 10:46
顶,,,
作者: 夜猫子    时间: 2006-07-03 10:58
正式运行的网站,最好把display_errors设置为off
作者: scriptkidz    时间: 2006-07-03 11:08
对,这样什么都解决了...呵呵,眼不见心不烦
作者: scriptkidz    时间: 2006-07-05 10:01
PHP里的变量和数组还真有意思,虽然变量可以当成一个数组操作,但某些情况下...呵呵
作者: eye_onme    时间: 2006-07-05 11:39
这个很重要 谢谢提醒
作者: ashchen    时间: 2006-07-05 12:58
你知道了路径又能把它怎么样?
作者: tonera    时间: 2006-07-05 15:23
看了好久都没看出精华所在。
作者: ultralqxq    时间: 2006-07-05 15:56
原帖由 ashchen 于 2006-7-5 12:58 发表
你知道了路径又能把它怎么样?

对呀。知道了路径又能怎么样呢????
作者: scriptkidz    时间: 2006-07-05 15:59
原帖由 ultralqxq 于 2006-7-5 15:56 发表

对呀。知道了路径又能怎么样呢????


这就需要别的漏洞了,比如有个注入点可以尝试load_file()当然需要权限,还有很多利用都是互相影响的
作者: scriptkidz    时间: 2006-07-05 16:02
原帖由 tonera 于 2006-7-5 15:23 发表
看了好久都没看出精华所在。


精华有一个明确的定义吗?
斑竹加精一定有她的道理,你有没有仔细想过这段代码所暴露出问题的原因呢?
作者: tonera    时间: 2006-07-06 18:12
原帖由 scriptkidz 于 2006-7-5 16:02 发表
精华有一个明确的定义吗?
斑竹加精一定有她的道理,你有没有仔细想过这段代码所暴露出问题的原因呢?


代码没有问题.
而是服务器配置的问题.用于生产的服务器都应该关掉display_errors .
所以说,这更应该是服务器配置的问题,而不是php代码的问题.
作者: geel    时间: 2006-07-06 18:47
变量使用前不进行初始化或者对用户输入缺少重要判断确实会留下隐患,虽然大多数情况并没有影响
作者: scriptkidz    时间: 2006-07-07 09:55
原帖由 tonera 于 2006-7-6 18:12 发表


代码没有问题.
而是服务器配置的问题.用于生产的服务器都应该关掉display_errors .
所以说,这更应该是服务器配置的问题,而不是php代码的问题.


这其实是PHP语言本身的一个小缺陷吧,对传入的字符型参数应该检查以下,特别是当变量和数组之间变换操作的时候。
当然,正式运营的时候关掉display_errors 是必须的
作者: tonera    时间: 2006-07-07 10:19
原帖由 scriptkidz 于 2006-7-7 09:55 发表
这其实是PHP语言本身的一个小缺陷吧,对传入的字符型参数应该检查以下,特别是当变量和数组之间变换操作的时候。
当然,正式运营的时候关掉display_errors 是必须的


PHP语言本身一个很大的特点就是弱数据类型,允许不同类型数据自由使用,没有严格的数据类型检验.这也是PHP语言灵活易用的一个特性.如果硬要说是PHP语言的缺陷,倒可以理解为PHP的创始人故意制造这种"缺陷".
当然了,你在使用时进行数据类型检验肯定是一种好习惯.但是在开发过程中程序员也可以根据实际情况来取舍的,对于不重要,更注重效率的业务,你加上一大堆验证代码只能证明你的程序是键壮的,但是不切实际的.这就回到了程序为何而写的问题上来了.程序为优美的代码而写还是为生产而写,见仁见智.
作者: scriptkidz    时间: 2006-07-07 11:15
原帖由 tonera 于 2006-7-7 10:19 发表


PHP语言本身一个很大的特点就是弱数据类型,允许不同类型数据自由使用,没有严格的数据类型检验.这也是PHP语言灵活易用的一个特性.如果硬要说是PHP语言的缺陷,倒可以理解为PHP的创始人故意制造这种"缺陷" ...

不错,正是因为PHP的自由才会带来一些隐患,这就看个人的编程风格了,注重效率以及代码的实用性同时必要的安全检查也是不可或缺的,PHP也提供了很多函数来转义或者过滤一些字符,这些不会过多影响到程序的效率和代码结构,能提高程序的安全性,当然,这也要看个人习惯了。
作者: anson_x    时间: 2006-07-07 11:26
不错的帖子
作者: yishon    时间: 2006-07-11 16:29
呵呵。。如果各位有谁搞过PHP injection的话。。。现在再来写代码的话,就再也不会不初始化变量,不注意过滤用户GET,POST过来的数据了。。。嘎嘎
作者: 小雨    时间: 2006-07-12 10:31
8错




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2