北京  ■ 深圳 ■ 上海  ■ 成都  ■ 重庆  ■ 浙江
经过数据恢复工程师的努力研究,已搞清楚了XFS文件系统的结构层。如果有基于XFS的NAS或LINUX数据出现问题,已有很大把握了。基于XFS数据恢复的软件已经完工。
站 内 搜 索
    
热 点 文 章
PC3000使用说明
关于硬盘坏道(绝对有收获) 
pc3000译文
U盘故障的详细维修方法! 
硬盘零磁道与分区表的修复
pc3000处理常见故障的一些方
推 荐 文 章
Hrt修复磁盘缺陷
pc3000处理常见故障的一些方
硬盘容量限制问题的形成以及
关于硬盘坏道(绝对有收获) 
20个美钻维修心德(1.22版)
Disk Genius V2.0 Beta 0219
FUJITSU盘故障表现
FUJ维修资料
最 新 文 章
北京理工大学
某数据恢复公司
捌捌国际
北京梁先生
吉林延边
山西刘先生
北京张先生
HP公司
联 系 我 们
北京北亚数据恢复中心
地址:北京市海淀区学院南路68号吉安大厦C座(汇智楼)528室
电话:(010)51280825
手机:13522617215 (张先生)
电子邮件:zymail@vip.sina.com
QQ:34000588(请叙述理由)
您现在的位置:

首页>>数据恢复文章>>正文

服务器反黑全集 网站服务器超级安全配置

作者: 来源: 日期:2008-04-28 17:29:03  点击次数:

我曾经非常惊奇地发现乔客论坛对外散布的版本中一段让人觉得不可思议的问题代码,如果你比较感兴趣的话,翻翻gallery.asp就能看到一个特定的动作序列(action=flash_view),绕过了所有对id的检查。 
其实说起来,这一类代码不太可能有太复杂的逻辑结构,对代码进行审查的时候,进行所有的分支覆盖是可以手工完成的,只要稍微想想就会发现对变量的检查是否能够有效地到达你的目的地——生成SQL语句的地方。 
关于过滤器的位置,如果要深入下去,马上就会出来一些让人眼花缭乱的东西,中间的分析很麻烦而且很形式化,虽然确实有算法可以保证位置选取的正确性,但是我想这里还是给出一些结论性的东西吧。倘若你很有兴趣,我想你可以来信和我交流。 
过滤的位置,取决于两个方面:你获得变量的来源,以及你需要保证到的生成SQL语句的位置。前面一个,不论是来自于直接还是间接输入,先想想可能的输入字符;对于后面一个,你要保证无论程序运行情况怎样,经过了过滤语句的流程一定会经过你需要保证到的生成SQL语句的位置(保证其是有效过滤语句的后向必经节点)。如果你不很清楚流程的判断,我的建议是if中仅仅判断,if嵌套间不要有多余的东西,过滤语句后紧接生成SQL语句。 
再回到前面提到的潜在问题,我们终于可以在这里解决了:在取出数据后依然首先进行判断。因为根据前面说的,这一种间接输入依然有可能出现危险。 
说到这里,插一句另类的过滤位置问题:不要把对输入的过滤放到客户端解决,那是可以绕过的!谁能保证你的VBScript/javascript能起作用,如果别人直接用NC或者一个不支持脚本的浏览器呢? 
上述两个大的方面,以软件测试的目光来认识,显然是没有穷尽所有的分支所导致。在使用对方提交的数据之前,先做一个对方所有可能进入字符的分析列表,然后就每一种输入分支情况进行类型的审核,这是每个代码编写者都应该做的事情。这是一件很简单的事情,因为只是类型上的审核还好,碰上语义的问题就麻烦了…… 
三、类型正确意味着放行? 
涉及到语义的问题,要是可能的话,我选择最好还是避开。 
譬如对于一个整型数字,你输入的确实是一个整型,通过了过滤器,潜在的问题是你的输入内容上合法吗,或者根本就不应该从你这里获得信息?很多年前就有人提出来,有些注册的模块存在问题:它里面的id是通过一个type=hidden掩盖后隐式提交的,但是我在第一步建立了用户,第二步仍就有可能通过提交内容不合法的id来修改他人的信息。这种异类的问题都是非常难发现,而且几乎都只有*经验而不是某一个具体的算法来处理。我们在联系一下前面的,连起来想想或许能够更加清楚,对于输入的字符串,感觉上没有过滤也不会有错,因为比较数字之类集合来说,字符串所能容纳的几乎是全部可能输入的集合。事实上,常见的是没有过滤造成单引号的错误匹配,进而导致了SQL Injection。严格说起来,这也是一个语义上的问题,不过对于这样子的特殊情况而言,可以通过处理输入中的单引号来保证语义的某种程度上的正确。所以我也一再强调,单引号本身是无罪的,不过是背了语义的黑锅而已。 
令人遗憾的是,如果是整型数据出了语义上的问题,没有什么东西可以替语义背黑锅了,所以没有了一个一定程度上通用的解决方案。不过也不要悲观,前面就已经说过,能避开就避开,釜底抽薪不要让可能有语义问题的变量作为输入好了。 
仅仅考虑数据库安全的话,所有有威胁的语义问题都几乎出在对数据库的操作上,那么,我们只要注意update/insert等语句就可以了,如果考虑数据内容的安全性的话,select也得算上。一般来说,特别关注的是生成的where后面的条件语句,总觉得条件的语义应该是由服务器端决定的,而不是说用户的输入是什么就是什么。我的建议是对于所有的可能出现语义问题的整型变量,最好都是Session,当然,没有进行非常深入的研究,或许有人能够提出像对付字符串的语义问题一样的有效方法也说不一定。不过话又说回来,在语义层面上看对字符串的过滤,不能证明它不安全,但是更重要的没有人能够证明它安全,只是大家现在用着没有问题,也就默认了罢了。 

本新闻共7页,当前在第5页  1  2  3  4  5  6  7  


上一篇:JHACKJ原创win2003硬盘权限设置
下一篇:Linux十大高级安全管理技巧
相关文章
Copyright 2005 - 2006 版权所有 北亚数据恢复中心
全国统一客服电话:4006-505-808 或 800-810-5880
地址:北京市海淀区学院南路68号吉安大厦C座(汇智楼)528
申明:本网站所有关于硬盘数据恢复硬盘维修的资料及工具全部来自网络,如有侵权,请通知我们,我们马上做出处理-北亚数据恢复中心。