Dans yii2, que vous utilisiez l'outil de test POSTMAN, la requête CURL en ligne de commande ou la requête ajax, vous obtiendrez toujours l'erreur http400 : Bad Request et si vous utilisez la page Web pour accéder à GET (en supprimant le POST ; restriction de verbFilter), c'est normal.
Après avoir consulté les informations, j'ai trouvé que c'est la raison de la vérification CRSF
Principe :
Cookie Hashing, permettant au serveur marquer une valeur_csrf aléatoire dans tous les formulaires envoyés au client, et en même temps enregistrer un token associé dans le COOKIE du client
Lors de la vérification, le serveur _POST() envoie une entrée _csrf cachée à chaque fois qu'il reçoit ; une requête et le COOKIE du client. Le token est comparé et vérifié
Le principe de l'attaque de l'attaquant est d'utiliser le COOKIE du client, mais l'attaquant ne peut pas obtenir le contenu spécifique du COOKIE qu'il utilise simplement (en laissant de côté. la possibilité d'attaques XSS ici, car les cookies de l'utilisateur sont facilement volés en raison des vulnérabilités XSS du site Web, ce qui représente 1 % supplémentaire. Généralement, les attaquants abandonnent lorsqu'ils voient la nécessité de calculer les valeurs de hachage ; ajoutez des jetons à l'URL d'attaque, donc la vérification échoue.
C'est peut-être la solution la plus simple, car l'attaquant ne peut pas obtenir de cookies tiers (théoriquement), donc les données du formulaire ne parviennent pas à être construites
Solution :
1.禁用CRSF验证(不推荐):'enableCsrfValidation' => false, 'components' => [ 'request' => [ 'cookieValidationKey' => '83r5HbITBiMfmiYPOZFdL-raVp4O1VV4', 'enableCookieValidation' => false, 'enableCsrfValidation' => false, ]
2. Lors de la soumission des données, transportez les informations csrf
a. Lors de l'appel du composant ActiveForm, les données soumises apporteront automatiquement _csrf
b. csrf dans l'en-tête (comme indiqué ci-dessous) et soumettez-les avec les données à soumettre
c Vous pouvez également obtenir les informations csrf via php
Yii::$app->request->csrfParam;(获取csrf-param) Yii::$app->request->csrfToken;(获取csrf-token)
Ce qui précède est le contenu de la défense Yii2.0 contre les attaques CSRF. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !