本人并非web安全专家,而是一个曾经被黑客骚扰的普通用户。为了打造一个相对安全的网站,没少费心思。所以很想总结一下,既然是一些不完整的经验,姑且称之为系统安全之“狗皮膏药”,请黑客高手手下留情,不要以我为目标,如果发现我系统有漏洞,那也请提点我,而不是破坏我,多谢多谢。
印象中已经有三次网站被黑经历,第一次是公司内部的一个服务器中了灰鸽子,被人远程控制。这个由于不是专用服务器,又是Windows2000;第二次是中了一个木马,修改了部分非关键数据,导致系统2天数据丢失。第三次是网站首页被更换。
如果第一次的服务器是管理不善导致。那第二次和第三次被黑的服务器,我当时自认为已经采用了各种所谓的安全措施,仍然免不了被入侵,实在有些令人伤脑经。我不知道别人的服务器如何,但考虑到很多著名网站都免不了被黑,相信普通小网站有被黑经历的应该有相当大一部分,只是很多人网管不好意思承认吧?!
一方面我确实是想强烈谴责这些故意黑网站的行为,特别是蓄意破坏网站数据的黑客。但如果对方在没有破坏数据的情况下,倒确实是给网管敲响了警钟。网站被黑,简直就是网管的噩梦。
要防黑,最好的办法就是先理解黑客是如何入侵网站的,最常用的手法是:SQL注入-上传木马....上传木马是最关键的一步。
严防SQL注入基本方法
一旦网站存在SQL注入点,防火墙、杀毒软件、端口屏蔽都是枉然,SQL注入实在是噩梦。
屏蔽关键词是常有方法,不过个人觉得不够。因为有多种字符转义方法可以逃过检查。
应该要检查接受的所有变量的类型,这个在开发程序时就要确定,否则后期修改实在繁琐而且可能有遗漏,留下注入点。
如果可能,尽量把网站静态化,不仅提高速度和搜索友好度,我觉得在防黑方面也起到很好的伪装作用。
不同的程序是否应该按照不同的SQL用户进行连接?我觉得如果不嫌麻烦,在系统规划时就应该采用。比如:在SQL中建立3个不同等级用户,一个用户只能查询、一个可以做日常的插入、修改、删除。更高等级的用户可以做数据库维护(如果没有必要还是不要采用)。我们在不同程序中,采用不同的链接。比如对大部分网站的只读部分,CONN链接就采用第一个用户。
问题是很多ASP程序把用户名和密码都直接写入到ASP程序中,如果asp程序已经暴露在黑客面前,再复杂的用户权限设置也没有用了。
针对这个情况,可以把ASP的关键地方采用DLL调用方式(这个问题又复杂了,而且大部分人是很难做到。)但如果数据很关键,我想至少可以把链接等关键数据写在DLL中。
杜绝上传漏洞
webeditor等在线编辑工具、很多asp上传控件都发现了上传漏洞,必须堵上上传漏洞,删除webeditor等后台管理程序。如果没有必要,干脆不要开通上传功能。(也是难...)
杜绝上传进一步设想
以上方法是从源头上“堵漏”,如果系统复杂,很多时候是无法保证全部漏洞都能及时“堵上”,可以采用以下措施进一步加强防范。
1、取消IIS进程的写入asp权限,这样即使上面的漏洞没有堵上,黑客找到系统漏洞也无法在磁盘上创建新的asp、aspx文件。当然可以根据需要设置要防止写入的文件类型;把ASP、ASPX堵上,至少把asp木马防在门外;这个方法虽然是治标不治本,但倒是切实可行的方式。似乎很少人提到可以这样做。
2、传统的权限设置、防毒系统对系统磁盘的监控,这点不多说。
黑客想做什么?
部分黑客是希望获得源程序,把ASP系统采用DLL方式调用,有了网站被黑经历后,我就把关键地方源码采用DLL方式改写。这样,黑客即使入侵成功,这样的代码对他来说已经毫无价值,我既然没有价值,相信黑客也不会以我为目标吧:
<%
' 本站代码均采用DLL方式调用
Dim MYLOVEBBObject
Set MYLOVEBBObject = Server.CreateObject("MYLOVEBBDLL.callsave")
MYLOVEBBObject.GO
Set MYLOVEBBObject = Nothing%>
网站防黑是一个系统工程,很难几句话就能概括,大致可以以这几方面进行系统巩固:
1、操作系统安全设置
2、SQL安全设置
3、IIS安全设置
4、ASP程序安全