Node.jsの戦闘36:WAFは、ミドルウェアを書きます!アンチハッカー、抗攻撃

あなたはNode.jsのでWebサービスを行う場合には、非常に多くの場合、あなたは、Expressを選択します。

この記事では、WAFのミドルウェアを達成するためにどのようにどのように表示されます。

Node.jsの戦闘36:WAFは、ミドルウェアを書きます! アンチハッカー、抗攻撃

WAFの使用は何ですか?

あるWAF、Webアプリケーションファイアウォール、Webアプリケーションファイアウォール、アンチ攻撃、ハッカー対策。

ヒント:NPMでは、何のプロ明示ミドルウェアWAFはありません、これは技術の不足です!

完全なサンプルコードを見てください:

;必要= VAR( 'エクスプレス')エクスプレス
VARのApp =エクスプレスを();

//トリガーされたときのアクセスルートディレクトリ
app.get( '/'、機能(REQ、RES){
res.send( 'こんにちはJshaman.com' );
})

// WAFミドルウェア
app.use(関数(REQ、RES、次へ){
VARパス= req.url;
にconsole.log(パス);
IF(waf_detect(パス)== falseに){
次に() ;
}
//console.log(req.cookies);
//console.log(req.headers['user-agent「]);
});

//正規表現を使用して、文字列が攻撃の検出が含まれているか否かを検出する、請求真の攻撃シグネチャに戻り、偽に検出可能な復帰
機能waf_detect(str_to_detect){

VARのregexp_rule = [
/select.+(from|limit)/i、
/(?:(union(.*?)select))/i、
/睡眠\((\ S * )(\ D *)(\ S *)\)/私は、
/group\s+by.+\(/i、
/(?:\ Wから+ INFORMATION_SCHEMA \ W)/ I、
/ユーザー(:(?:CURRENT_?)|データベース|スキーマ| CONNECTION_ID)\ sの* \( / I、
/\s*or\s+.*=.*/i、
/order\s+by\s+.*--$/i、
/ベンチマーク\((。*)\(。*)\) / I、
/ BASE64_DECODE \(/ I、
/(?::( CURRENT_)ユーザー?|データベース|バージョン|スキーマ| CONNECTION_ID)\ sの* \(/ I、
/(?:ETC \ / \ * passwdのW)/ I、
/(\ S +)+(?:ダンプ|アウト)にファイル\ S * / I、
/xwork.MethodAccessor/i、
/(?:定義|はeval |のfile_get_contents |含ん|必要| require_onceを|もしくはshell_exec |のphpinfo |システム|パススルー| preg_ \ワット+ |実行|エコー|印刷|ますprint_r |のvar_dump |(FP)オープン|警告| showmodaldialog)\(/ I、
/ \ <(IFRAME |スクリプト|ボディ| IMG |層| DIV |メタ|スタイル|ベース|オブジェクト|入力)/ I、
/(onmouseover属性|れるonmousemove | ONERROR | onloadイベント)\ = / I、
/ジャバスクリプト:/ I、
/\.\.\/\.\.\//i、
/ \ | \ |。*(?:LS | PWD |にwhoami | LL | ifconfog | IPCONFIG | && |のchmod | CD |ます。mkdir | rmdirを| CP | MV)/ I、
/(?:ls|pwd|whoami|ll|ifconfog|ipconfig|&&|chmod|cd|mkdir|rmdir|cp|mv).*\|\|/i、
/(gopherの| DOC | PHP |グロブ|ファイル|のphar | zlibの| FTP | LDAP |辞書| oggの|データ)\:\ // I
];

用(; I <regexp_rule.length; iが0 = I ++){
IF(regexp_rule [I] .TEST(str_to_detect)== TRUE){
にconsole.log( "攻撃は、検出されたルール番号:"、 "(" + I +」 )」、regexp_rule [I])。
trueを返します。
}
}
falseを返します。
}

app.listen VARサーバ=(8000、関数(){
。VARホスト= server.address()アドレス
。VARポート= server.address()ポート
にconsole.log(ホスト、ポート);
})

本実施例は、WAFの機能を備えたWebアプリケーションです。

内蔵ミドルウェア部分、WAFの保護を達成するために:

// WAF中间件
app.use(関数(REQ、RES、次){
VARパス= req.url;
にconsole.log(パス);
IF(waf_detect(パス)==偽){
次の();
}
// console.log(req.cookies);
//console.log(req.headers['user-agent ']);
});

これは、要求があるかどうかを判断するために、悪意のある動作をフィルタリングすることにより開始した要求です。もしそうなら、()の作品の中で次のこと聞かせて、要求が侵入による攻撃に対して、中断されます。

WAF保護ルール

一般的にWAF攻撃の検出を使用している正規表現を使用して、攻撃の検出。

ShareWAFからのルールのこのセットは、ShareWAFは、プロと強力な商用WAF製品です。

//このルールから:www.sharewaf.com 
VAR regexp_rule = [
/select.+(from|limit)/i、
/(?:(union(.*?)select))/i、
スリープ/ \((\ S *)(\ D *)(\ S *)\)/ I、
/group\s+by.+\(/i、
/(?:)W +のINFORMATION_SCHEMA \ W \から/ I、
/(?: (:?CURRENT_)ユーザー|データベース|スキーマ| CONNECTION_ID)\ sの* \(/ I、
/\s*or\s+.*=.*/i、
/order\s+by\s+.*--$/私、
/benchmark\((.*)\,(.*)\)/i、
/ BASE64_DECODE \(/ I、
/(?::( CURRENT_)ユーザー?|データベース|バージョン|スキーマ| CONNECTION_ID)\ sの* \(/ I、
/(?:ETC \ / \ * passwdのW)/ I、
/に(\ S +)+(?:ダンプ|アウト)ファイル\ S * / I、
/xwork.MethodAccessor/i、
/(?:定義|のfile_get_contentsを| | evalのを含める|必要| require_onceを|もしくはshell_exec |のphpinfo |システム|パススルー| preg_ \ワット+ |実行|エコー|印刷|ますprint_r |のvar_dump |(FP)オープン|警告| showmodaldialog)\(/ I、
/ \ <(IFRAME |スクリプト|ボディ| IMG |層| DIV |メタ|スタイル|ベース|オブジェクト|入力)/ I、
/(onmouseover属性|れるonmousemove | ONERROR | onloadイベント)\ = / I、
/ジャバスクリプト:/私、
/\.\.\/\.\.\//i、
/ \ | \ |。*(?:LS | PWD |にwhoami | LL | ifconfog | IPCONFIG | && |のchmod | CD |ます。mkdir | rmdirを| CP | MV)/ I、
/(?:ls|pwd|whoami|ll|ifconfog|ipconfig|&&|chmod|cd|mkdir|rmdir|cp|mv).*\|\|/i、
/(gopherの| DOC | PHP |グロブ|ファイル|のphar | zlibの| FTP | LDAP |辞書| oggの|データ)\:\ // I
];

それは正規表現であるため、ロジックは、詳細に当面のルールを議論していない、それの詳細なアカウントならば、私は三〇から五の別の記事を書くこと恐れています。

結果の実装:

攻撃のシミュレーションへのアクセス:

http://127.0.0.1:8000/index.html

URLで渡されたそれは、一般的なSQLインジェクション攻撃文である管理者の文、SELECT * FROM。

Node.jsの戦闘36:WAFは、ミドルウェアを書きます! アンチハッカー、抗攻撃

あなたが見ることができ、サイトを開くことができません。インターセプト情報へのバックグラウンドでの出力、およびプロンプトWAF保護ルールのうちトリガ。

この記事はURLのみのパスを検出示しています。

このコードは、その後の展示を含むことができ、一般的な攻撃ポイントクッキー、ユーザエージェント、ポストデータを検出することができます。

書かれExpressモジュールは完全に可能です。

 

このシリーズの多く:

http://www.fairysoftware.com/node.js_in_practice.html

おすすめ

転載: www.cnblogs.com/w2sft/p/12066567.html