网站运营
位置:首页>> 网站运营>> 编写安全的ASP代码(2)

编写安全的ASP代码(2)

  发布时间:2008-03-24 20:10:00 

标签:数据库,安全,asp

这一类的问题,如果依然用动网论坛做例子,我建议看一下六月八号的漏洞文章。

还有就是过滤器的位置,这个掺杂了逻辑问题在内的复杂问题。

我曾经非常惊奇地发现乔客论坛对外散布的版本中一段让人觉得不可思议的问题代码,如果你比较感兴趣的话,翻翻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,当然,没有进行非常深入的研究,或许有人能够提出像对付字符串的语义问题一样的有效方法也说不一定。不过话又说回来,在语义层面上看对字符串的过滤,不能证明它不安全,但是更重要的没有人能够证明它安全,只是大家现在用着没有问题,也就默认了罢了。
  若要深入的分析语义,也会突然冒出一大堆奇怪的东西,所以还是就此打住吧,真切的希望同行之间能够多一些这方面的交流!

前面说的也许更多地会用在一些对既有代码的补救上,如果是从头开始构架一个软件的话,上面的仅仅是设计上一些参考。所有的漏洞都是源于设计上的缺陷,一个好的软件应该被证明其模型是正确的,这很难但是可以做到。如果你一开始就证明了软件的正确性,我想也不会有漏子可以给别人钻了。

0
投稿

猜你喜欢

  • 做网站,想必每一位站长的心愿都是一致的——更多的流量以便带来更多的收益!因此,不断宣传和推广自己的网站,让更多的人知道、了解并信赖你的网站,
  • 核心提示: 2.0的疲势在于盈利模式的不清晰,盈利模式的不清晰,又在于它没有一张清晰的脸,也就是首页。web2.0,有如digg、delic
  • 还记得《暗黑破坏神》吗?还记得那些曾经的游戏吗?随着2008年网页游戏在全国的异军突起,这些经典游戏也就逐渐成为了游戏开发厂商模仿和借鉴的对
  • wordpress默认的在首页显示最新评论的样式是“评论者+被评论的文章标题”。这样显示最新的评论不会给后面的浏览者一种很直观的感觉,如果想
  • Apache根据著名的WWW服务器调查公司所作的调查,世界上百分之五十以上的WWW服务器都在使用Apache,是世界排名第一的WEB服务器。
  • CPM 模式的Banner广告在网站外销事业中,广告联盟的运作与选择很重要,但还有一个部分没有讨论,就是网络广告的不同型态以及各自的收入潜力
  • 微软的WindowsServer2003中防火墙的功能如此之简陋,让很多系统管理员将其视为鸡肋,它一直是一个简单的、仅支持入站防护、基于主机
  • c:\administrators 全部system 全部iis_wpg 只有该文件夹列出文件夹/读数据读属性读扩展属性读取权限c:\ine
  • 圣诞节的脚步可是越来越近了,最近福布斯网站就盘点了一下2008年度最受欢迎的十大圣诞礼物。而夺冠者并不让我们感到意外,那就是任天堂的Wii游
  • 刚好青云讲了些“007功能”,好像还挺有争议。有争议是好事,有争议才说明这些想法既不是人人皆知的常识,也不是明显没有价值的谬论,而是一个值得
  • 我就在想是否tag对搜索优化有没有影响?先来看看tag的介绍,标签是英文tag的中文翻译,又叫“自由分类”、“分众分类”,是用户根据自己对事
  • 最近,湖南SEO在子目录下面安装了一个discuz论坛程序。大家都知道zblog是asp,discuz是php,那么asp的zblog应该如
  • windows服务器对于系统管理员来说至关重要,近日,国外媒体曾报道过Windows服务器在营收比例方面,依然是市场上遥遥的领先者。鉴于此,
  • 如今,互联网将进入一个崭新的阶段,信息化的发展带动其它产业的发展,各行业都将与它进行更深入的融合和渗透。越来越多的企业已开始从对互联网的认知
  • 有用户问GoDaddy空间流量使用是如何计算的呢?那我们今天就一起来了解一下空间流量。流量使用是测量网站流量的一种方式。它由两种交通形式组成
  • 网络赚钱的方法很多。目前,Google Adsense是多数人最佳的选择。一些基本的优化技巧可以使您的Google Adsense收入翻倍。
  • DNS(Domain Name System)是域名解析服务器的意思,它在互联网的作用是把域名转换成为网络可以识别的IP地址。目前国内电信运
  • MIME(Multipurpose Internet Mail Extensions,多目的Internet邮件扩展)是创建用于电子邮件交换
  • 用户体验要素看到15页了,感觉我在一个个字的去品位,把功夫用到细处,就想一个网站对用户的展示也是这样,注重点在于细节的描写。感觉用户体验和S
  • 有些会员之前就问过我这个问题,Dedecms和PHPWind的整合版退出系统后进入的是空间聚焦频道,有人希望跳转到网站的首页,在这里天涯给出
手机版 网站运营 asp之家 www.aspxhome.com