17

クロスサイト リクエスト フォージェリは、今日の Web では一般的です。Google App Engine にデプロイされた自分のサイトでこれに直面しています。アクセスログを調べて知りました。私が使用できる App Engine で使用できる XSRF/CSRF ライブラリまたはその他のソリューションはありますか。そして、それは私のサイトにどのくらいの負荷を追加しますか?

4

3 に答える 3

10

basehandler の init request 関数から呼び出されるこのコードを使用します

def init_csrf(self):
    """Issue and handle CSRF token as necessary"""

    self.csrf_token = self.request.cookies.get('c')
    if not self.csrf_token:
        self.csrf_token = str(uuid4())[:8]
        self.set_cookie('c', self.csrf_token)
    if self.request.method == 'POST' and self.csrf_protect \
        and self.csrf_token != self.request.get('_csrf_token'):
        raise CsrfException('Missing or invalid CSRF token.')

Facebook の例のキャンバス アプリケーションには、crsf を処理するコードが含まれています。実際にはあまりテストしませんでしたが、FB で iframe として実行される Facebook 用のキャンバス アプリケーションがあるため、プロジェクトに含めます。通常のケースで例外を生成する場合は、すべてのリクエスト ハンドラーに false に設定できるインスタンス変数を持たせます。

まだ完全にはテストしていませんが、これは Python での Google App Engine の CRSF トークンに関する資料です。最近、私がどのように使用方法を学んでいるかを正確に確認したい場合は、私のリポジトリを複製することができます。

于 2011-12-17T13:49:15.633 に答える
6

おそらく、 Django の contrib csrf protection middlewareを使用してみることができます。AppEngine ですぐに使えるかどうかはわかりませんが、試してみる価値はあります。

于 2011-12-19T21:52:34.283 に答える
5

私はデコレータを作りました:

def csrf_protected(handler):
    def inner(self, *args, **kwargs):
        token = self.request.params.get('token')
        if token and self.session.get('csrf') == token:
            self.session['csrf'] = uuid.uuid1().hex
            handler(self, *args, **kwargs)
        else:
            self.abort(400)
    return inner

テンプレートとセッションにトークンがある

于 2013-12-04T21:24:36.197 に答える