Webアプリケーションファイアウォール(WAF)開発を行います
Go-Language Web Application Firewall(WAF)を開発するには、次のコア関数から始める必要があります。 2。攻撃機能認識、SQLインジェクション、XSS、およびその他の攻撃を事前促進した通常およびOWASPルールを介した攻撃。 3.ルール管理と動的読み込み、JSON/データベースストレージをサポートし、APIを介してホットアップデートを実装します。 4.ロギングと応答の処理、記録的な傍受の詳細と403回の応答を返す、および過失致死を避けるための観察モードをサポートします。
Webアプリケーションファイアウォール(WAF)を開発するために使用する予定がある場合は、悪意のあるリクエストの傍受、攻撃モードの識別、柔軟なルール構成のサポートなど、最もコア関数から始める必要があります。 GO言語自体は、パフォーマンスと同時処理に明らかな利点があり、このタイプのネットワークミドルウェアに非常に適しています。

避けられない重要なリンクを次に示します。
インターセプトと解析を要求します
WAFの最初のステップは、すべてのHTTP要求を「表示」することです。 net/http
パッケージに基づいてミドルウェアを構築するか、ジンやエコーなどのより成熟したフレームワークを使用して、プラグインフィルタリングメカニズムを実装できます。

- すべてのビジネスロジックの前にWAFをプレフィルターとして置きます
- リクエストのさまざまな部分を解決します:URL、ヘッダー、クエリパラメーション、ボディなど。
- ボディバッファリングポスト/プットリクエストの読み取りに注意してください(デフォルトで1回だけ読み取られるため)
簡単な例:ユーザーエージェントが空であるかどうかを確認する場合は、ヘッダーからフィールドを抽出し、ブラックリストが存在するかマッチするかを判断する必要があります。
攻撃機能認識
WAFのコア機能は、SQLインジェクション、XSS、コマンドインジェクションなどの一般的な攻撃行動を特定することにあります。これらの特性に合わせて一連のルールエンジンを構築する必要があります。

一般的な方法は次のとおりです。
- 正規表現は
' or '1'='1
、<script></script>
などの敏感なキーワードと一致します。 - OWASP ModSecurityルールなどの事前定義されたルールセットを使用します(参照として使用できます)
- 特別な文字の組み合わせを評価し、しきい値を超えた場合はインターセプトします。
注:通常の執筆がうまくいかない場合、パフォーマンスが低下します。事前にルールをコンパイルし、ルールの数と複雑さを制御することをお勧めします。
ルール管理と動的荷重
ハードコーディングされたルールは、確かに十分に柔軟ではありません。優れたWAFには、ルールをサポートするためにホットアップデートが必要であり、インターフェイスを介してリモートで最適に構成されています。
あなたは考慮するかもしれません:
- JSONファイルまたはデータベースにルールを保存します
- 起動時にロードし、実行時に変更を定期的に確認してください
- ルールを追加、削除、および変更するためのRESTインターフェイスを提供します
- 各ルールのステータスと優先度を有効に設定します
たとえば、新しいXSS攻撃検出ルールを追加しました。これは、APIを介してすべてのWAFインスタンスに送信し、サービスを再起動せずにすぐに有効にすることができます。
ロギングと応答処理
疑わしいリクエストを発見した後、インターセプトに加えて、後続の分析のためにそれらを記録する必要があります。
ログには、少なくとも以下を含める必要があります。
- クライアントIPおよびユーザーエージェント
- インターセプトされたURLおよびリクエスト方法
- 一致したルールIDまたは名前
- タイムスタンプと操作の結果(ブロッキング/リリース)
応答に関しては、一般的に403を禁じられたことを返すことが合理的です。また、スイッチを追加して、特定のルールを記録して傍受しないようにすることもでき、観察段階に使用されます。
基本的にそれだけです。 Go Make WAFを使用することは複雑ではありませんが、特にパフォーマンスと精度のトレードオフに関しては、多くの詳細があります。たとえば、過失致死による通常のユーザーアクセスの影響を回避する必要があります。また、実際の攻撃を逃したことも防ぐ必要があります。
以上がWebアプリケーションファイアウォール(WAF)開発を行いますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undress AI Tool
脱衣画像を無料で

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック

統合されたservicesと統合されたpothonistoninfrastructure、userestapisorgrpcforinter-servicecommunication、goandpythonappstoStoStosandizedprotocols.1.userestapis(Frameworkslikeginingoand flaskinpython)またはuserestapisを許可します

Golangofferssuperiorporformance、nativeconconcurrencyviagoroutines、および効率的なresourceusage、makingitidealforhigh-raffic、low-latencyapis;

