次の方法で共有


セキュリティとユーザー入力

ユーザー データ (Web 要求または URL からのデータ、Microsoft Windows フォーム アプリケーションのコントロールへの入力など) は、コードに悪影響を及ぼす可能性があります。多くの場合、そのデータは他のコードを呼び出すパラメーターとして直接使用されるためです。 この状況は、不正なパラメーターを使用してコードを呼び出す悪意のあるコードに似ていますが、同じ予防措置を講じる必要があります。 信頼されていない可能性のあるデータの存在をトレースするスタック フレームがないため、ユーザー入力の安全性を確保することは実際には困難です。

これらは、セキュリティとは無関係に見えるコードに存在する可能性がありますが、不正なデータを他のコードに渡すゲートウェイであるため、見つけるのが最も微妙で難しいセキュリティバグの 1 つです。 これらのバグを探すには、あらゆる種類の入力データに従い、可能な値の範囲を想像し、このデータを見ているコードがこれらすべてのケースを処理できるかどうかを検討します。 これらのバグは、コードで処理できない入力を範囲チェックして拒否することで修正できます。

ユーザー データに関連する重要な考慮事項には、次のようなものがあります。

  • サーバー応答内のすべてのユーザー データは、クライアント上のサーバーのサイトのコンテキストで実行されます。 Web サーバーがユーザー データを受け取り、返された Web ページに挿入する場合、たとえば、 <script> タグを含め、サーバーからの場合と同様に実行できます。

  • クライアントは任意の URL を要求できることに注意してください。

  • 注意が必要なパスまたは無効なパスを検討してください。

    • ..\ 、非常に長いパス。

    • ワイルドカード文字 (*)の使用。

    • トークン拡張 (%token%)。

    • 特別な意味を持つ奇妙な形の道。

    • filename::$DATAなどの代替ファイル システム ストリーム名。

    • longfilenamelongfi~1など、ファイル名の短いバージョン。

  • Eval(userdata) は何でもできることに注意してください。

  • 一部のユーザー データを含む名前への遅延バインディングには注意してください。

  • Web データを処理する場合は、次のような、許容されるさまざまな形式のエスケープを検討してください。

    • 16 進数のエスケープ (%nn)。

    • Unicode エスケープ (%nnn)。

    • オーバーロング UTF-8 エスケープ (%nn%nn)。

    • 二重エスケープ (%nn は %mmnnになります。ここで、%mm は '%' のエスケープです)。

  • 複数の正規形式を持つ可能性があるユーザー名には注意してください。 たとえば、多くの場合、MYDOMAIN\username フォームまたは username@mydomain.example.com フォームを使用できます。

こちらも参照ください