网站被攻击了怎么处理
随着互联网的发展,网站安全问题已经越来越受到广泛的关注。目前,网站安全主要表现在:计算机病毒花样繁多,层出不穷,系统、程序、软件的安全漏洞越来越多,黑客通过不正当手段侵入他人计算机,非法获得信息资料,给正常使用互联网的用户带来不可估计的损失。网站运行在互联网平台上,自然会受到网络安全的影响。从互联网的诞生的第一天起,安全问题就成为阻碍互联网发展的棘手问题。从一定意义上说,攻击与防护始终是网络生存的一对矛盾。
一、网站被攻击的类型
尽管人们一直在努力防护,网站发生被攻击的现象仍然频频出现。网站发生被攻击的类型有病毒、木马程序、堵塞攻击、安全漏洞等几类。
1. 病毒
最常见的网站被攻击来源是病毒。计算机病毒是一种能够自我复制、自我传播、具有破坏作用的程序,受到感染的计算机程序在运行时,会将病毒一起加载到内存中运行。多数病毒一旦发作,会恶意破坏计算机系统,造成计算机瘫痪,数据丢失,甚至能破坏计算机硬件。人们所熟知的CIH病毒就能通过破坏BIOS而毁坏计算机主板。为了防止病毒的破坏,应对网站中的文件系统定期地进行病毒查杀。
2. 木马程序
木马程序又称作特洛伊木马,名字来源于古希腊神话中的特洛伊战争。希腊人为了攻克特洛伊城堡,制造了一个巨大的木马,并将士兵隐藏在木马内,然后将木马放置到特洛伊城外。特洛伊人将木马运入城后,木马内的希腊士兵跳了出来,里应外合攻占了城堡。
由此可知,木马程序实际上是一种添加了伪装的黑客程序。表面上看,它可能是一个游戏或者工具小程序,实际上在运行时程序进行了后台操作,执行着特定的命令,如破坏硬盘数据、盗取用户密码等,并通过邮件发送给黑客。“冰河”就是一个著名的木马程序。防范木马程序,除了要小心弄清程序目的外,还要注意不要随便打开来源不明的电子邮件、不要随便运行未知程序。一旦怀疑中了木马程序,可用最新版的杀毒软件进行查杀。
3. 堵塞攻击
病毒和木马程序的发作一般是有其自身特点的,防范它们相对来说也较简单,如升级防病毒软件、安装系统补丁等。相对病毒和木马程序来说,堵塞攻击具有很强的突然性和不可预知性,手段也更加多样,是黑客们常用的主动攻击手段。
堵塞攻击一般是指突然间使用大量小数据包冲击路由器,或者用频繁的链接请求占用服务器响应商品的攻击手段。其攻击的目的是造成网络拥堵与服务器瘫痪,从而使网站不能为用户提供正常的服务。严重时会造成整修个网络的瘫痪。
一般的Web服务器为了提高访问效率,会限制同一时间连接到服务器的客户端数目,如果黑客使用程序频繁建立非法连接,将这些服务的相应端口全部占用,或者耗尽服务器的CPU资源,则使正常用户的请示无法被响应,服务被拒绝。
避免堵塞攻击的手段一般是在路由器上增加防火墙,对信息进行过滤。然而,有的时候黑客采用欺骗手段,仍然可对网站进行攻击。
4. 安全漏洞
威胁网站安全的因素并不是全部来自外部。Web服务器和网站自身的软件安全漏洞往往才是致命的。这些软件漏洞一般是由于软件设计者的疏忽,或者程序调试过程中留下的隐患,漏洞一旦被黑客发现并利用,会产生灾难性的后果,导致用户数据泄露,或者服务器崩溃。
由于系统的复杂性,许多网站都不同程度地存在着安全漏洞,与此同时,不少病毒也利用系统的安全漏洞对网站进行攻击。一旦发现存在漏洞,而且漏洞的分布较广,软件发行商会在网站上发放相应的补丁程序进行补救。网站的管理者应及时更新软件或打上补丁,降低被攻击的概率。
二、 网站页面安全
网站页面安全主要包括网页源代码的保护和页面文件不被非法访问和篡改(如ASP文件)。众所周知,Web本质上是一种不安全的媒介。当用户访问Web应用或者打开Web页面时,所有客户端的代码(HTML,JavaScript源文件以及CSS样式)一般都要下载到客户端缓冲区。用户只需单击“查看源文件”就可以查看、分析和复制这些代码。另外,如果网站的ASP文件被非法访问或篡改,就会使网站毫无安全性可言。
1. 用JavaScript技术保护代码
JavaScript是一种脚本描述语言,它可以被嵌入HTML的文件之中。通过JavaScript可以做到响应浏览者的需求事件(如form的输入)而不需要网络来回传输资料。
采用JavaScript技术来保护网页源代码主要有三个步骤。
(1)建立框架。把要保护的页面设置成为框架,即将页面采用框架结构的方式。若页面并未使用框架结构,且不需使用框架结构,可采用“零框架”技术(即将页面分为左右两帧,左帧的宽度为1,右帧为原页面)。采用此方法后,浏览者在用工具栏中的“查看-源代码”项无法直接得到页面代码,仅能得到框架主文件的代码。
另外,可利用左帧文件加载一些网页的高级应用,如背景音乐、网页计数器、cookie应用等。
本步骤的代码如下:
<html><head><title>欢迎光临西部汽车王</title></head><head><framesetcols="1,*"frameborder=0frameborder=0><framesrc="left.htm"mame="count"noresizescrolling=no><framesrc="index.html"name="index"noresize></frameset></html>
将该文件存为主文件index.htm,建立一空文件left.htm(左框架文件),原页面文件现另存为index.html(与主文件名仅在扩展名上略有不同)。
(2)屏蔽鼠标右键。它的显示源文件功能即在所需保护的页面文件(上例中为index.html文件)中加入以下代码(当右键被单击时将出现所示提示框)。
<scriptLanguage="JavaScript">functionclick(){if(event.button==2||event.button==3){alert("对不起,不能用右键!")}}document.onmousedown=click</script>
(3)设置循环读取。为了防止一些了解网页编写语言的人通过框架主文件中的连接,手工找出被保护页面后获得源代码,还应在被保护页面中加入以下代码。
这段代码将提供跳回功能,当浏览器试图单独读取该文件时,文件将自动返回该文件,使浏览器循环读取该文件,无法看到该页源文件,但在框架文件中打开时能正常读取,从而起到保护该页面的作用。
在完成以上三个步骤,该主页源代码将不能被浏览者在网上获得。
2. 用ASP技术保护代码
户浏览器的特点,因而可以避免所写的源程序被他人剽窃,提高了程序的安全性。在动态HTML(DHTML)中,JavaScript是DHTML的关键组成部分。用ASP来保护JavaScript代码,可以达到较高的安全性。
下面通过案例来说明这种源代码保护方法。
这个案例涉及三个文件:index.asp,js.asp以及global.asa。global.asa定义了一个auth会话变量,该变量用于验证请求JavaScript源文件的页面起源是否合法。这里选择使用会话变量的原因在于它使用起来比较方便。
下面来分析index.asp。首先,程序把auth会话变量设置成了“true”,它表示请求.js文件的页面应该被信任。接下来的几个Response调用防止浏览器缓存index.asp页面。
在HTML文件中调用JavaScript源文件的语法如下:
但在本例中,我们调用的却是一个ASP页面而不是JavaScript源文件:
如果要遮掩应用正在请求ASP页面这一事实,你可以把js.asp改名为index.asp(或者default.asp),然后把这个文件放到单独的目录之中,比如“/js/”,此时上面这行代码就改为:
这几乎能够迷惑任何企图获取JavaScript源文件的人了。不过,不要忘记在服务器配置中正确地设置默认页面文件的名字。
下面分析js.asp如何进行验证以及发送JavaScript代码。程序首先检查会话变量auth,看看请求的起源是否合法。如是,则关闭浏览器缓存,重新设置会话变量,然后向浏览器发送JavaScript代码。如果对js.asp的请求不是来自可靠的起源,会话变量auth是false,程序只发送一个带有版权声明的空白页面。如果用户企图下载JavaScript源文件或者在另一个网站上使用JavaScript源文件,得到的只是一个空白页面。这样,也就实现了对谁可以访问DHTML源文件的控制。
如果要在Web页面中保护页面实际内容的HTML代码,用户可以在js.asp文件中创建一个函数,如下所示。
然后,主页面只需要简单地调用html()即可构造出Web页面。这种页面只有在用户启用了浏览器的JavaScript支持之后才会显示。如果用户查看这种页面的源代码,看到的只有一个函数调用,而不会看到函数调用所返回的源代码。
3. ASP文件安全设置
ASP文件及设置的安全与否直接关系到网站的安全。本节重点讨论ASP在安全方面要注意的问题。
(1)维护Global.asa的安全。为了充分保护ASP应用程序,一定要在应用程序的Glob-al.asa文件上为适当的用户或用户组设置文件权限。如果Global.asa包含向浏览器返回信息的命令而没有保护Global.asa文件,则信息将被返回给浏览器。
(2)不要把密码、物理路径直接写在ASP文件中。很难保证ASP程序是否会被人拿到,即使安装了最新的补丁。为了安全起见,应该把密码和用户名保存在数据库中,使用虚拟路径。
(3)在程序中记录用户的详细信息。这些信息包括用户的浏览器、用户停留的时间、用户IP等。其中记录IP是最有用的。
可用下面的语句了解客户端和服务端的信息:
如果记录了用户的IP,就能够通过追捕来查用户的具体地点。
(4)Cookie安全性。ASP使用SessionID cookie跟踪应用程序访问或会话期间特定的Web浏览器的信息。这就是说,带有相应的cookie的HTTP请求被认为是来自同一Web浏览器。Web服务器可以使用SessionID cookies配置带有用户特定会话信息的ASP应用程序。为了防止计算机黑客猜中SessionID cookie并获得对合法用户的会话变量的访问,Web服务器为每个SessionID指派一个随机生成号码。每当用户的Web浏览器返回一个SessionID cookie时,服务器取出SessionID和被赋予的数字,接着检查是否与存储在服务器上的生成号码一致。若两个号码一致,将允许用户访问会话变量。这一技术的有效性在于被赋予的数字的长度(64位),此长度使计算机黑客猜中SessionID,从而窃取用户的活动会话的可能性几乎为零。
如果ASP应用程序包含私人信息、信用卡或银行账户号码,拥有窃取的cookie的计算机黑客可以在应用程序中开始一个活动会话并获取这些信息。为了防止截获用户sessionID-cookie的计算机黑客,可以使用此cookie假冒该用户,通过对Web服务器和用户的浏览器间的通信链路加密来防止SessionID cookie被截获。
(5)使用身份验证机制保护被限制的ASP内容。可以要求每个试图访问被限制的ASP内容的用户必须要有有效的用户名和密码。每当用户试图访问被限制的内容时,Web服务器将进行身份验证,即确认用户身份。
Web服务器支持以下几种身份验证方式:
① 基本身份验证提示用户输入用户名和密码。
②Windows NT请求/响应式身份验证,从用户的Web浏览器通过加密方式获取用户身份信息。然而,Web服务器仅当禁止匿名访问或Windows NT文件系统的权限限制匿名访问时才验证用户。
(6)使用SSL维护应用程序的安全。SSL(Secure Sockets Layer)协议是由Netscape首先发表的网络资料安全传输协定,其首要目的是在两个通信间提供秘密而可靠的连接。该协议由两层组成,底层是建立在可靠的传输协议(如TCP)上的是SSL的记录层,用来封装高层的协议。SSL握手协议准许服务器端与客户端在开始传输数据前,能够通过特定的加密算法相互鉴别。SSL的先进之处在于它是一个独立的应用协议,其他更高层协议能够建立在SSL协议上。
SSL3.0协议作为Web服务器安全特性,它提供了一种安全的虚拟透明方式来建立与用户的加密通信连接。SSL保证了Web内容的验证,并能可靠地确认访问被限制的Web站点的用户的身份。
通过SSL可以要求试图访问被限制的ASP应用程序的用户与服务器建立加密连接,以防用户与应用程序间交换的重要信息被截取。如好多基于Web的ASP论坛都提供注册用户互相发送信息的服务,这种信息是明文传送的,在网吧很容易被人监听到。如果加了一层SSL认证,会防止发送信息被监听的可能。
(7)客户资格认证。控制对ASP应用程序访问的安全方法是要求用户使用客户资格登录。客户资格是包含用户身份信息的数字身份证,它的作用与传统的诸如护照或驾驶执照等身份证明相同。用户通常从委托的第3方组织获得客户资格。第3方组织在发放资格证之前确认用户的身份信息(通常这类组织要求姓名、地址、电话号码及所在组织名称,此类信息的详细程度视给予的身份等级而异)。
每当用户试图登录到需要资格验证的应用程序时,用户的Web浏览器会自动向服务器发送用户资格。如果Web服务器的Secure Sockets Layer(SSL)资格映射特性配置正确,服务就可以在许可用户对ASP应用程序访问之前对其身份进行确认。可以从资格证明中访问用户名字段和公司名字段,Active Server Pages在Request对象的ClientCertificate集合中保存资格信息。必须将Web服务器配置为接受或需要客户资格,然后才能通过ASP处理客户资格。否则,ClientCertificate集合将为空。
(8)ASP的加密。由于ASP脚本是采用明文方式来编写的,所以开发出来的ASP应用程序一旦发布到运行环境中去后,很难确保这些“源代码”不会被流传。这样就产生了如何有效地保护开发出来的ASP脚本源代码的需求。
下面介绍几种ASP源代码保护方法。
① 官方加密程序:从微软网站下载screnc.exe文件对ASP文件进行加密。
②“脚本最小化”:即ASP文件中只编写尽可能少的源代码,实现商业逻辑的脚本部分被封装到一个COM/DCOM组件,并在ASP脚本中创建该组件,进而调用相应的方法(methed)即可。应用开发者开发ASP脚本应用之前就可按此思路来开发,或者直接用ASP脚本快速开发出原型系统后,针对需要保护、加密的重要脚本用COM组件来重新开发、实现并替换。
③“脚本加密”:即ASP脚本仍直接按源代码方式进行开发,但在发布到运行环境之前将脚本进行加密处理,只要把加密后的密文脚本发布出去,即在ASP.DLL读取脚本环节加入密文还原的处理。
(9)防止SQL注入式漏洞。SQL语言是操作数据库的标准语言,在ASP文件编写中应有相应代码防止此类漏洞。
三、 网站数据库的安全
对于采用“虚拟主机”的方式建立的中小型网站,其后台数据库绝大多数采用Access数据库。如果有人通过各种方法获得或者猜到数据库的存储路径和文件名,则该数据库可以被下载到本地。
为了防止被非法下载和访问,可采取以下措施。
(1)改变数据库名称。为数据库文件起个复杂的非常规的名字,并放在几层目录下。所谓“非常规”,就是说如果有个数据库要保存的是有关电子商的信息,不把它命名为“es-hop.mdb”,而是起个比较怪的名称,如d34ksfslf.mdb,再放在如/kdslf/i44/studi/的几层目录下,这样黑客要想通过猜的方式得到Access数据库文件就比较困难了。
(2)不把数据库名写在程序中。许多人都把DSN写在程序中,比如DBPath=Server.MapPath("cmddb.mdb")conn.Open"driver={Microsoft Access Driver(∗.mdb)};dbq="& DBPath假如万一给人拿到了源程序,Access数据库的名字就一览无余。因此建议在ODBC里设置数据源,再在程序中这样写:conn.open"shujiyuan"。
(3)改变数据库文件的扩展名。如把abc134.mdb改为abc134.asp,这样在ASP文件及数据库操作中仍然可以正常使用。但在非法访问者看来,该文件已不是数据库文件了。
(4)加密Access数据库文件。选取“工具→安全→加密/解密数据库”,选取数据库(如employer.mdb),然后单击“确定”按钮,会出现“数据库加密后另存为”的窗口,存为employer1.mdb。接着,employer.mdb会被编码,然后存为employer1.mdb。要注意的是,以上的方法并不是对数据库设置密码,而只是对数据库文件内容加密,目的是为了防止他人使用别的工具来查看数据库文件的内容。接下来为数据库设置密码,首先打开经过编码的employer1.mdb,在打开时,选择“独占”方式。然后选取功能表的“工具→安全→设置数据库密码”,输入密码即可。为employer1.mdb设置密码之后,如果再使用Access数据库文件时,则Access会先要求输入密码,验证正确后才能够启动数据库,可以在ASP程序中的connection对象的open方法中增加PWD的参数来访问有密码保护的数据库文件,
例如:
这样即使别人得到了employer1.mdb文件,没有密码是无法看到employer1.mdb的内容。
综合使用上述方法,数据库被非法下载的可能性就会降低。