J'ai une application à une seule page, qui est fondamentalement un consommateur à mon API qui authentifie à l'aide de l'en-tête Authorization
. Maintenant parce que je fais un rendu côté serveur, j'ai besoin d'authentifier sur La demande initiale, qui signifie Je dois utiliser des cookies pour stocker le jeton d'authentification.
Maintenant, autant que je sache, CSRF fonctionne comme ceci dans un site Web typique:
/delete-account
qui authentifie avec des cookiesexample.com
, mettre un <img href="http://mywebsite.com/delete-account">
(ou quoi que ce soit pour a POST)Cependant, à moi, il semble que cela soit impossible pour les attaques de CSRF de se produire dans le cas d'un spa, même si le jeton d'authentification est envoyé en tant que cookie. La procédure normale est un peu comme:
/account
Authorization
en-tête.Maintenant, dans une attaque CSRF:
<img href="/account">
Je veux dire que je ne peux pas penser à une manière que je puisse être vulnérable à la CSRF dans cette situation, même si j'utilise des cookies pour l'authentification, et aussi loin que je le comprise, les attaques de la CSRF ne peuvent pas gratter les données de pages Web, ainsi de retour sensible. Les données n'auraient pas d'importance, tant qu'elle ne déclenche pas une action.
Donc, ma question est que c'est bien de ne pas mettre en œuvre une sorte de protection de la CSRF dans ce cas? J'ai tellement peur d'avoir une question de sécurité à ce sujet.
Maintenant, si l'utilisateur souhaite supprimer leur compte, ils pourraient appuyer sur le bouton, qui enverrait une demande à l'API qui authentifie uniquement les demandes de
Authorization
en-tête.
En fin de compte, il envoie une demande d'exécution d'une action qui doit être authentifiée d'une manière ou d'une autre. Et, puisque vous utilisez l'en-tête d'autorisation de l'authentification, cela empêche la CSRF, sauf si vous utilisez HTTP Basic Auth ou [~ # ~ # ~ # ~] . Ces jetons d'authentification sont envoyés dans chaque demande similaire aux cookies.
Je veux dire que je ne peux pas penser à une manière que je puisse être vulnérable à la CSRF dans cette situation, même si j'utilise des cookies pour l'authentification, et aussi loin que je le comprise, les attaques de la CSRF ne peuvent pas gratter les données de pages Web, ainsi de retour sensible. les données n'auront pas d'importance, tant qu'elle ne déclenche pas une action
Il existe des situations que vous pourriez vous trouver vulnérables au CSRF, voici quelques-uns;
-> J'avais récemment rencontré la même chose. La demande aurait besoin de cookies ou d'authentification. Étant donné que les cookies sont toujours envoyés, vous êtes supposé être authentifié et votre demande est traitée en vous laissant vulnérable à la CSRF en supposant que votre application permet d'envoyer un jeton d'autorisation de n'importe quel domaine.
-> J'ai vu un certain nombre d'applications récupérer des jetons d'un point d'extrémité prédéfini qui peut être lu en quelque sorte. Certaines possibilités sont, JSONP, CORS, CROSSDDOMAIN.XML, JSON Pijacking, etc. Cela conduit à nouveau au CSRF.
même si j'utilise des cookies pour l'authentification
C'est toujours vulnérable, il vous suffit de jouer avec la demande finale qui est une demande d'API dans votre cas.
Donc, ma question est que c'est bien de ne pas mettre en œuvre une sorte de protection de la CSRF dans ce cas? J'ai tellement peur d'avoir une question de sécurité à ce sujet
En fait, oui. En outre, assurez-vous de vos domaines blanchissants qui peuvent apporter une demande à votre API et de retourner Access-Control-Allow-Credentials: false
. Ceci, à mon avis, le rend assez sûr contre la CSRF- Considérant les points mentionnés ci-dessus.
Premièrement, il est important de comprendre ce qui suit: Vous devez mettre en œuvre quelque chose pour authentifier un utilisateur et mettre en œuvre quelque chose pour authentifier une demande (anti-CSRF). L'attaque CSRF utilise une session d'une victime, donc si votre valeur d'en-tête Authorization
est identique à toute session, votre application pourrait être vulnérable à une attaque CSRF, car votre application ne valide qu'une session d'utilisateur, elle doit Validate une demande et cela est possible en utilisant un jeton avec les fonctionnalités suivantes:
Premièrement, vous devez valider la session utilisateur, s'il s'agit d'un utilisateur valide et de ses autorisations ou son rôle, après cela, vous devez valider la demande via le jeton, s'il s'agit d'un jeton valide, vous pouvez permettre la demande.
J'espère que cette information vous aide.