クライアントをREST APIに送信するcontent-type
を検証するように勧められるのはなぜですか?.
OWASPは REST Security Cheat Sheet で述べています:
新しいデータをPOSTまたはPUTするとき、クライアントは受信データのContent-Type(例:application/xmlまたはapplication/json)を指定します。サーバーはContent-Typeを想定しないでください。 Content-Typeヘッダーとコンテンツが同じタイプであることを常に確認する必要があります。 Content-Typeヘッダーがないか、予期しないContent-Typeヘッダーがあると、サーバーは406 Not Acceptable応答でコンテンツを拒否します。
彼らは、欠けている検証がどのように悪用される可能性があるかを本当に述べていることは決してありません。もちろん、データパーサーのために入力を検証する方が良いですが、ヘッダーは攻撃者によってとにかく偽装される可能性がありますよね?
なぜcontent-type
検証が提案され、欠落している検証がどのように悪用される可能性があるのですか?
まず、攻撃者は常にコンテンツタイプを偽装することはできません。たとえば、REST APIがCookieを使用してセッショントークンを保持するWebアプリをサポートしている場合、攻撃者はCORS(クロスオリジンXHR)を使用するか、HTMLフォームを自動送信して、被害者が攻撃者のページにアクセスしたときにサービス。攻撃者のサイト(Access-Control-Allow-Header:Content-Typeに対するCORS権限がない)からクロスサイトリクエストを行う場合、攻撃者はContent-Typeヘッダー。ただし、アプリケーションがassumesである場合、コンテンツタイプがCORSでデフォルトで許可されていない場合(JSONなど)、ヘッダーを検証しない場合、攻撃者はcanプリフライトされていない、デフォルトで許可された、フォームで許可されたコンテンツタイプのいずれかを使用してリクエストを送信し、JSON(またはその他の)パーサーで受け入れられるようにします。もちろん、理想的には、 -CSRF保護も同様ですが、実際には他のコンテンツtyも許可しているのに、「JSONのみを許可し、サードパーティのサイトにJSONを送信させないので安全だ」と考える人もいます。リクエスト本文も有効なJSONである限り、PES。
ユーザーがファイルをアップロードできるようにする場合(常に慎重に行う必要がある場合)に問題が発生することもあります。許可するファイルの種類を制限しても、アップロードしたファイルの種類が想定されているものであるかどうかを実際に確認しないと、さまざまな種類の問題が発生する可能性があります(アップロードしたファイルの処理方法によって異なります)。異なるファイルタイプを使用して異なることを行う場合は、ユーザーが許可されたタイプの1つのファイルを指定したこと、およびアップロードされたファイルがそのタイプに対して有効であることの両方を確認する必要があります。