SQL Server网站防注入终极解决方案

【说明】这篇文章发表在2009年第16期《网管员世界》上,介绍了通过“分离”网站与使用不同权限SQL Server用户的方法,解决政府网站(以及类似网站)被注入、修改的问题。而更加详细的介绍,是在正在写作的一本《中小企业虚拟机解决方案大全》(暂命名)中的一个案例的一部分,敬请期待!
根据国家互联网应急中心的统计,截止2009年1月,有20%以上的政府网站被******过。许多政府网站,由于开通网站的时间比较早,而当时对网站的安全性要求不高,这就导致了在早期开通网站的政府网站,其网站存在漏洞。这些漏洞可能包括以下这些:
弱口令:有些后台管理密码是默认的用户名及密码,例如都是admin。
操作系统漏洞:一些网站服务器操作系统没有及时更新补丁,存在漏洞。
Web服务器漏洞:一些网站采用低版本的IIS或Apache,存在漏洞。
数据库漏洞:所使用的数据库存在漏洞。
网站代码漏洞:由于网站开发的比较早,这些代码或多或少存在漏洞。
在上述这些漏洞中,弱口令、操作系统漏洞、Web服务器漏洞、数据库漏洞都很容易修复,例如,这些可能通过设置复杂密码、打补丁的方式修复,而网站代码漏洞以及由此引发的SQL Server网站注入漏洞,只能通过修改网站代码的方式来解决。而许多包括“后台管理”的一些网站,存在的一些“编辑器漏洞”更是不容易解决。
对于大多数的政府网站,其服务器都是放置在自己的信息中心机房,而网站的维护、后台管理都是由信息中心的人员在单位内部维护。而与此相似的许多大学、机关、事业单位、大型的公司来说,网站服务器也多是放在自己的机房,而维护也是由内部的人员,在局域网内部维护,网络拓扑如图1所示。
图1 网站放置在单位机房
如果将网站一分为二:将发布到互联网的网站设置成“只读”、用于网络内部维护的网站设置成“完全控制”,这样,就可以防止网站被******。
网站防SQL Server注入思路:如果网站是基于SQL Server数据库的,在SQL Server中创建两个用户,一个用户对网站数据库只具有“浏览”权限、另一个用户对网站数据库具有“完全控制”权限。对于同一个网站来说,创建两个一样的备份,其中一个网站使用“浏览”权限的用户,该网站发布到Internet,对外提供服务;另一个网站,使用“完全控制”权限的SQL Server用户,该网站只对“内”服务。
关于网站的数据同步问题:由于在局域网内维护网站,例如一些网站新闻、通知的发布、一些表格、文件的上传等,如果这些数据是保存的SQL Server数据库中,则不需要对发布到Internet的网站进行修改;如果发布的一些表格、文件是保存在网站的文件夹中,例如,保存在网站的doc文件夹中,为了保证发布到Internet上的网站与内网网站数据的“同步”,可以在发布到Internet的网站文件夹中,删除名为doc的文件夹,然后在WEB服务器中,创建名为doc的虚拟目录,指向内网网站的doc文件夹即可。这样就达到了数据同步的目的。
下面通过一个具体的实例,介绍这个方法。
(1)将网站代码复制一份到其他文件夹,假设原网站在E:\zfwz-lan文件夹,复制后的在e:\zfwz-wan文件夹。
(2)在IIS中,创建两个站点,网站名称分别为zfwz-lan、zfwz-wan,分别指向第3分区的zfwz-lan与zfwz-wan,其中zfwz-wan主机头名为www.xx.gov.cn(政府网站域名)。zfwz-lan使用TCP的123端口(或者其他端口),zfwz-wan使用TCP的80端口。以后网站需要维护时,需要由局域网的用户,键入http://IP:123的方式进行维护。
(3)进入zfwz-lan的站点,进入管理网站(内部局域网用户后台管理的网站),进入“目录安全性”选项卡,只允许局域网内指定的IP地址(192.168.0.0/18)访问,如图2所示。
图2 只允许指定用户访问
(4)对发布到Internet的网站进行配置:进入保存该网站的文件夹,删除后台管理目录中,所有的子文件夹与文件,这样,发布到Internet的网站,不能进入后台管理页面。如果在网站管理维护中,有些图片、文件需要上传到后台管理目录中的某个文件夹,例如,在admin中有个upload目录保存后台上传的图片、新闻、文档等,则需要在“IIS”中,进入“zfwz-wan”中的admin目录中,创建同名的虚拟目录,指向内网网站中的同名目录(即e:\zfwz-lan\admin\upload),这样,即不影响发布到外网网站的数据显示,又避免了***通过后台管理网站中的一些漏洞***网站。在创建虚拟目录时,“执行权限”设置为“无”。如图3所示。
图3 创建虚拟目录
如果有多个虚拟目录,则需要一一创建。另外,在该文件夹中,删除后台管理的网页,例如后台管理的login.asp等代码。
(5)在SQL Server中创建一个用户,用户名为sqlread,允许该用户对网站数据库具有SELECT和CONNECT权限,如图4所示。
图4 在SQL Server中创建用户,允许对网站数据库“只读”
(6)打开“资源管理器”,打开发布到外网网站的文件夹(本示例为e:\zfwz-wan),编辑访问数据库用户名、密码的配置文件,在本例中,该文件名为conn.asa,用“记事本”打开该文件,替换里面的用户名为sqlread,并键入该密码,如图5所示。
图5 修改访问数据库的帐户
经过上述修改,发布到Internet上的网站,即使网站代码存在漏洞,即使***根据网站代码漏洞,精心创建了SQL Server语句,但由于现在发布的网站只能对数据库有“读取”权限,而不能达到破坏数据库的目的。

你可能感兴趣的:(SQL Server网站防注入终极解决方案)