|
网站被入侵原理及防止方法
尊敬的深圳108用户:
您好! 感谢您选择深圳108优质虚拟主机。为了保障您的网站运行畅通,防止黑客入侵之扰,请您仔细阅读下面内容,阅读完毕后请按下面方法进行网站自身安全检测和防范! 目前网站被入侵主要表现形式: 1、网站内容被篡改/或者删除 一、ASP防注入
一般的http请求不外乎get和post,所以只要我们在文件中过滤所有post或者get请求中的参数信息中
非法字符即可,所以我们实现http请求信息过滤就可以判断是是否受到sql注入攻击。 具体程序代码: Dim sql_injdata SQL_injdata = "|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare|xp_cmdshell" SQL_inj = split(SQL_Injdata,"|") If Request.QueryString<>"" Then For Each SQL_Get In Request.QueryString For SQL_Data=0 To Ubound(SQL_inj) If InStr(Request.QueryString(SQL_Get),Sql_Inj(Sql_DATA))>0 Then Response.Write("") Response.End() End If Next Next End If 这样我们就实现了get请求的注入的拦截,但是我们还要过滤post请求,所以我们还得继续考虑request.form,这个也是以数组形式存在的,,我们只需要再进一次循环判断即可。代码如下
具体程序代码:
If Request.Form<>"" Then For Each SQL_Get In Request.Form For SQL_Data=0 To Ubound(SQL_inj) If InStr(Request.QueryString(SQL_Get),Sql_Inj(Sql_DATA))>0 Then Response.Write("") Response.End() End If Next Next End If 现在已经实现了get和post请求的信息拦截,只需要在conn.asp之类的打开数据库文件之前引用这个页面即可。 具体实例: Option Explicit 'SQL注入拦截开始 Dim SQL_injdata, SQL_inj, SQL_Get, SQL_Data SQL_injdata = "'|and|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|char|declare" SQL_inj = Split(SQL_Injdata,"|") If Request.QueryString<>"" Then Call KillSQLinj(Request.QueryString)'//get方式拦截 If Request.Form<>"" Then Call KillSQLinj(Request.Form)'//post方式拦截 Sub KillSQLinj(fashion) For Each SQL_Get In fashion For SQL_Data=0 To Ubound(SQL_inj) If InStr(Request.QueryString(SQL_Get),Sql_Inj(Sql_DATA))>0 Then Response.Write("") Response.End() End If Next Next End Sub '//SQL注入拦截结束
二、PHP防注入
相应于ASP,PHP也存在不少漏洞,请将下列代码保存为sz108Check.php
然后在每个php文件前加include(“sz108Check.php“);即可 <?php /************************* 说明: 判断传递的变量中是否含有非法字符 如$_POST、$_GET 功能: 防注入 **************************/ //要过滤的非法字符 $ArrFiltrate=array("'",";","union"); //出错后要跳转的url,不填则默认前一页 $StrGoUrl=""; //是否存在数组中的值 function FunStringExist($StrFiltrate,$ArrFiltrate){ foreach ($ArrFiltrate as $key=>$value){ if (eregi($value,$StrFiltrate)){ return true; } } return false; } //合并$_POST 和 $_GET if(function_exists(array_merge)){ $ArrPostAndGet=array_merge($HTTP_POST_VARS,$HTTP_GET_VARS); }else{ foreach($HTTP_POST_VARS as $key=>$value){ $ArrPostAndGet[]=$value; } foreach($HTTP_GET_VARS as $key=>$value){ $ArrPostAndGet[]=$value; } } //验证开始
三、ACCESS数据库安全防范 ACCESS数据库防下载要点有以下二点:
wwwroot
|- conn.asp Databases |- #test#.asa 程序: Conn.asp <% dim conn,db,connstr db="../Databases/#test#.asa" '数据库文件位置 connstr="DBQ="+server.mappath(""&db&"")+";DefaultDir=;DRIVER={Microsoft Access Driver (*.mdb)};" set conn=server.createobject("ADODB.CONNECTION") '//程序结束 %>
四、其它 还有一些其它要注意的方面,如使用不是自己编写的论坛,要定期到官方看看是否有什么新的漏洞补丁之类,最好及时升级至最新版本。
|