技术观点

加强技术投入,共享技术成果

网站建设规范之一:网站程序安全性


编辑:杭州大显网络科技有限公司更新日期:2009-05-26
前几天帮公司写一些规范,刚写完的“锐奇网络网站建设规范之一:网站程序安全性”,可能非技术的人不太看的懂,不过我已经尽量写的通俗易懂了,因为我是写给测试工程师阅读的,不过我想发在这里,部分作为大家“网站诊断”时的参考,还是具有一些价值吧!

网站程序的安全是系统开发人员必须考虑的重要因数之一,因为这涉及到网站的建设者、网站用户的诸多安全问题,如果不处理好,可能会给系统的使用者和管理者带来严重问题。同时Web应用程序的安全解决方案不仅是技术问题,还涉及到管理等多个方面。但本文仅从四个最常见的、基本的、可通用的方面加以介绍,并对每个安全问题从:为什么、怎样解决、怎样检测三个层次以自问自答的方式加以通俗易懂的介绍。

其实此四种技术开发人员都可能使用过其中一种或者都使用过,但是有时我们在开发的过程中并没有特意的引起重视,在每一个细节的处理时未注意网站的安全性,结果可能导致一些安全漏洞。希望通过此文使开发人员能够更加注重系统安全性,尤其测试人员能够通过监督去保证系统的安全性,提高产品质量。

1防止SQL注入技术
为什么必须防止SQL注入?
相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。新手最容易忽略的问题就是SQL注入漏洞的问题。用NBSI2.0对网上的网站扫描,就能发现部分网站存在SQL注入漏洞,用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据。

怎样防止SQL注入?
比如URL、表单等提交信息时,通过一段防止SQL注入的过滤代码即可防止出错信息暴露,或者通过转向,当系统出错时转到一个提示出错的页面等。同时服务器权限设置是一个非常重要的方面,由于涉及到服务器的配置比较多,本文不介绍。
对于文本型输入,如果要进行检查,就得根据字段本身的性质进行。例如如果是年龄,就得限定必须是数字,大小必须限定在一个范围之间,比如说18-120之间。对于用户名,应该建立一个集合,这个集合里存放有被允许的字符,或被禁止的字符。
这里特别需要说明的一点是关于检查程序的问题。目前,程序对输入数据的检查是在前台通过客户端脚本完成的,这样攻击者很容易就可以绕过检查程序。建议采用前后台结合的方法,既可以保证效率,有可以提高安全性。

怎样测试程序已防止了SQL注入?
如http://www.XXX.com/jiaren.asp?ID=544,此网站用ID来传送数值,如果在ID数值后面加一个SQL敏感符号,英文单引号“’”,打开此链接,如果出现的是浏览器的默认出错提示,则需要设置浏览器,使其错误提示出现,方法为打开浏览器:选项—Internet选项—高级,在设置里找到显示友好的HTTP错误信息勾掉,确认后再刷新,如果此时出现了数据库出错的提示,如:MicrosoftOLEDBProviderforODBCDrivers错误'80040e21',那么说明本程序并没有防止SQL注入,反之如果只出现了如:“提醒您,URL有误,请与管理员联系”之类的提示,说明SQL已经防止了注入。检测表单方法如:如提交脚本,在输入框中输入特殊字符如:script_等,在此不再叙述,测试者可以在网上找到很多这样的方法。
2验证码技术
为什么必须使用验证码?
普遍的客户端交互如留言本、会员注册等仅是按照要求输入内容,但网上有很多攻击软件,如注册机,可以通过浏览WEB,扫描表单,然后在系统上频繁注册,频繁发送不良信息,造成不良的影响,或者通过软件不断的尝试,盗取你的密码。而我们使用通过使用验证码技术,使客户端输入的信息都必须经过验证,从而可以解决这个问题。

怎样使用验证码技术?
所谓验证码,就是将一串随机产生的数字或符号,生成一幅图片,图片里加上一些干扰象素,由用户肉眼识别其中的验证码信息,输入表单提交网站验证,验证成功后才能使用某项功能。放在会员注册、留言本等所有客户端提交信息的页面,要提交信息,必须要输入正确的验证码,从而可以防止不法用户用软件频繁注册,频繁发送不良信息等。