web-dev-qa-db-ja.com

Ajaxを安全に行う方法は?

この質問は、このセキュリティの質問に触発されたものです https://security.stackexchange.com/questions/1707

  1. Ajaxを使用する際の脅威は何ですか? (私はセキュリティの脅威について話しているのであって、機能の欠点について話しているのではないことに注意してください)
  2. Ajaxを安全に行うにはどうすればよいですか? (例、できればPHPに例を示してください。私は CakePHP フレームワークを使用しているためです。)
15
Kim Stacks

Ajaxは単にHTTP経由でデータを送ります-それは魔法ではありません-したがって、通常のWebページで行うのとまったく同じ方法でデータを保護します-

  • 認証と承認を確認する
  • 再送信のためにブラウザーにエクスポートされたデータにソルトハッシュチェックを暗号化または追加する
  • リクエストで受け取ったデータを潜在的に危険なものとして扱う
  • 適切な場所でHTTPSを使用する
  • PHP=を使用してデータを変換し、適切な方法を使用して、そのデータを変換します(htmlentities、mysql_real_escape_string
  • スクリプトに入力されたデータを、その起源に基づいた適切な方法(json_decodeなど)を使用して変換します。
16
symcbean

AJAXの脅威は、通常のWebリクエストが直面する脅威と同じです:XSS、SQLインジェクションなど)。AJAXでは、信頼できないソースからデータをロードする場合( Webサービスの例)、サーバー上だけでなくクライアント上のデータも検証する必要があります。そうしないと、誰かがJavaScriptやその他の厄介なものを挿入する可能性があります。

AJAXは単なるHTTPリクエストであるため、通常と同じ方法でリクエストを保護します。ただし、「通常の」ことを確認する以外に、ユーザーの権限を確認してください。データをサニタイズするなど)、また、彼が本当にリクエストを行ったかどうか、または彼がだまされたかどうか(たとえば、別のページのリンク)を確認します。それを行うには、各AJAXにCSRFトークンを含めます=サーバー側でリクエストして検証します( を参照してください。CSRFフォームトークンを実装する正しい方法は何ですか )。 CSRFトークンは、通常のリクエストでも使用されます。

もう1つは、クライアント側で何を行うかに応じて、そこでデータをサニタイズすることです。それ以外の場合、攻撃者はページに有害なコードを挿入する可能性があります。これは、サードパーティからデータを取得する場合は特に重要ですが、すべての入力に対して行うのが最善です。

6
Andreas Arnold