黑客攻击一个网站,最快捷的手段,往往是利用CGI的脚本漏洞,注入数据库语句,直接进入网站,效果相当好。如果一个网站登录被攻破,里面的资料将一览无遗,对存有重要资料的网站来说,这将是毁灭性的。
ASP已在网上流行了很久,但是安全性仍然很差,现在琴客根椐自已的实践,谈谈如何对登陆表单进行安全验证,很多初学者喜欢用客户端进行验证,这对稍懂网页设计知识的人来说,简直形同虚设,所以我们要在服务器端进行验证,以下方法虽然是针对ASP脚本的,但实际对大多数交互式脚本都适用的,只是ASP最为突出罢了。
1、对填写格式进行验证。
要求数字的,就要验证所填内容是否是数字;电子邮件格式的,就有电子邮件的填写常规。要求必填项的,要验证是否为空。这是很基本的安全性验证,或者说有点安全性的脚本,但实际上仍然是不安全的。
2、对字符长度进行限制,不能太短,也不能太长。
如果不限字符填写长度,轻者影响网站美观,重者将会对网站造成不可预见的安全隐患,有时会造成系统的崩溃,这有点象溢出攻击的味道了。如果填写者填写非常长的内容,超出服务器所能处理的长度,这就非常危险了。对于有数据库支持的网站,特别是Access小数据库,超出字段长度,就会返回出错信息,而这些出错信息,往往暴露出数据库路径,黑客就会利用数据库盗取资料。结果是不可想象的。
利用len函数计算填写长度,超出预定长度,服务器停止执行(response.End),或者只取前面的字符。
3、提交内容中禁用特殊字符,Html、DHTML、JS、VB脚本,并防止数据库注入
因为这些脚本和字符,往往是ASP脚本可执行的字符,这样提交表单的同时,服务器执行提交的文本,非常危险!
在以前一些论坛和聊天室里,恶作剧者会使用html和JS代码,让访问者电脑上开无数个窗口,导致崩溃!还有可能盗取密码,运行"混客绝情炸弹"类似的程序,你说可不可怕?呵呵。。。好在这只是客户端受攻击,最可怕的还是服务端的安全性。
黑客经常会用特殊字符的漏洞,进入网站。一个典型的例子就是使用[=name" or "name<>123]这种语法骗过服务器,让数据库执行SQL语句。
我们要禁止访客使用以上字符,用去除,替换等方法解决,很多论坛使用UBB代码,这是不错的选择。
4、限制错误登入的次数。这种方法琴客称之为"蜗牛式保护系统"
这是银行、电信等部门最惯用的安全防范手法了。由于历史的原因,这些部门常常用小于6位数的数字做密码,这在网络时代简真是太脆弱了,随便一台电脑,只要很短的时间就能跑完所有密码。所以他们使用了"蜗牛式保护系统"的方法。只要输错3次密码,卡就不能提款了,只要输错3次密码,手机的SIM卡自动锁住。我们在设计ASP交互网站时,可以使用这种方式。只要超过限定的次数,相关帐号就不能使用。防止攻击者使用软件跑密码,进入网站。
5、使用随机附加码验证
这种方法主要也是防止跑密码,将密码验证多了一个动态密码验证。使用RND函数生成,并用SESSION验证,这样才会安全,不要使用hidden表单。现在这种方法验证密码的网站越来越多了。
6、限制操作的时间
有时操作者进入网站以后,忘了关窗口,这样就会被其他操作者非法进入系统。使用操作时间限制,可以防止这种情况,时间超时后,网站各项服务就终止了。在ASP中使用SESSION实现。
7、使用访问来路验证
这样可以防止防问者在自已网站或电脑上生成SESSION骗过安全验证。非正常页面的请求将不被执行。
8、进行日志管理,记录操作者的操作。
记录操作者的操作,这样可以随时修补漏洞。
9、对数据库、路径、脚本加密,禁用不安全组件,修补系统安全漏洞。
[1] [2]
这虽然不是提交表单的安全问题,便是与安全漏洞显然是密不可分的。这种方法很多,不再祥述。
10、防止后退或浏览器缓存网页内容。
与第6点类似,防止操作浏览的内容被非法操作者通过后退查看网站的内容。可以设置成每次后退重新读取服务器。
11、不要在网上链接重要内容。
有些搜索引擎机器人会将重要页面缓存在引擎中,这样就等于向全世界的访客敞着大门。不过现在一些引擎类似黑客程序一样从服务器"偷取"信息,这样防不胜防,由此也出现了防止被搜索引擎搜到的公司提供这类的服务。
(出处:http://www.sheup.com)
[1] [2]