论坛编程给开发者的建议
作者: 来源: 添加时间:2006-5-24 13:38:14SQL Injection漏洞的问题
SQL Injection的原理是利用用户提交或可以修改的数据,把想要的SQL语句插入到系统实际SQL语言当中,从而达到入侵的目的,知道原理后,开发者就应该做好预防工作了,需要从根本上解决解决SQL Injection问题。还得从程序本身入手。过滤不能单纯的过滤URL所提交的参数,在表单里的也要过滤,value=后面的可以修改的数据,修改后可以提交到服务器,总之对所有的表单提交的数据以及用户可能对HTML源文件进行修改来控制的所有来自Web服务器外部的数据进行过滤或转换,(我不擅长表达,此话改自isno的一句话,谢谢isno)对单引号、双引号、分号“--”还有对数字键上面的所有特殊字符进行过滤,还有QUERY_STRING环境变量。我敢说仅仅这样还是不够的。就算有防火墙和IDS(入侵检测系统)对特殊字符进行过滤。我们还是可以用分组排列的方法,拆分命令字符串,存进一个临时变量,然后再引用,如下面的两句命令一样。就有可能饶过检测,我们学校就是用这个方法攻破的,许多商业公司都购买了IDS,并且在IDS中过滤xp_cmdshell等等一大串恶意的字符,我们如何提交自己命令呢,我们只要通过以下这种排列组合的方式我们可以突破IDS的检测:
declare @a sysname set @a='xp_'+'cmdshell' exec @a 'dir c:\'
declare @a sysname set @a='xp'+'_cm’+’dshell' exec @a 'dir c:\'
所以开发者就要想办法在数据提交前在程序里就处理掉。更多的SQL Injection资料请查看微软台湾站点(URL:http://www.microsoft.com/taiwan/SQL/SQL_Injection_G1.htm)
文件上传问题
曾经有过这样的一件事,一个动网论坛的管理员密码通过某方法被入侵者获取,然后入侵者设置允许上传ASP文件,结果利用一个cmdasp后门渗透整台服务器。所以,开发者最好不允许使用者设置可以上传ASP文件,即使设置也无效。也就是固定不允许上传ASP文件,如果一定要上传。最好加个对文件内容检测的功能。比如检测文本文件内容里是否存在危险命令,如果存在则禁止上传,有时上传的大都是大文件,而且是二进制的,判断非常麻烦,比较耗资源。但是安全重要还是资源重要?开发者可以自己决定!或者投票调查。下面给出ypy的一段代码:这是主要代码。开发者自己去完善吧。在此特别感谢ypy。
set MyFile = server.CreateObject ("Scripting.FileSystemObject")
set MyText = MyFile.OpenTextFile (sFile, 1) ' 读文本文件
sTextAll = lcase(MyText.ReadAll): MyText.close
'判断用户文件中的危险操作
sStr ="8|.getfolder|.createfolder|.deletefolder|.createdirectory|
.deletedirectory"
sStr = sStr & "|.saveas|wscript.shell|script.encode"
sNoString = split(sStr,"|")
for i = 1 to sNoString(0)
if instr(sTextAll, sNoString(i)) <> 0 then
sFile = Upl.Path & sFileSave: fs.DeleteFile sFile
Response.write "<center><br><big>"& sFileSave &"文件中含有与操作目录等有关的命令"&_
"<br><font color=red>"& mid(sNoString(i),2) &"</font>,为了安全原因,<b>不能上传。<b>"&_
"</big></center></html>"
Response.end
end if
next
头像问题
看过我网站上的那篇《由一个恶作剧网页联想到的安全问题》的都知道,如果写好一个有HTML代码的页面,当然也可以有javascript代码,把扩展名改为.jpg、.gif、.png,在低版本的IE中,照样执行,还有大家熟悉的BMP木马,这样,只要用户浏览就有被格式化硬盘的危险,因此,我的建议是最好不要让用户自己定制头像,不允许上传和引用,对于选择论坛自带头像的时候,只允许用户选择编号,而不让用户看到图片地址,看到地址就意味着有可能修改源代码来达到引用的目的,这点LeadBBS做得不错。其实帖图功能也差不多,不过这毕竟要浏览帖子才中招,安全和功能是成反比的。这点由开发者自己平衡一下,或者最干脆的方法是不要头像,还有帖子里显示的是一个图片的URL。
功能上的问题
可能我的看法有些极端,但作为安全技术爱好者,我知道安全上怎么重视都不过份,所以我还是把我的看法和大家交流一下,论坛产生的原因就是为了满足网友们有个互动式交流平台的需要,仅仅是交流。因此论坛不管如何扩展功能,装插件,都是比不上社区的,何况相当多的娱乐功能根本用不着。还有一些用户参数。比如魅力、金钱、威望、等级这些东西,本来交流就是人人平等的,关注这些数据还不如去完RPG游戏,有些插件也有着这样那样的问题,本着实用、够用的原则,就如中国Linux论坛(URL:http://www.linuxforum.net/forum/categories.php),强烈建议大家去参观一下。还有,作为论坛开发者,应该为使用者多着想,后台功能应尽量做的强大,完善,就像动网、VBB那样,外国的论坛这方面都做得不错,而前台只要功能完整就可以了,就像中国Linux论坛那样,不要给论坛用户过多的操作。也许作为技术爱好者的我不能理解娱乐性论坛的需求,请大家不要介意。
其他
CGI和PHP论坛我接触不多,CGI论坛我2年前用过,所以我也不发表什么看法了,我认为动网论坛是最好的ASP论坛,经过前段时间众多高手的安全检测,修正了大多数致命漏洞。任何论坛都是经过检测安全性才会进一步提高,动网已经是走在相当前面了。
给使用者的建议
其实,使用者最突出的问题就是安全意识太低,这种情况在搞安全站点的人里面不多见,但普遍存在与非技术网站,比如论坛补丁不及时打,对论坛的功能、性能、速度和美观的关注程度大于安全性,甚至说对安全性不屑一顾,在动网官方论坛上常见到这样的帖子“我被黑啦”……每碰到这样的帖子我就会去看,大多数是娱乐性网站,说了这么多,我给大家的建议就是仔细设置好论坛,给用户最小的权限,论坛的权限、用户组的权限,按需分配,本着实用、够用的原则,不同的论坛,有不同的安全标准,或者说是安全级别,对于一个站点来说,论坛就像一个操作系统。如果出现了漏洞,而官方又没有出补丁,最好的补救办法是改变论坛的目录,仅仅关闭是不够的,因为出问题的文件仍存在。更多的建议请看我写的《打造最强劲的论坛》。上面很详细的介绍了关于论坛的安全配置和优化。
以上只是鄙人的一些看法,并不是什么权威,如有人愿意和我交流请mailto:4ngel@21cn.com。