コンテキスト
私は、機能の1つがHTTP/HTTPS経由で利用可能なリソースからメタデータを取得する必要があるアプリケーションに取り組んでいます。これらのリソースはURLの形式でエンドユーザーによって送信され、次にリソースへのHTTPリクエストを呼び出して応答本文を解析し、HTML応答から関連するメタデータ(タイトル、メタタグなど)を引き出します。送信されたすべてのURLのプロトコルとしてHTTP/HTTPSを適用します。
質問/懸念
ユーザーが送信したリソースへのHTTPリクエストが、リモートでのコード実行、ファイルシステムへのアクセス、または外部に公開されていないネットワークインターフェースへのアクセスを許可する可能性のある攻撃ベクトルはありますか?
私の懸念は、ボックスから要求されたときに、アプリケーションが機密データを取得してユーザーに表示する可能性のあるネットワークインターフェイス(ループバック、ローカルホストなど)が存在する可能性があることです。
私がすでに試した/検討したこと
概念的にはそうです。これにより、外部ソースがアプリケーションで最終的に何が発生するかを何らかの方法で操作する(かなり明白な)方法が開かれます。それが脆弱性に変換されるかどうかは、情報をどう処理するかに完全に依存します。
持ち込むものをすべてフィルタリングすることが重要です。フィルタリングするフィールドに応じて、文字のホワイトリストまたは複数のホワイトリストを適用することを検討してください。返されたものを解釈しないことは役に立ちます-応答をプレーンテキストのみとして解析します。
リモートURL(およびプロトコル、http://またはhttps://であることを確認)を確実に制御し、ローカルホストやRFC1918アドレスなどをリダイレクトして拒否し、独自のネットワークを保護します。また、リモートリソースにアクセスする速度を制限します。理想的には、これらのリクエストをバッチ処理し、別のプロセスまたは別のサーバーで実行するように計画します。
引き込まれた情報の一部のみを表示すると想定して、自分のデータベースから戻ってきた場合でも、すべてを慎重にフィルタリングしてエスケープするようにしてください(途中で適切にフィルタリングされなかったことは不可能ではないため)データベースに)。最悪だと思います。
アプリケーションに必要な機能にもかかわらず、このタイプのアクティビティにはかなりのリスクが伴います。