データベースがハッキングされているのに遭遇したことがある人も多いと思います。ここでは私がどのように対処しているかをお話します。
ステップ 1: 既存のデータベースのバックアップを作成します。
ステップ 2:
次の ASP ファイルを実行して、データベース内の JS トロイの木馬を削除します。
注: conn.asp は自分で書きました。
プログラムコード
「JS トロイの木馬のコンテンツをここに配置します: データベース内の JS トロイの木馬のコンテンツに変更することを忘れないでください。
<!--#include file="conn.asp"-->
<%
Server.ScriptTimeOut=180
rstSchema = conn.OpenSchema(20) を設定します。
k=1
Do until rstSchema.EOF 'データベーステーブルを走査します
rstSchema("TABLE_TYPE")="TABLE" の場合
response.write K&".<font color=red><b>"&rstSchema("TABLE_NAME") & "</b></font>:" 'テーブル名を表示します
Set rs=Server.CreateObject("ADODB.Recordset")
sql="select * from [" & rstSchema("TABLE_NAME")&"]"
rs.open SQL,conn,1,3
i=0 から rs.fields.count-1 の場合 'テーブル内のフィールドを走査します
int(rs(i).Type)=129 または int(rs(i).Type)=130 または int(rs(i).Type)=200 または int(rs(i).Type)=201 または int の場合(rs(i).Type)=202 または int(rs(i).Type)=203 then' フィールド タイプが文字タイプのフィールドのみを処理します
conn.execute("update ["&rstSchema("TABLE_NAME")&"] set "&rs(i).name&" =replace(cast("&rs(i).name&" as varchar(8000)),'ここに JS を置きますトロイの木馬のコンテンツ','')")
response.write rs(i).name &" "&rs(i).Type &" "'実行されたフィールド名を表示します。
終了の場合
次
応答.write "<br>"
終了の場合
rstSchema.MoveNext
k=k+1
ループ
応答。「実行成功」と書き込みます。
%>
データベース テーブルが多数ある場合、上記のデータベース構造の走査は、完了する前に IIS によって停止されます。現時点でできることは、
プログラムコード
rstSchema("TABLE_TYPE")="TABLE" の場合
次のような k 値の範囲を適切に追加します。
プログラムコード
rstSchema("TABLE_TYPE")="TABLE" k>10かつk<20の場合
この場合、一度に操作できるのは 9 テーブルのみです。
ステップ 3:
データベース JS インジェクションの特性 (<script、</script>、http:// などの文字が含まれる) に従って、
次のコードを conn.asp に記述します。
プログラムコード
関数 Cheack_Sqljs()' データベース内の外部リンクからの JS インジェクションを防止します。 true は、外部リンクからの JS インジェクションが検出されたことを示します。
ディム F_Post,F_Get
Check_Sqljs=False
If Request.Form<>"" then' フォーム送信時の検出
Request.Form の各 F_Post について
If (Instr(LCase(Request.Form(F_Post)),"<script")<>0 または Instr(LCase(Request.Form(F_Post)),"</script>")<>0) および Instr(LCase (Request.Form(F_Post))," http://")<>0次に
Check_Sqljs=True
出口
終了の場合
次
終了の場合
If Request.QueryString<>"" then'送信時の QueryString の検出
各 F_Get In Request.QueryString
If (Instr(LCase(Request.Form(F_Get)),"<script")<>0 または Instr(LCase(Request.Form(F_Get)),"</script>")<>0) および Instr(LCase (Request.Form(F_Get))," http://")<>0次に
Check_Sqljs=True
出口
終了の場合
次
終了の場合
終了機能
Function CheckDataFrom()' 送信されたデータのソースを確認します: True は、データがサイトの外部から送信されたことを意味します
CheckDataFrom=True
server_v1=Cstr(Request.ServerVariables("HTTP_REFERER"))
server_v2=Cstr(Request.ServerVariables("SERVER_NAME"))
if Mid(server_v1,8,len(server_v2))<>server_v2 then
CheckDataFrom=False
終了する場合
終了機能
Check_Sqljs または CheckDataFrom の場合
Response.Write "<Script Language=JavaScript>alert('実行禁止、不正な操作です。');</Script>"
Response.End()
終了の場合