BottleのCSRF対策がIE、Safariだと動かない
BottleではCSRF対策にbottle_utils.csrf
が用意されています
組み込みはとっても簡単で
@app.post('/') @csrf_token def index(): return dict(token=request.csrf_token) @app.post('/hoge') @csrf_protect def hoge(): redirect('/success')
@csrf_token
でトークンを発行しCookieに保存してくれ、@csrf_protect
では発行したトークンの整合性チェックをしてくれます
ChromeとFirefoxは問題なく動くのですが、IEとSafariはsubmitすると発行したトークンがCookieから消えてしまいます
bottle-utils/csrf.py at master · Outernet-Project/bottle-utils · GitHubのCookie登録ロジックが
response.set_cookie(token_name, token, path=path, secret=secret, max_age=expires)
になっているのを
response.set_cookie(token_name, token, secret=secret)
path
とmax_age
の指定をなくすことでCookieから消えずにCSRF対策ができました
もともとのソースにおかしいところはないと思うんだけどなんでだろう・・・