私はExpress.jsのCSRF実装を探していましたが、この記事でJSON APIにはCRSF攻撃に対する脆弱性がないと書いてありますが、それは正しいですか?この場合、意図しない操作を実行するJSONリクエストを偽造することはできませんか?
https://github.com/pillarjs/understanding-csrf#use-only-json-apis
フォームに許可されたencTypeがapplication/x-www-form-urlencoded、multipart/form-dataおよびtext/plainそれは完全に理にかなっています...
それらは、XSS攻撃、plain/text
jsonの実施、およびOriginのポリシーが正しく設定されていない場合に依然として影響を受けます。 Stack Overflowで以前に回答されましたが、実際にはここではありません。 スタックオーバーフローに関する答えはここにあります しかし、ここではアーカイブのために概要を説明します。
フォームは2つのメソッドに制限されています:GET
およびPOST
フォームは3つのコンテンツタイプに制限されています:application/x-www-form-urlencoded
、multipart/form-data
、およびtext/plain
コンテンツタイプapplication/json
に投稿しているので、Originポリシー(同じ、クロス)でロックダウンされているXMLHTTPRequest
送信を使用する必要があるため、サーバーに依存します。
ただし、フォームが有効なJSONを生成するがコンテンツタイプをtext/plain
に設定し、サーバーがそれをチェックしない場合、すべてのサーバーがコンテンツタイプをチェックせずにデータを解析している場合、CSRFはまだ可能です。
そのため、実際にポストリクエストをチェックし、コンテンツタイプapplication/json
のみを許可し、正しいOriginポリシーを使用して、JSON APIでCSRFを防止するのはサーバー次第です。 CSRFは攻撃を防ぐために常にサーバーに依存していることに注意してください。