0

「/js」の先読みが含まれないように、この正規表現を書き直す方法はありますか?

これは、パフォーマンスの面で心配する必要がありますか? HTTP リクエストのフィルタリングに使用されています。

\.(asmx(?!/js)|aspx|htm)

編集: 明確にするために:「.asmx/js」を具体的に防止したいのですが、他のすべての.asmxリクエストを許可します。

BAD: Portal.asmx/js
GOOD: Portal.asmx/UpdateProduct
4

2 に答える 2

3

ブロックPortal.asmx/jsするが許可するPortal.asmx/UpdateProduct場合は、それを処理する方法が 2 つあります。受け入れられるすべての値をリストするホワイトリスト パターン、または不要な一致に対する否定的な先読みです。

否定的な先読みは、ほぼ確実に、すべての許容値をリストするよりもパフォーマンスが向上します。

ただし、単に既存の式を使用するだけでは、必要なものと完全には一致しません。たとえば、ブロックしPortal.asmx/jsonて許可Portal.asmx/js.aspxします。これは URL ではない可能性がありますが、修正が必要なものを強調するだけです。

この表現(まぶたのない回答からコピー)は、物事を適切に処理します:

\.(asmx(?!/js[/\z])|aspx$|html?$)


文字クラスが or のいずれか[/\z]に一致 することを説明する価値があります- はto と同じですが、文字クラスで機能します ( はリテラルの $ 文字に一致します)。( と の間に は違いがありますが、複数行モードのみで、URL フィルタリングには関係ありません)。/<end of string>\z$$
$\z


一般に、測定可能なパフォーマンスの問題がない限り、パフォーマンスについて心配する必要はありません(そうでない場合は、変更によって違いが生じたかどうかを知ることができません)。

于 2009-09-28T17:41:56.983 に答える
2

このような単純な先読みのパフォーマンスについて心配する必要はありません。あなたの正規表現は問題ありません。

編集: ただし、誤検知 (Portal.asmx/jssomething など) をキャッチする可能性があります。次のようなものを試すことができます。

\.(asmx(?!/js[/\z])|aspx$|html?$)
于 2009-09-28T18:50:08.983 に答える