Vous n'êtes pas identifié(e).
Bonsoir,
Je viens de migre un site Django de 1.1.x vers 1.2.5.
J'ai modifié le code pour le CSRF protection, cela fonctionne très bien en
Dev avec le serveur Dev de Django.
Quand j'upload sur mon serveur (webfaction) j'ai l'erreur "CSRF cookie not
set" ?
Comment est-ce possible que ca ne fonctionne plus sur le serveur de
production ?
Joel
Hors ligne
Bonjour,
Le 15 mars 2011 22:01, Joel Quinet <joel.quinet _AT_ gmail.com> a écrit :
> Je viens de migre un site Django de 1.1.x vers 1.2.5.
> J'ai modifié le code pour le CSRF protection, cela fonctionne très bien en
> Dev avec le serveur Dev de Django.
> Quand j'upload sur mon serveur (webfaction) j'ai l'erreur "CSRF cookie not
> set" ?
>
> Comment est-ce possible que ca ne fonctionne plus sur le serveur de
> production ?
>
As-tu bien mis à jour ton fichier settings.py pour la déclaration des
middleware ?
Hors ligne
Je ne sais pas si c'est en rapport mais sur les uploads en ajax (lorsque le
fichier est dans le corps du post), maintenant il faut ajouter le token dans
le header ''X-CSRFToken'' (obligatoire depuis la 1.2.5). Jusqu'à la 1.2.4,
ça passait sans rien, ce qui était sans doute un trou de sécurité.
Jean-mat
Le 16 mars 2011 07:59, Nicolas Steinmetz <nsteinmetz _AT_ gmail.com> a écrit :
> Bonjour,
>
> Le 15 mars 2011 22:01, Joel Quinet <joel.quinet _AT_ gmail.com> a écrit :
>
>
>
>> Je viens de migre un site Django de 1.1.x vers 1.2.5.
>> J'ai modifié le code pour le CSRF protection, cela fonctionne très bien en
>> Dev avec le serveur Dev de Django.
>> Quand j'upload sur mon serveur (webfaction) j'ai l'erreur "CSRF cookie not
>> set" ?
>>
>> Comment est-ce possible que ca ne fonctionne plus sur le serveur de
>> production ?
>>
>
> As-tu bien mis à jour ton fichier settings.py pour la déclaration des
> middleware ?
>
> --
> Nicolas Steinmetz
> http://www.steinmetz.fr - http://nicolas.steinmetz.fr/
>
> _______________________________________________
> django mailing list
> django _AT_ lists.afpy.org
> http://lists.afpy.org/mailman/listinfo/django
>
Hors ligne
Bonjour,
J'ai laissé le fichier settings par default de la version 1.2.5 en ce qui
concerne les middleware
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
)
Dans les templates, j'ai ajouté : <form action="" method="post">{%
csrf_token %}
Dans les views, j'ai implementé ceci.
@login_required
def index(request):
c = {}
c.update(csrf(request))
if request.method == 'POST':
....
....
....
return
render_to_response('carnet_de_route/plan_de_missions/grille_d_evaluation/grille_d_evaluation_index.html',
{'form': form}, c)
Je reçois l'exception suivante :
'dict' object has no attribute 'render_context'
lors de l'appel return render_to_response
Il me semble que j'ai implementé de la manière expliquée dans la
documentation....
Joel
Le 16 mars 2011 09:58, Jean-mathieu Grimaldi <jeanmat.grimaldi _AT_ gmail.com> a
écrit :
> Je ne sais pas si c'est en rapport mais sur les uploads en ajax (lorsque le
> fichier est dans le corps du post), maintenant il faut ajouter le token dans
> le header ''X-CSRFToken'' (obligatoire depuis la 1.2.5). Jusqu'à la 1.2.4,
> ça passait sans rien, ce qui était sans doute un trou de sécurité.
>
>
>
> Jean-mat
>
>
> Le 16 mars 2011 07:59, Nicolas Steinmetz <nsteinmetz _AT_ gmail.com> a écrit :
>
>> Bonjour,
>>
>> Le 15 mars 2011 22:01, Joel Quinet <joel.quinet _AT_ gmail.com> a écrit :
>>
>>
>>
>>> Je viens de migre un site Django de 1.1.x vers 1.2.5.
>>> J'ai modifié le code pour le CSRF protection, cela fonctionne très bien
>>> en Dev avec le serveur Dev de Django.
>>> Quand j'upload sur mon serveur (webfaction) j'ai l'erreur "CSRF cookie
>>> not set" ?
>>>
>>> Comment est-ce possible que ca ne fonctionne plus sur le serveur de
>>> production ?
>>>
>>
>> As-tu bien mis à jour ton fichier settings.py pour la déclaration des
>> middleware ?
>>
>> --
>> Nicolas Steinmetz
>> http://www.steinmetz.fr - http://nicolas.steinmetz.fr/
>>
>> _______________________________________________
>> django mailing list
>> django _AT_ lists.afpy.org
>> http://lists.afpy.org/mailman/listinfo/django
>>
>
>
> _______________________________________________
> django mailing list
> django _AT_ lists.afpy.org
> http://lists.afpy.org/mailman/listinfo/django
>
Hors ligne
Inutile de faire quoique ce soit avec le crsf dans une vue standard.
Donc le dico c à la poubelle, il faut passer en contexte
RequestContext qui inclut la protection csrf
from django.template import RequestContext
return render_to_response('my_template.html',
my_data_dictionary,
context_instance=RequestContext(request))
Plus d'info
http://docs.djangoproject.com/en/dev/ref/templates/api/#subclassing-context-requestcontext
jean-mat
Le 18 mars 2011 10:48, Joel Quinet <joel.quinet _AT_ gmail.com> a écrit :
>
> Bonjour,
>
> J'ai laissé le fichier settings par default de la version 1.2.5 en ce qui concerne les middleware
> MIDDLEWARE_CLASSES = (
> 'django.middleware.common.CommonMiddleware',
> 'django.contrib.sessions.middleware.SessionMiddleware',
> 'django.middleware.csrf.CsrfViewMiddleware',
> 'django.contrib.auth.middleware.AuthenticationMiddleware',
> 'django.contrib.messages.middleware.MessageMiddleware',
> )
>
> Dans les templates, j'ai ajouté : <form action="" method="post">{% csrf_token %}
>
> Dans les views, j'ai implementé ceci.
> @login_required
> def index(request):
> c = {}
> c.update(csrf(request))
> if request.method == 'POST':
> ....
> ....
> ....
> return render_to_response('carnet_de_route/plan_de_missions/grille_d_evaluation/grille_d_evaluation_index.html', {'form': form}, c)
>
> Je reçois l'exception suivante :
> 'dict' object has no attribute 'render_context'
> lors de l'appel return render_to_response
>
> Il me semble que j'ai implementé de la manière expliquée dans la documentation....
>
> Joel
>
> Le 16 mars 2011 09:58, Jean-mathieu Grimaldi <jeanmat.grimaldi _AT_ gmail.com> a écrit :
>>
>> Je ne sais pas si c'est en rapport mais sur les uploads en ajax (lorsque le fichier est dans le corps du post), maintenant il faut ajouter le token dans le header ''X-CSRFToken'' (obligatoire depuis la 1.2.5). Jusqu'à la 1.2.4, ça passait sans rien, ce qui était sans doute un trou de sécurité.
>>
>>
>> Jean-mat
>>
>> Le 16 mars 2011 07:59, Nicolas Steinmetz <nsteinmetz _AT_ gmail.com> a écrit :
>>>
>>> Bonjour,
>>>
>>> Le 15 mars 2011 22:01, Joel Quinet <joel.quinet _AT_ gmail.com> a écrit :
>>>
>>>>
>>>> Je viens de migre un site Django de 1.1.x vers 1.2.5.
>>>> J'ai modifié le code pour le CSRF protection, cela fonctionne très bien en Dev avec le serveur Dev de Django.
>>>> Quand j'upload sur mon serveur (webfaction) j'ai l'erreur "CSRF cookie not set" ?
>>>>
>>>> Comment est-ce possible que ca ne fonctionne plus sur le serveur de production ?
>>>
>>> As-tu bien mis à jour ton fichier settings.py pour la déclaration des middleware ?
>>>
>>> --
>>> Nicolas Steinmetz
>>> http://www.steinmetz.fr - http://nicolas.steinmetz.fr/
>>>
>>> _______________________________________________
>>> django mailing list
>>> django _AT_ lists.afpy.org
>>> http://lists.afpy.org/mailman/listinfo/django
>>
>>
>> _______________________________________________
>> django mailing list
>> django _AT_ lists.afpy.org
>> http://lists.afpy.org/mailman/listinfo/django
>
>
> _______________________________________________
> django mailing list
> django _AT_ lists.afpy.org
> http://lists.afpy.org/mailman/listinfo/django
Hors ligne
Jean-mathieu,
J'ai effectué les deux modification que tu m'as proposées.
J'ai également ajouté les context processors comme spécifé dans la doc.
TEMPLATE_CONTEXT_PROCESSORS =
("django.contrib.auth.context_processors.auth",
"django.core.context_processors.debug",
"django.core.context_processors.i18n",
"django.core.context_processors.media",
#"django.core.context_processors.static",
"django.contrib.messages.context_processors.messages")
Ca fonctionne sur ma machine de Dev avec le serveur de Dev de django mais
quand j'upload sur le serveur webfaction, j'obtiens l'erreur suivante après
avoir introduit mon nom d'utilisateur et mon mot de passe.
Joel
Forbidden (403)
CSRF verification failed. Request aborted.
Help
Reason given for failure:
CSRF cookie not set.
In general, this can occur when there is a genuine Cross Site Request
Forgery, or when Django's CSRF
mechanism<http://docs.djangoproject.com/en/dev/ref/contrib/csrf/#ref-contrib-csrf>
has not been used correctly. For POST forms, you need to ensure:
- The view function uses
RequestContext<http://docs.djangoproject.com/en/dev/ref/templates/api/#subclassing-context-requestcontext>
for the template, instead of Context.
- In the template, there is a {% csrf_token %} template tag inside each
POST form that targets an internal URL.
- If you are not using CsrfViewMiddleware, then you must use csrf_protect
on any views that use the csrf_token template tag, as well as those that
accept the POST data.
You're seeing the help section of this page because you have DEBUG = True in
your Django settings file. Change that to False, and only the initial error
message will be displayed.
You can customize this page using the CSRF_FAILURE_VIEW setting.
Le 18 mars 2011 15:38, Jean-mathieu Grimaldi <jeanmat.grimaldi _AT_ gmail.com> a
écrit :
> Inutile de faire quoique ce soit avec le crsf dans une vue standard.
> Donc le dico c à la poubelle, il faut passer en contexte
> RequestContext qui inclut la protection csrf
>
> from django.template import RequestContext
>
> return render_to_response('my_template.html',
> my_data_dictionary,
> context_instance=RequestContext(request))
>
> Plus d'info
>
> http://docs.djangoproject.com/en/dev/ref/templates/api/#subclassing-context-requestcontext
>
> jean-mat
>
> Le 18 mars 2011 10:48, Joel Quinet <joel.quinet _AT_ gmail.com> a écrit :
> >
> > Bonjour,
> >
> > J'ai laissé le fichier settings par default de la version 1.2.5 en ce qui
> concerne les middleware
> > MIDDLEWARE_CLASSES = (
> > 'django.middleware.common.CommonMiddleware',
> > 'django.contrib.sessions.middleware.SessionMiddleware',
> > 'django.middleware.csrf.CsrfViewMiddleware',
> > 'django.contrib.auth.middleware.AuthenticationMiddleware',
> > 'django.contrib.messages.middleware.MessageMiddleware',
> > )
> >
> > Dans les templates, j'ai ajouté : <form action="" method="post">{%
> csrf_token %}
> >
> > Dans les views, j'ai implementé ceci.
> > @login_required
> > def index(request):
> > c = {}
> > c.update(csrf(request))
> > if request.method == 'POST':
> > ....
> > ....
> > ....
> > return
> render_to_response('carnet_de_route/plan_de_missions/grille_d_evaluation/grille_d_evaluation_index.html',
> {'form': form}, c)
> >
> > Je reçois l'exception suivante :
> > 'dict' object has no attribute 'render_context'
> > lors de l'appel return render_to_response
> >
> > Il me semble que j'ai implementé de la manière expliquée dans la
> documentation....
> >
> > Joel
> >
> > Le 16 mars 2011 09:58, Jean-mathieu Grimaldi <jeanmat.grimaldi _AT_ gmail.com>
> a écrit :
> >>
> >> Je ne sais pas si c'est en rapport mais sur les uploads en ajax (lorsque
> le fichier est dans le corps du post), maintenant il faut ajouter le token
> dans le header ''X-CSRFToken'' (obligatoire depuis la 1.2.5). Jusqu'à la
> 1.2.4, ça passait sans rien, ce qui était sans doute un trou de sécurité.
> >>
> >>
> >> Jean-mat
> >>
> >> Le 16 mars 2011 07:59, Nicolas Steinmetz <nsteinmetz _AT_ gmail.com> a écrit
> :
> >>>
> >>> Bonjour,
> >>>
> >>> Le 15 mars 2011 22:01, Joel Quinet <joel.quinet _AT_ gmail.com> a écrit :
> >>>
> >>>>
> >>>> Je viens de migre un site Django de 1.1.x vers 1.2.5.
> >>>> J'ai modifié le code pour le CSRF protection, cela fonctionne très
> bien en Dev avec le serveur Dev de Django.
> >>>> Quand j'upload sur mon serveur (webfaction) j'ai l'erreur "CSRF cookie
> not set" ?
> >>>>
> >>>> Comment est-ce possible que ca ne fonctionne plus sur le serveur de
> production ?
> >>>
> >>> As-tu bien mis à jour ton fichier settings.py pour la déclaration des
> middleware ?
> >>>
> >>> --
> >>> Nicolas Steinmetz
> >>> http://www.steinmetz.fr - http://nicolas.steinmetz.fr/
> >>>
> >>> _______________________________________________
> >>> django mailing list
> >>> django _AT_ lists.afpy.org
> >>> http://lists.afpy.org/mailman/listinfo/django
> >>
> >>
> >> _______________________________________________
> >> django mailing list
> >> django _AT_ lists.afpy.org
> >> http://lists.afpy.org/mailman/listinfo/django
> >
> >
> > _______________________________________________
> > django mailing list
> > django _AT_ lists.afpy.org
> > http://lists.afpy.org/mailman/listinfo/django
> _______________________________________________
> django mailing list
> django _AT_ lists.afpy.org
> http://lists.afpy.org/mailman/listinfo/django
>
Hors ligne
Bizarre, vérifie le settings.py sur le site de prod, idem pour la
version de django (bien sûr que c'est identique ?)
Vérifie tes cookies côté client (effaces les cookies, et regarde ce
qui se passe avec firebug par exemple, le cookie 'csrftoken' doit être
en place dés la 1ere connexion au site)
Difficile d'en dire plus, il peut y avoir des tas de raisons, je
connais pas webfaction.
Bon week-end
Le 18 mars 2011 16:07, Joel Quinet <joel.quinet _AT_ gmail.com> a écrit :
> Jean-mathieu,
>
> J'ai effectué les deux modification que tu m'as proposées.
> J'ai également ajouté les context processors comme spécifé dans la doc.
>
> TEMPLATE_CONTEXT_PROCESSORS =
> ("django.contrib.auth.context_processors.auth",
> "django.core.context_processors.debug",
> "django.core.context_processors.i18n",
> "django.core.context_processors.media",
> #"django.core.context_processors.static",
> "django.contrib.messages.context_processors.messages")
>
> Ca fonctionne sur ma machine de Dev avec le serveur de Dev de django mais
> quand j'upload sur le serveur webfaction, j'obtiens l'erreur suivante après
> avoir introduit mon nom d'utilisateur et mon mot de passe.
>
> Joel
>
>
> Forbidden (403)
>
> CSRF verification failed. Request aborted.
>
> Help
>
> Reason given for failure:
>
> CSRF cookie not set.
>
>
> In general, this can occur when there is a genuine Cross Site Request
> Forgery, or when Django's CSRF mechanism has not been used correctly. For
> POST forms, you need to ensure:
>
> The view function uses RequestContext for the template, instead of Context.
> In the template, there is a {% csrf_token %} template tag inside each POST
> form that targets an internal URL.
> If you are not using CsrfViewMiddleware, then you must use csrf_protect on
> any views that use the csrf_token template tag, as well as those that accept
> the POST data.
>
> You're seeing the help section of this page because you have DEBUG = True in
> your Django settings file. Change that to False, and only the initial error
> message will be displayed.
>
> You can customize this page using the CSRF_FAILURE_VIEW setting.
>
>
> Le 18 mars 2011 15:38, Jean-mathieu Grimaldi <jeanmat.grimaldi _AT_ gmail.com> a
> écrit :
>>
>> Inutile de faire quoique ce soit avec le crsf dans une vue standard.
>> Donc le dico c à la poubelle, il faut passer en contexte
>> RequestContext qui inclut la protection csrf
>>
>> from django.template import RequestContext
>>
>> return render_to_response('my_template.html',
>> my_data_dictionary,
>> context_instance=RequestContext(request))
>>
>> Plus d'info
>>
>> http://docs.djangoproject.com/en/dev/ref/templates/api/#subclassing-context-requestcontext
>>
>> jean-mat
>>
>> Le 18 mars 2011 10:48, Joel Quinet <joel.quinet _AT_ gmail.com> a écrit :
>> >
>> > Bonjour,
>> >
>> > J'ai laissé le fichier settings par default de la version 1.2.5 en ce
>> > qui concerne les middleware
>> > MIDDLEWARE_CLASSES = (
>> > 'django.middleware.common.CommonMiddleware',
>> > 'django.contrib.sessions.middleware.SessionMiddleware',
>> > 'django.middleware.csrf.CsrfViewMiddleware',
>> > 'django.contrib.auth.middleware.AuthenticationMiddleware',
>> > 'django.contrib.messages.middleware.MessageMiddleware',
>> > )
>> >
>> > Dans les templates, j'ai ajouté : <form action="" method="post">{%
>> > csrf_token %}
>> >
>> > Dans les views, j'ai implementé ceci.
>> > @login_required
>> > def index(request):
>> > c = {}
>> > c.update(csrf(request))
>> > if request.method == 'POST':
>> > ....
>> > ....
>> > ....
>> > return
>> > render_to_response('carnet_de_route/plan_de_missions/grille_d_evaluation/grille_d_evaluation_index.html',
>> > {'form': form}, c)
>> >
>> > Je reçois l'exception suivante :
>> > 'dict' object has no attribute 'render_context'
>> > lors de l'appel return render_to_response
>> >
>> > Il me semble que j'ai implementé de la manière expliquée dans la
>> > documentation....
>> >
>> > Joel
>> >
>> > Le 16 mars 2011 09:58, Jean-mathieu Grimaldi
>> > <jeanmat.grimaldi _AT_ gmail.com> a écrit :
>> >>
>> >> Je ne sais pas si c'est en rapport mais sur les uploads en ajax
>> >> (lorsque le fichier est dans le corps du post), maintenant il faut ajouter
>> >> le token dans le header ''X-CSRFToken'' (obligatoire depuis la 1.2.5).
>> >> Jusqu'à la 1.2.4, ça passait sans rien, ce qui était sans doute un trou de
>> >> sécurité.
>> >>
>> >>
>> >> Jean-mat
>> >>
>> >> Le 16 mars 2011 07:59, Nicolas Steinmetz <nsteinmetz _AT_ gmail.com> a écrit
>> >> :
>> >>>
>> >>> Bonjour,
>> >>>
>> >>> Le 15 mars 2011 22:01, Joel Quinet <joel.quinet _AT_ gmail.com> a écrit :
>> >>>
>> >>>>
>> >>>> Je viens de migre un site Django de 1.1.x vers 1.2.5.
>> >>>> J'ai modifié le code pour le CSRF protection, cela fonctionne très
>> >>>> bien en Dev avec le serveur Dev de Django.
>> >>>> Quand j'upload sur mon serveur (webfaction) j'ai l'erreur "CSRF
>> >>>> cookie not set" ?
>> >>>>
>> >>>> Comment est-ce possible que ca ne fonctionne plus sur le serveur de
>> >>>> production ?
>> >>>
>> >>> As-tu bien mis à jour ton fichier settings.py pour la déclaration des
>> >>> middleware ?
>> >>>
>> >>> --
>> >>> Nicolas Steinmetz
>> >>> http://www.steinmetz.fr - http://nicolas.steinmetz.fr/
>> >>>
>> >>> _______________________________________________
>> >>> django mailing list
>> >>> django _AT_ lists.afpy.org
>> >>> http://lists.afpy.org/mailman/listinfo/django
>> >>
>> >>
>> >> _______________________________________________
>> >> django mailing list
>> >> django _AT_ lists.afpy.org
>> >> http://lists.afpy.org/mailman/listinfo/django
>> >
>> >
>> > _______________________________________________
>> > django mailing list
>> > django _AT_ lists.afpy.org
>> > http://lists.afpy.org/mailman/listinfo/django
>> _______________________________________________
>> django mailing list
>> django _AT_ lists.afpy.org
>> http://lists.afpy.org/mailman/listinfo/django
>
>
> _______________________________________________
> django mailing list
> django _AT_ lists.afpy.org
> http://lists.afpy.org/mailman/listinfo/django
>
Hors ligne