Believe you can

If you can dream it, you can do it.

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では発行したトークンの整合性チェックをしてくれます

ChromeFirefoxは問題なく動くのですが、IESafariはsubmitすると発行したトークンがCookieから消えてしまいます

bottle-utils/csrf.py at master · Outernet-Project/bottle-utils · GitHubCookie登録ロジックが

response.set_cookie(token_name, token, path=path, secret=secret, max_age=expires)

になっているのを

response.set_cookie(token_name, token, secret=secret)

pathmax_ageの指定をなくすことでCookieから消えずにCSRF対策ができました
もともとのソースにおかしいところはないと思うんだけどなんでだろう・・・