当前位置: 首页 > 图文教程 > 服务器 > 安全防护 > 给论坛开发者和使用者的几点建议

安全防护
服务器安全设置(十六)
服务器安全设置(十七)
服务器安全设置(十八)
服务器安全设置(十九)
服务器安全设置(二十)
服务器安全设置(二十一)
服务器安全设置(二十二)
Windows Server 2003 虚拟主机的安全配置
Win2000 Server入侵监测
Web服务器的安全和攻击防范 (一)
Web服务器的安全和攻击防范 (二)
Web服务器的安全和攻击防范 (三)
Web服务器的安全和攻击防范 (四)
Web服务器的安全和攻击防范 (五)
安全配置和维护Apache WEB Server (上)
安全配置和维护Apache WEB Server (下)
安全性与IIS (一)
安全性与IIS (二)
安全性与IIS (三)
安全性与IIS (四)

安全防护 中的 给论坛开发者和使用者的几点建议


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-29   浏览: 51 ::
收藏到网摘: n/a

       论坛,英文翻译是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页面里,而应该由谈出消息框来显示出错信息,这几个措施都能有效的防止溯雪这一类工具暴力破解,这类工具的原理是判断页面源代码中的某一标签进行破解的,一般是先获取错误页面的的某个标签,然后提交数据,拿返回的数据和刚才获取的错误标签进行对比,如果遇到了和错误标签不同的标签。则视为正确的,只要了解原理了,就知道上面的三种措施是多么有效。还有尽量不要在页面显示密码。比如在快速回复的地方查看原代码。找到类似的 “密码 <input maxlength=20 type=password name=Pass value="***********" size="20">”地方。其中“***********”就是密码了。这样用户登陆后。离开一下,别人马上查看原代码就可以看到密码了,非常不安全啊!其实通过Cookies和Session判断也是有一定缺陷的。Session完全保存在服务器端,是绝对安全的。所以只有开发者平衡一下了。选个折中的方法,还有也尽量少用type=hidden来隐藏信息。会HTML的人一看就知道了。不过如果像刚才所说的采用MD5加密,就不会看到真实的密码了。查看原代码的时候就只是value="f3b4sd5f47fh49ah3"。(此字符串已经改过)

UBB解析问题
  相当多的留言本和论坛都存在这样的问题,比如[img]pic_url[/img]可以显示一张图片,但如果代码转换不好,就可能被执行跨站脚本,最简单的测试方法就是提交[img]javascript:alert();[/img]这样的信息,(标签视程序而定),如果弹出一个对话框就说明存在此漏洞,有的虽然已经过滤了。但可能把提交的信息转换为ASCII代码,还是有可能执行跨站脚本的,跨站脚本的危害不定,可以弹出一些信息来,如果HTML代码不过滤好。可以修改主页的格局;更有攻击者,写个窃取用户的COOKIES资料的脚本引导用户访问,最惨的还可能格式化浏览者的硬盘。下面又是一个简单的例子。
[img]javascript:document.write();[/img]
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,"&#106avascript")
re.Pattern="(jscript:)"
ts=re.Replace(ts,"&#106script:")
re.Pattern="(js:)"
ts=re.Replace(ts,"&#106s:")
re.Pattern="(value)"
ts=re.Replace(ts,"&#118alue")
re.Pattern="(about:)"
ts=re.Replace(ts,"about&#58")
re.Pattern="(file:)"
ts=re.Replace(ts,"file&#58")
re.Pattern="(document.cookie)"
ts=re.Replace(ts,"documents&#46cookie")
re.Pattern="(vbscript:)"
ts=re.Replace(ts,"&#118bscript:")
re.Pattern="(vbs:)"
ts=re.Replace(ts,"&#118bs:")
re.Pattern="(on(mouse|exit|error|click|key))"
ts=re.Replace(ts,"&a