Golangは主にバックエンド開発に使用されますが、フロントエンドフィールドで間接的な役割を果たすこともできます。その設計目標は、高性能、同時処理、システムレベルのプログラミングに焦点を当てており、APIサーバー、マイクロサービス、分散システム、データベース操作、CLIツールなどのバックエンドアプリケーションの構築に適しています。 GolangはWebフロントエンドの主流言語ではありませんが、Gopherjsを介してJavaScriptにコンパイルしたり、Tinygoを介してWebAssemblyで実行したり、テンプレートエンジンを備えたHTMLページを生成してフロントエンド開発に参加できます。ただし、最新のフロントエンド開発は、JavaScript/TypeScriptとそのエコシステムに依存する必要があります。したがって、Golangは、コアとして高性能バックエンドを備えたテクノロジースタック選択により適しています。

GOをインストールするための鍵は、正しいバージョンを選択し、環境変数を構成し、インストールを検証することです。 1.公式Webサイトにアクセスして、対応するシステムのインストールパッケージをダウンロードします。 Windowsは.msiファイルを使用し、macosは.pkgファイルを使用し、Linuxは.tar.gzファイルを使用し、 /usr /localディレクトリに解凍します。 2.環境変数を構成し、linux/macOSで〜/.bashrcまたは〜/.zshrcを編集してパスとgopathを追加し、Windowsがシステムプロパティに移動するパスを設定します。 3.政府コマンドを使用してインストールを確認し、テストプログラムを実行してhello.goを実行して、編集と実行が正常であることを確認します。プロセス全体のパス設定とループ

Golangは通常、Webサービスを構築するときにPythonよりもCPUとメモリを消費します。 1. GolangのGoroutineモデルは、スケジューリングに効率的であり、強力なリクエスト処理機能を備えており、CPUの使用量が少ない。 2。GOはネイティブコードにコンパイルされ、ランタイム中に仮想マシンに依存せず、メモリの使用量が小さくなります。 3. Pythonは、GILと解釈実行メカニズムのために、同時シナリオでより大きなCPUとメモリオーバーヘッドを持っています。 4. Pythonには高い開発効率と豊富なエコシステムがありますが、低リソースを消費します。これは、並行性要件が低いシナリオに適しています。

GOでGraphQlapiを構築するには、GQLGenライブラリを使用して開発効率を向上させることをお勧めします。 1.最初に、スキーマに基づいた自動コード生成をサポートするGQLGENなどの適切なライブラリを選択します。 2。次に、graphqlschemaを定義し、投稿の種類やクエリメソッドの定義など、API構造とクエリポータルを説明します。 3。次に、プロジェクトを初期化し、基本コードを生成して、リゾルバにビジネスロジックを実装します。 4.最後に、graphqlhandlerをhttpserverに接続し、組み込みの遊び場を介してAPIをテストします。メモには、プロジェクトのメンテナンスを確保するためのフィールドネーミング仕様、エラー処理、パフォーマンスの最適化、セキュリティ設定が含まれます

マイクロサービスフレームワークの選択は、プロジェクトの要件、チームテクノロジースタック、パフォーマンスの期待に基づいて決定する必要があります。 1.高性能の要件を考えると、GoのKitexまたはGomicroが優先されます。特にKitexは複雑なサービスガバナンスと大規模システムに適しています。 2. PythonのFastapiまたはFlaskは、小規模チームやMVPプロジェクトに適した、急速な発展および反復シナリオにより柔軟に対応しています。 3.チームのスキルスタックは選択コストに直接影響し、すでに蓄積している場合、より効率的になり続けます。 Pythonチームの発疹転換は、効率に影響を与える可能性があります。 4. GOフレームワークは、サービスガバナンスエコシステムでより成熟しており、将来的に高度な機能に接続する必要がある中および大規模システムに適しています。 5.単一の言語やフレームワークに固執することなく、モジュールに従ってハイブリッドアーキテクチャを採用できます。

sync.waitgroupは、ゴルチンのグループがタスクを完了するのを待つために使用されます。そのコアは、3つの方法で協力することです。追加、完了、待機です。 1.ADD(n)待機するゴルチンの数を設定します。 2.done()は各ゴルチンの端で呼び出され、カウントは1つ減少します。 3.wait()すべてのタスクが完了するまでメインコルーチンをブロックします。使用する場合は、注意してください。Goroutineの外部で追加する必要があります。重複を避け、Donが呼び出されていることを確認してください。 Deferで使用することをお勧めします。これは、Webページの同時クロール、バッチデータ処理、その他のシナリオで一般的であり、並行性プロセスを効果的に制御できます。
