Google で正規表現の意味を検索したところ、まったく不可解すぎるドキュメントが見つかりました。正規表現の簡単な説明と、正規表現攻撃に対する Web サイトの典型的な脆弱性は何ですか?
4 に答える
正規化とは、ファイル名や文字列などの入力を取得して、それを標準表現に変換するプロセスです。
たとえば、WebアプリケーションがC:\ website \ mydomainの下のファイルへのアクセスのみを許可している場合、通常、ファイル名を参照する入力は、相対パスを使用するものではなく、物理的な直接パスとして正規化されます。C:\ website \ mydomain \ example \ example.txtを開きたい場合、その関数への1つの入力はexample\example.txtである可能性があります。これがWebサイトの境界の外にあるかどうかを判断するのは難しいため、正規化関数はアプリケーションディレクトリを調べ、その相対パスを物理パスC:\ website \ mydomain \ example\example.txtに変更します。これは、ファイルパスの先頭で文字列比較を行うだけなので、明らかに簡単に確認できます。
HTML入力の場合、%20のような入力を受け取り、エンコードを解除して正規化するため、これはスペースになります。エンコードのさまざまな方法が多数あるため、これは良い考えです。正規化とは、すべてのエンコードのバリエーションをカバーしようとするのではなく、デコードされた文字列のみをチェックすることを意味します。
基本的に、論理的に同等の入力を取得し、それらを標準形式に変換して、それに基づいて行動することができます。
次の説明は、ここにある「Application Security and Development STIG」からのものです。
3.11 正規表現 正規表現の問題は、リソースの名前を使用してリソースへのアクセスを制御する場合に発生します。コンピュータ システムでリソース名を表す方法は複数あります。リソース名のみに依存してアクセスを制御するアプリケーションは、名前が認識されない形式で指定されている場合、アクセス制御の決定を誤って行う可能性があります。
たとえば、Windows では、notepad.exe は、次のファイルとパス名の組み合わせで表すことができます。
C:\Windows\System32\notepad.exe
%SystemRoot%\System32\notepad.exe
\?\C:\Windows\System32\notepad.exe
\host\c$\Windows\system32\notepad.exe
ファイルのパスと名前のみに基づいてファイルへのアクセスを制限しようとするアプリケーションは、アクセスを不適切に許可または拒否する可能性があります。別のエンコーディング メカニズムがデータで使用されている場合、同じ問題が、ハード リンクとソフト リンク、URL、パイプ、共有、ディレクトリ、デバイス名、またはデータ ファイル内など、システム上の他の名前付きリソースに適用される場合があります。
次の項目は、アプリケーションでの潜在的な正規表現の問題を示している可能性があります。
• リソース名に基づくアクセス制御の決定。
• 使用前にリソース名を正規の形式に変換できない。
アプリケーションでの正規表現の問題を最小限に抑えるために、次の手順を実装します。
• リソース名だけに頼ってアクセスを制御しないでください。
• リソース名を使用してアクセスを制御する場合は、名前を検証して適切な形式であることを確認します。既知の良好な基準に適合しないすべての名前を拒否します。
• 権限や ACL など、オペレーティング システム ベースのアクセス制御メカニズムを使用します。
正規化とは、受信したデータを最も単純な形式に縮小することを意味し、入力の検証に使用されます。
Canonical(と思う)は、コンソール入力が「典型的な動作」であることを意味します。非標準的とは、入力が非標準であり、Linux での「vi」の入力動作など、特別な知識が必要であることを意味します。