URL の脆弱性を引き起こす文字を防止する必要があります。
私のサンプル URL はhttp://localhost/add.aspx?id=4;req=4です。
ブロックが必要なキャラクターのリストを教えてください。
ASP.NET Web ページを使用しています。SQL Serverデータベースからの情報をバインドしています。
ハッカーが URL に不要な文字列を入力するのを避けるための文字をリストしたいだけです。
URL の脆弱性を引き起こす文字を防止する必要があります。
私のサンプル URL はhttp://localhost/add.aspx?id=4;req=4です。
ブロックが必要なキャラクターのリストを教えてください。
ASP.NET Web ページを使用しています。SQL Serverデータベースからの情報をバインドしています。
ハッカーが URL に不要な文字列を入力するのを避けるための文字をリストしたいだけです。
使用しているテクノロジーに応じて、通常、これを処理する組み込み関数があります。
ASP.NET (VB) & 従来の ASP
myUrl = Server.UrlEncode(myUrl)
ASP.NET (C#)
myUrl = Server.UrlEncode(myUrl);
PHP
$myUrl = urlencode($myurl);
安全でない文字を単純に削除したい場合は、正規表現が必要になります。RFC 1738では、URL で安全でない文字を定義しています。
安全でない:
キャラクターは、さまざまな理由で安全ではない可能性があります。 URL が書き起こされたり、 タイプセットされたり、ワープロ プログラムの処理を受けると、重要
なスペースが消えたり、重要でないスペースが導入されたりする可能性があるため、スペース文字は安全ではありません。文字 "<" と ">" は 、フリー テキストの URL の区切り文字として使用されるため、安全ではありません。引用符 (""") は 、一部のシステムで URL を区切るために使用されます。文字 "#" は安全ではなく、 常にエンコードする必要があります。これは、World Wide Web や他の システムでフラグメント/アンカーから URL を区切るために使用されるためです。文字 "%" は、次の目的で使用されるため安全ではありません。
他の文字のエンコーディング。
ゲートウェイやその他のトランスポート エージェントがそのような文字を変更することがあることが知られているため、その他の文字は安全ではありません。これらの文字は、"{"、"}"、"|"、"\"、"^"、"~"、"["、"]"、および "`" です。
脆弱性の原因となる文字を防止する必要がある
もちろん、答えが言っているように、URL エンコードする必要があります。しかし、 URL エンコーディングは脆弱性の原因ではありませんか? まあ、通常は直接ではありません。ほとんどの場合、予期しない文字が入力されたときにアプリケーションが壊れるだけです。
Web の「脆弱性」について話している場合、今日最も一般的な脆弱性は次のとおりです。
これらは、深刻度が低い順に、一般性が高い順に並べられています。(幸いなことに、最近はユーザー入力を system() に渡すほど愚かな Web サイト作成者はほとんどいませんが、XSS および XSRF の脆弱性は蔓延しています。)
これらの脆弱性はそれぞれ、根本的な問題を理解し、慎重に対処する必要があります。セキュリティに関して無知なアプリケーションを保護する「ブロックする必要のある文字列」の魔法のリストはありません。送信時に文字列 '<script>' をブロックするなどのことを行うアドオンがいくつかありますが、いくつかの一般的なケースしか検出できず、通常は簡単にコーディングできるため、間違った安心感しか得られません。 .
また、これらの文字列が本当に必要な場合でも、それらの文字列の送信が停止されます。たとえば、一部の (愚かな) PHP 作成者は、SQL インジェクションを抑制しようとして、着信するすべてのアポストロフィを拒否します。その結果、「オライリー」と呼ばれることはありません。ああ。ブロックしないでください。適切にエンコードします。
たとえば、SQL インジェクションから保護するには、クエリを作成する文字列を SQL エスケープするようにしてください (または、パラメーター化されたクエリを使用してこれを自動的に行います)。HTML インジェクションから保護するには、ページに出力するすべてのテキスト文字列を HTML エンコードします (または、これを自動的に行うテンプレート/MVC スキームを使用します)。
サンプル URL http://localhost/add.aspx?id=4;req=4
そのURLに何か問題があるはずですか?2 つのクエリ パラメータを「;」で区切ることは有効です。より一般的な '&' の代わりに使用されますが、多くの一般的な Web フレームワークは残念なことに、デフォルトでこの構文をまだ理解していません (Java Servlet および ASP.NET を含む)。したがって、'id=4&req=4' を使用する必要があります。または、それを単一のパラメーターにリテラル セミコロンを含めたい場合は、'id=4%3Breq%3D4' を使用する必要があります。
私はこれをきれいなURLのために書きましたが、もちろん完全ではありません。
"" "、´、'、・、、*、@、?、=、;、:、。、/、+、&、$、<、>、#、%、{、(、)、}、 | ,, ^、〜、[、]、—、–、-',, "
そして、スペース""と繰り返しスペース"-"を翻訳します。
より良いことは、それを行うか、正規表現と組み合わせることです。