3

ユーザーが提供する他のデータと同様に、あらゆる種類のエクスプロイトを回避するために、URLを適切にエスケープしてフィルタリングする必要があります。できるようになりたい

  • ユーザー指定のURLをhref属性に入れます。(引用符を書くのを忘れた場合に失敗しなければボーナスポイント)

    <a href="ESCAPED_USER_URL_GOES_HERE">...</a>
    
  • javascript:悪意のあるドメイン名へのリンクなどの悪意のあるURLを禁止します。

  • ユーザーにある程度の余裕を持たせます。彼らがそのようなものを追加するのを忘れたという理由だけでエラーを発生させたくありませんhttp://

残念ながら、この種の問題に対する「標準的な」解決策は見つかりません。インスピレーションとして私が見つけた唯一のものはencodeURIJavascriptの関数ですが、それは単純なURLパラメーターのエンコードを行うだけで、:やなどの特殊文字を残しているため、2番目のポイントには役立ちません/

4

2 に答える 2

3

OWASP は、ユーザー入力を検証するための正規表現のリストを提供します。そのうちの 1 つは URL の検証に使用されます。これは、言語に中立で標準的なソリューションに近づくのと同じくらいです。

使用しているプログラミング言語の URL 解析ライブラリに依存する可能性が高くなります。または、URL 解析正規表現を使用します。

ワークフローは次のようになります。

  1. 指定された文字列が整形式の URL であることを確認してください。
  2. プロトコルが指定されていない場合などに、デフォルトのプロトコルを提供しますhttp:
  3. 受け入れ可能なプロトコルのホワイトリストを維持します ( http:https:ftp:mailto:など)。
    1. ホワイトリストはアプリケーション固有です。アドレス帳アプリの場合、mailto:プロトコルは不可欠です。javascript:およびdata:プロトコルの使用例を想像するのは困難です。
  4. URLの最大長を強制する- クロスブラウザー URL を確保し、攻撃者がメガバイト長の文字列でページを汚染するのを防ぎます。運が良ければ、URL 解析ライブラリがこれを行います。
  5. 使用コンテキストの URL 文字列をエンコードします。(HTML 出力用にエスケープしたり、SQL クエリで使用するためにエスケープしたりします)。

javascript: スタッフやリンク、悪意のあるドメイン名などの悪意のある URL を禁止します。

Google Safe Browsing APIを利用して、ドメインにスパイウェア、スパム、またはその他の「悪意」がないかチェックできます。

于 2013-02-11T07:33:59.940 に答える
0

最初のポイントとして、通常の属性エンコーディングは問題なく機能します。(文字をHTMLエンティティにエスケープします。属性が引用符であることが保証されている場合は、引用符、アンパサンド、角かっこをエスケープしても問題ありません。他の英数字をエスケープすると、誤って引用符を外した場合でも属性が安全になります。

2番目のポイントはあいまいで、何をしたいかによって異なります。ブラックリストの代わりにホワイトリストのアプローチを使用することを忘れないでください。htmlエンティティエンコーディングやその他のトリックを使用して、最も単純なブラックリストを回避することができます。

于 2013-02-12T00:16:59.800 に答える