Toutes vos validations actuelles sont parfaitement sensées et limitent votre surface d'attaque, mais elles ne traitent pas réellement de ce qu'est la vulnérabilité CSRF.
On parle de "vulnérabilité CSRF" lorsque vous laissez votre application accepter et traiter une requête HTTP, sans confirmer au préalable que cette requête fait partie d'une conversation déjà en cours avec votre site. Toutes les requêtes HTTP (indépendamment de leur contenu) peuvent provenir d'une autre source que votre propre page Web.
N'importe qui peut créer une requête directe vers votre site contenant {"foo" : "bar"} et indiquant le mimetype application/json.
Vous devez expliquer comment vous prévoyez de vérifier que les demandes ne proviennent pas directement d'un client personnalisé, d'une session telnet ou en réponse à un contenu servi par le site de quelqu'un d'autre - ce n'est qu'alors que nous saurons si vous êtes vulnérable ou non. Si vous n'avez pas mis en place cette vérification, vous ÊTES vulnérable à TOUTES les requêtes HTTP.
Mise à jour
OK, toutes les demandes sont protégées par un login, donc nous ne devons pas trop nous inquiéter des demandes directes des clients personnalisés, à moins que les informations de login ne soient divulguées. Le principal vecteur d'attaque dont il faut se préoccuper ici est la duplication d'un utilisateur déjà connecté pour qu'il exécute une demande de changement d'état.
Vous devrez certainement protéger vos requêtes POST. À mon avis, vous pouvez tout aussi bien garder votre API cohérente et mettre la même protection sur PUT et DELETE - tout fonctionne de la même manière. Fournissez une bibliothèque client à tous les développeurs de clients afin de leur faciliter (ou, espérons-le, de les rendre transparents) la réalisation d'appels simples qui transmettront automatiquement toutes les informations requises à votre serveur.
Oui, les navigateurs ne sont pas conçus pour permettre le PUT ou le DELETE à partir de formulaires, et il se peut que vous ne connaissiez pas de moyen intersite pour le faire à l'heure actuelle, mais cela ne veut pas dire qu'il n'y a pas de moyen du tout. La semaine prochaine, le mois prochain ou l'année prochaine, quelqu'un pourrait trouver un exploit ou un bogue permettant de le faire. Le plus grand risque d'exploitation de PUT et DELETE provient d'attaques XSS, donc assurez-vous que vous ne souffrez d'aucune vulnérabilité XSS. Étant donné qu'une attaque XSS peut lire n'importe quel jeton CSRF, une vulnérabilité XSS permet également de contourner complètement les attaques de type tout La protection CSRF que vous avez mise en place, donc soyez particulièrement prudent à ce sujet.
Cependant, vous parlez également de "milliers de développeurs" qui "construisent des clients personnalisés". Si ces clients personnalisés ne sont pas implémentés en Javascript côté client, alors vous devez élargir votre compréhension aux restrictions que chacun de ces clients personnalisés impose à l'utilisateur et à l'environnement. Il peut être tout à fait facile de faire une demande PUT intersite dans le client personnalisé X.