分享
 
 
 

给论坛开发者和使用者的几点建议

王朝other·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

论坛,英文翻译是Forum,作为网络上必不可少的交流平台。在网站中有着举足轻重的地位,大家知道论坛的种类相当多。ASP、CGI、PHP、JSP甚至C++开发的,而品牌更是数以百计,正是这样,每个论坛都存在着这样那样的问题,其中安全问题又尤为突出。有不少网站就是因为论坛出了问题而导致服务器被渗透,在安全上怎么重视都不过份!由于我使用ASP论坛比较多,所以谈谈ASP论坛。

给开发者的建议

数据库问题

数据库似乎是每个使用者都比较头疼的问题,被下载、被泄密。其实开发者多下些工夫。数据库采用MD5加密(兼容行下降,自己平衡吧)。这样泄密问题就得到了很好的解决,不管是谁。通过什么途径看到数据,都是加密过的字符串,最大限度的解决了数据库泄密的问题,这点动网做得很好,值得其他论坛借鉴。然后就是防下载了。在数据库中加一个表,因为我不擅长描述,所以大家可以直接下载动网论坛V5.0 0519 sp3(URL:http://www.aspsky.net/download/list.asp?id=2178),里面有这样一个数据库,导入里面的那个notdownload表(大家可以自己研究构造,其实我自己也说不清楚,呵呵),然后就把数据库的扩展名改为.asp就可以防下载了,即使知道数据库路径,下载也是500错误。这个应该由开发者做的。

密码验证问题

密码是系统的首席看门官,大部分的攻击都是截获或猜解密码开始的,所以对于登陆的规定还有需要验证的地方的防范一定要做好。开发者应该限制密码的最小长度为8,最好加入随机验证码,限制登陆失败的次数,如果输入用户名、密码、随机验证码错误导致登陆失败3次后,就会自动关闭,另外,提示密码错误的消息不宜显示在HTML页面里,而应该由谈出消息框来显示出错信息,这几个措施都能有效的防止溯雪这一类工具暴力破解,这类工具的原理是判断页面源代码中的某一标签进行破解的,一般是先获取错误页面的的某个标签,然后提交数据,拿返回的数据和刚才获取的错误标签进行对比,如果遇到了和错误标签不同的标签。则视为正确的,只要了解原理了,就知道上面的三种措施是多么有效。还有尽量不要在页面显示密码。比如在快速回复的地方查看原代码。找到类似的 “密码 ”地方。其中“***********”就是密码了。这样用户登陆后。离开一下,别人马上查看原代码就可以看到密码了,非常不安全啊!其实通过Cookies和Session判断也是有一定缺陷的。Session完全保存在服务器端,是绝对安全的。所以只有开发者平衡一下了。选个折中的方法,还有也尽量少用type=hidden来隐藏信息。会HTML的人一看就知道了。不过如果像刚才所说的采用MD5加密,就不会看到真实的密码了。查看原代码的时候就只是value="f3b4sd5f47fh49ah3"。(此字符串已经改过)

UBB解析问题

相当多的留言本和论坛都存在这样的问题,比如

可以显示一张图片,但如果代码转换不好,就可能被执行跨站脚本,最简单的测试方法就是提交
这样的信息,(标签视程序而定),如果弹出一个对话框就说明存在此漏洞,有的虽然已经过滤了。但可能把提交的信息转换为ASCII代码,还是有可能执行跨站脚本的,跨站脚本的危害不定,可以弹出一些信息来,如果HTML代码不过滤好。可以修改主页的格局;更有攻击者,写个窃取用户的COOKIES资料的脚本引导用户访问,最惨的还可能格式化浏览者的硬盘。下面又是一个简单的例子。

document.write('');里面的单引号'' 和句点.要用ASCII转换,否则对稍有过滤的程序就不会生效。里面可以写任何代码。修改注册表、格式化硬盘……如果UBB过滤得好,就没事。

看懂的朋友觉得严重吗?下面付上一段处理脚本字符的代码。仅供参考。也许有错误和遗漏。

Function JScode(JSstr)

dim jsstr:jsstr=jsstrs

if jsstr="" or isnull(jsstr) then JScode"":exit function

if not isnull(JSstr) then

dim ts

dim re

dim reContent

Set re=new RegExp

re.IgnoreCase =true

re.Global=True

re.Pattern="(javascript)"

ts=re.Replace(JSstr,"javascript")

re.Pattern="(jscript:)"

ts=re.Replace(ts,"jscript:")

re.Pattern="(js:)"

ts=re.Replace(ts,"js:")

re.Pattern="(value)"

ts=re.Replace(ts,"value")

re.Pattern="(about:)"

ts=re.Replace(ts,"about:")

re.Pattern="(file:)"

ts=re.Replace(ts,"file:")

re.Pattern="(document.cookie)"

ts=re.Replace(ts,"documents.cookie")

re.Pattern="(vbscript:)"

ts=re.Replace(ts,"vbscript:")

re.Pattern="(vbs:)"

ts=re.Replace(ts,"vbs:")

re.Pattern="(on(mouse|exit|error|click|key))"

ts=re.Replace(ts,"on")

re.Pattern="(&#)"

ts=re.Replace(ts,"&#")

JScode=ts

set re=nothing

end if

End Function

SQL 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 ""& sFileSave &"文件中含有与操作目录等有关的命令"&_

""& mid(sNoString(i),2) &",为了安全原因,不能上传。"&_

""

Response.end

end if

next

头像问题

看过我网站上的那篇《由一个恶作剧网页联想到的安全问题》的都知道,如果写好一个有HTML代码的页面,当然也可以有javascript代码,把扩展名改为.jpg、.gif、.png,在低版本的IE中,照样执行,还有大家熟悉的BMP木马,这样,只要用户浏览就有被格式化硬盘的危险,因此,我的建议是最好不要让用户自己定制头像,不允许上传和引用,对于选择论坛自带头像的时候,只允许用户选择编号,而不让用户看到图片地址,看到地址就意味着有可能修改源代码来达到引用的目的,这点LeadBBS做得不错。其实帖图功能也差不多,不过这毕竟要浏览帖子才中招,安全和功能是成反比的。这点由开发者自己平衡一下,或者最干脆的方法是不要头像,还有帖子里显示的是一个图片的URL。

功能上的问题

可能我的看法有些极端,但作为安全技术爱好者,我知道安全上怎么重视都不过份,所以我还是把我的看法和大家交流一下,论坛产生的原因就是为了满足网友们有个互动式交流平台的需要,仅仅是交流。因此论坛不管如何扩展功能,装插件,都是比不上社区的,何况相当多的娱乐功能

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有