1

POST メソッドを使用して単純な HTML フォームを作成しているだけですが、残念ながら CSRF 検証エラーが見つかりました。

これは、ローカルホストで POST メソッドを使用する単純な html フォームです。関連するクロス サイトはありません。を使用して間違いなく修正できましたcsrf_tokenが、なぜdjangoが私にそれを求めているのかまだわかりません..

ここにはリダイレクト/ iframe は含まれていません...

では、なぜこれが起こっているのでしょうか?? これはすべての人にとって正常ですか??

# Also tried using RequestContext(request) but there isn't any change in the error

#settings.py 
'django.middleware.csrf.CsrfViewMiddleware' in MIDDLEWARE_CLASSES

#views.py 

# url for home page is "" i.e, http://127.0.0.1:8000/
def HomePage (request):
    if request.method == "POST":
        form = myForm(request.POST)
        if form.is_valid():
            data = form.cleaned_data
            context = { "myForm" : myForm(choices),
                        "values" : data,
                       }
            return render_to_response("home.html", context)
    else:
        form = myForm(choices)
    context = {"myForm" : form}
    return render_to_response("home.html", context)   


# home.html 

<div id="pingmeeForm">
            <form action="" method="post">
                <table>
                    {{myForm.as_table}}
                </table>
                <input name="enter" type="submit" value="enter"/>
            </form>
            {{values}}
</div>

# forms.py

class myForm (forms.Form):

    def __init__(self, my_choices,*args, **kwargs):
        super(myForm, self).__init__(*args, **kwargs)
        self.fields['Friends'] = forms.ChoiceField(choices=my_choices)

    message = forms.CharField()
4

2 に答える 2

8

ポスト リクエストを行う場合、通常はサーバーの状態を変更します。サーバーの状態を変更する場合、他のサイトがそうするのを許可したくありません。サーバーでポストリクエストを発行する他のサイトから保護するには、csrf 保護を追加します。したがって、解決策は(imho)Csrf保護を削除することではありません。状況に応じて、次の 2 つのいずれかになります。

  1. 投稿リクエストは状態を変更しません。その場合はgetリクエストにしてください。
  2. 投稿リクエストによって状態が変わります。CSRFが必要です。
于 2012-08-09T12:52:53.840 に答える
0

表示されたが表示されなかったエラーメッセージは、何が間違っているのかを正確に説明しています:

の代わりに、ビュー関数がRequestContext テンプレートに使用しContextます。

于 2012-08-09T12:49:55.560 に答える