web-dev-qa-db-ja.com

CSRFおよびJSON API

私はExpress.jsのCSRF実装を探していましたが、この記事でJSON APIにはCRSF攻撃に対する脆弱性がないと書いてありますが、それは正しいですか?この場合、意図しない操作を実行するJSONリクエストを偽造することはできませんか?

https://github.com/pillarjs/understanding-csrf#use-only-json-apis

フォームに許可されたencTypeがapplication/x-www-form-urlencodedmultipart/form-dataおよびtext/plainそれは完全に理にかなっています...

2
DGomez

それらは、XSS攻撃、plain/text jsonの実施、およびOriginのポリシーが正しく設定されていない場合に依然として影響を受けます。 Stack Overflowで以前に回答されましたが、実際にはここではありません。 スタックオーバーフローに関する答えはここにあります しかし、ここではアーカイブのために概要を説明します。

フォームは2つのメソッドに制限されています:GETおよびPOST
フォームは3つのコンテンツタイプに制限されています:application/x-www-form-urlencodedmultipart/form-data、およびtext/plain

コンテンツタイプapplication/jsonに投稿しているので、Originポリシー(同じ、クロス)でロックダウンされているXMLHTTPRequest送信を使用する必要があるため、サーバーに依存します。

ただし、フォームが有効なJSONを生成するがコンテンツタイプをtext/plainに設定し、サーバーがそれをチェックしない場合、すべてのサーバーがコンテンツタイプをチェックせずにデータを解析している場合、CSRFはまだ可能です。

そのため、実際にポストリクエストをチェックし、コンテンツタイプapplication/jsonのみを許可し、正しいOriginポリシーを使用して、JSON APIでCSRFを防止するのはサーバー次第です。 CSRFは攻撃を防ぐために常にサーバーに依存していることに注意してください。

2
Robert Mennell