Goセキュアコーディングガイド 02 - 入力値バリデーション

"Input Validation" from go-scp

Goセキュアコーディングガイドの入力値バリデーションの日本語意訳になります。


入力値バリデーション

Webアプリケーションのセキュリティでは、ユーザーの入力値とその関連データをチェックしないとセキュリティリスクとなります。
私たちはこれらの問題を「入力値バリデーション」と「入力値サニタイズ」という手法を使って対処します。
これらのバリデーションは、サーバーの機能によりアプリケーションの全ての層でなされるべきです。
重要な注意点は、全てのデータ検証手順は信頼できるシステム上(つまりサーバー上)でされなければなりません。

「OWASP SCPクイックリファレンスガイド」に記載されているように、開発者が「入力値
バリデーション」中に気をつけなければならない問題について記した、箇条書きによる16個のポイントがあります。
アプリケーションを開発する際に、これらのセキュリティリスクが考慮されていないことが、「インジェクション」が「OWASP Top 10」の第一位の脆弱性となっている主な理由の1つです。

ユーザーインタラクションはWebアプリケーションにおける現在の開発パラダイムの重要な要素です。Webアプリケーションのコンテンツや可能性がどんどんリッチになるにつれ、ユーザーインタラクションや送信されるデータも増加していきます。
このような状況下では「入力値バリデーション」が重要な役割を果たします。

アプリケーションがユーザーデータを処理する際、送信されたデータはデフォルトで安全ではないとみなし、適切なセキュリティチェックがは行われた後にのみ受け入れられなければなりません。
データソースもまた信頼できる・できないものとが識別されなければならず、信頼できないものはバリデーションが行われなければなりません。

このセクションでは、各テクニックの概要をGo言語でのサンプルを使って問題を説明していきます。

  • バリデーション
    • ユーザーインタラクション
      • ホワイトリスト
      • 境界値チェック
      • 文字列エスケープ
      • 数値バリデーション
    • ファイル操作
    • データソース
      • システム間の整合性チェック
      • ハッシュトータル
      • 参照整合性
      • 一意性チェック
      • テーブル探索チェック
  • ポスト・バリデーション アクション
    • 実行活動
      • アドバイザリー・アクション
      • 検証アクション
  • サニタイズ
    • 不正なUTF-8のチェック
      • 小なり(<)の実体参照への変換
      • 全タグの除去
      • 改行コード、タブ、余分なホワイトスペースの除去
      • 8進数の除去
      • URLリクエストパス


次: 01 - イントロダクション
次: 02.1 - バリデーション

 
comments powered by Disqus