J'apportais une réponse généraliste (difficile de voir les choses autrement de toute manière à ce sujet).
Je vais essayer d'être plus clair (avec le cas le plus trivial), d'autant plus que les CSRF ça peut être vicieux en étant indirectes et camouflées, ce qui est présenté en fin de l'article pointé ci-dessus.
Admettons que vous soyez administrateur du site http://www.monsite.fr. Vous avez une "interface" pour supprimer les news de votre site dont l'adresse est : http://www.monsite.fr/admin/delete_news.php?id=X avec X l'id de la news à supprimer. L'accès étant protégé par un système de login/session.
Qu'une personne connaisse l'existence de ce script (on ne sait comment mais là n'est pas la question) et sache comment l'utiliser (les paramètres attendus pour réaliser cette action et la méthode HTTP employée pour ce faire) bien qu'elle n'en ait pas l'accès. Avec une simple image comme :
<img src="http://www.monsite.fr/admin/delete_news.php?id=3" />
laissée sur votre propre site ou tout autre site, il suffit que vous lisiez la ressource où elle a été introduite (le sujet d'un forum par exemple). => Pouf, vous venez de supprimer la news numéro 3 de votre site sans même vous en rendre compte (en utilisant votre propre session, restée ouverte).
Donc c'est votre site, surtout, qu'il faut protéger des CSRF (envoi des paramètres sous une forme plus adaptée pour vos scripts et/ou jetons, etc). Vous ne pouvez pas contrôler toutes les images (mais pas seulement) de provenance externe de votre propre site (ça demanderait des ressources supplémentaires sans être pour autant infaillible) et encore moins celles qui aboutissent chez vous (le referer est modifiable à volonté).
Partager