ASP Web サイトのデータベースにハングアップするトロイの木馬に対処する方法
データベースがハッキングされているのに遭遇したことがある人も多いと思います。ここからは私がどのように対処したかをお話します。
ステップ 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>: 'テーブル名を表示します
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 & '実行されたフィールド名を表示します。
終了の場合
次
応答.書き込み <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()
終了の場合