7
votes

Problème de jeton CSRF codeigniter

J'ai fait un simple site d'inscription / newsletter, mais j'ai un problème étrange. Certaines personnes reçoivent une erreur qui dit

Une erreur a été rencontrée l'action Vous avez demandé n'est pas autorisé.

J'ai déjà essayé Google et j'ai constaté que les personnes avaient le même problème lorsque la CSRF était définie sur TRUE. Cependant, je n'arrive pas à tout le monde, juste un petit groupe de personnes. J'utilise form_open et form_close et je peux voir le champ caché (jeton).

J'utilise la dernière version de CodeDigniter 2.0.2

c'est mon Contrôleur xxx


3 commentaires

Cela a probablement besoin de cookies et / ou de javascript. Que certains qui ont l'erreur ne peuvent pas avoir la fonctionnalité nécessaire activée, donc la vérification CSFR (basée sur le jeton?) Ne passe pas. Quel composant utilisez-vous pour le CSFR?


J'ai déjà eu le même problème. Cela se produisait chaque fois qu'une forme validée est de soumettre à nouveau. Peut être quelqu'un ici a une solution.


Weird, quiconque a une solution pour cela?


6 Réponses :


1
votes

Le CSRF est valide lorsque le jeton du champ caché correspond au jeton correspondant à la cookie. Vérifiez quatre choses:

  1. n'utilise pas de sessions php natifs (session_start, etc.). Passer à la classe de session en CI. http://codeigniter.com/user_guide/libries/sessions.html

  2. vérifier cookie config in /application/config/config.php

  3. Vérification de la valeur du jeton dans votre formulaire, est-ce différent de chaque page actualisée?

  4. Essayez peut-être de télécharger la version actuelle de CI de https://bitbucket.org/ ellislab / codéigniter -acteur / téléchargements


1 commentaires

Très probablement un problème de session. J'ai eu des cauchemar avec le processus de collecte des ordures de la Session de CI et je ne sais pas qu'ils ont résolu toutes les problèmes. Surtout si le problème est difficile à répéter et à isoler à quelques personnes, je réduisais le délai d'attente de rafraîchissement de la session et voir s'il est plus facile de se reproduire.



1
votes

J'utilise ma propre aide de CSRF, car j'ai trouvé que lors de la définition de l'option dans la configuration, il joue des ravages avec mes appels AJAX.

I Utilisateur * xsrf_get_token_field () * Pour générer le champ et * xsrf_check_Token ( ) * En tant que rappel personnalisé dans ma validation de formulaire.

<< / p> xxx


1 commentaires

Aucune raison d'AJAX de causer une havoc ericlbarnes.com/post/10728867961/...



2
votes

Cela peut aider à modifier votre "sess_cookie_name" dans config.php pour vous assurer qu'il n'a pas d'espaces ni de traits de soulignement.

$config['sess_cookie_name'] = 'mycookiename';


0 commentaires

2
votes

J'ai eu le même problème: Installe totalement propre de CI 2.1.0, sur MAMP, et simplement suivre le didacticiel dans le Guide de l'utilisateur.

Après beaucoup de recherche et de googling, j'ai trouvé que dans "application / config.php", la variable $ config ["cookie_prefix '] doit toujours être définie sur vide, sinon si la protection CSRF est activée, cette erreur sera se produire.

Il est possible que d'autres problèmes soient impliqués - c'est-à-dire la bibliothèque de session, la bibliothèque de session, la protection contre la XSS, etc. - mais juste laisser le "cookie_prefix" vide semble l'avoir trié pour moi.

J'espère que cela aide les autres.


0 commentaires

1
votes
  • Vous devez mettre à jour les fichiers de sécurité principaux ou prendre le code CSRF à partir de la version actuelle de CodeDeigniter Fichier de secuirty CoreDigniter Core .

  • Vous pouvez utiliser AJAX comme suit: var cct = $ ("entrée [nom = csrf_test_name]"). Val (); $

  • CodeDigniter CSRF n'est pas de régénérer le jeton sur la page Actualiser. Il ne se regrette que sur Post Not in Get. Les testeurs de sécurité l'ont trouvé comme une vulnérabilité. Si une personne a eu une solution pour cela .. S'il vous plaît partager cela, il sera utile pour tout le monde.


0 commentaires

1
votes

Pour toute personne utilisant le codeigniter 3.0, vous pouvez procéder comme suit:

Changer P>

$config['csrf_regenerate'] = FALSE;


2 commentaires

Pour tous les Downvoters Sécurité .stackexchange.com / questions / 22903 / ...


D'accord, régénérer le jeton par demande faisant le formulaire échec lorsque vous essayez de soumettre à nouveau, au cas où l'heure de l'Internet ou dans une autre situation ..., je vous voit ..