2

最近、エンコーディングが長すぎると、適切に検証されていない場合にセキュリティリスクが発生することを知りました。前述の投稿の回答から:

たとえば、文字<は通常バイト0x3Cとして表されますが、長すぎるUTF-8シーケンス0xC0 0xBC(またはさらに冗長な3または4バイトシーケンス)を使用して表すこともできます。

と:

この入力を受け取り、Unicodeを無視するバイトベースのツールで処理すると、そのツールで使用されている文字処理ステップが回避される可能性があります。

つまり、htmlspecialchars長すぎるエンコーディングを使用する文字列で使用する場合でも、出力にタグが含まれる可能性があります。また、SQLインジェクションにも使用できる同様の文字("またはなど)を投稿できると思います。;

おそらく私ですが、これはセキュリティ上のリスクであり、比較的少数の人が考慮し、知っていることさえあると思います。私は何年もコーディングしてきましたが、これを見つけたのは今だけです。

とにかく、私の質問は、長すぎるエンコーディングでデータを送信するためにどのツールを使用できるかということです。このリスクに精通している人:Webサイトでどのようにテストを実行しますか?たくさんの長すぎる文字を自分のサイトに投稿したいのですが、どうすればよいかわかりません。

私の状況では主にPHPとMySQLを使用していますが、本当に知りたいのはテストツールなので、バックエンドの状況はそれほど重要ではないと思います。

4

2 に答える 2

4

たくさんの長すぎる文字を自分のサイトに投稿したいのですが、どうすればよいかわかりません。

curlなどの手動リクエストツールを使用してテストする以外に、ブラウザ内テストの簡単な回避策は、フォーム送信のエンコーディングをオーバーライドすることです。たとえばFirebug/Chrome Debuggerを使用して、テストしているフォームを変更して属性を追加します。

accept-charset="iso-8859-1"

これで、Windowsコードページ1252(*)としてエンコードされたときに、必要なUTF-8オーバーロングバイトシーケンスになる文字を入力できます。

たとえば、フォームに入力すると、アプリケーションが入力したと見なすようcaféにバイトシーケンスを取得します。入力すると、シーケンスが送信されます。これは、と解釈できます。最近のブラウザはWebページ内の長すぎるUTF-8シーケンスを解析しないため、出力ページのソースには表示されないことに注意してください。ただし、何かが正しくないなどの兆候が見られる場合があります。c a f 0xC3 0xA9caféÀ¼foo0xC0 0xBC f o o<foo<foo�foo

Webアプリの入力と出力を確認するためのより詳細なアクセスについては、Burpなどの専用のsecツールを参照してください。

于 2012-10-26T10:30:20.060 に答える
1

サイトが脆弱かどうかをテストするには、curlを使用してpostを使用してページをフェットし、utf8longおよびpostutf8 longエンコード情報にエンコードします(テキストエディターのエンコードをutf8 longに設定することで、テキストエディターを使用できます。 curlを使用して投稿すると、phpファイルが長くなります)

http://php.net/manual/en/function.curl-setopt.php

于 2012-10-25T14:36:31.613 に答える