主にプログラミングに関して。Python, .NET Framework(C#), JavaScript, その他いくらか。
記事にあるサンプルやコードは要検証。使用に際しては責任を負いかねます

スポンサーサイト

                
tags:
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Python-Tornado: XSRF対策

                
 Python、TornadoでのXSRFについて。用意されているメソッドやらを使うだけでできる。

 まずサーバセッティングでクッキーにXSRF対策のクッキーを埋め込むようにするため、xsrf_cookiesオプションにTrueを入れる。
settings = {
"cookie_secret": "__TODO:_GENERATE_YOUR_OWN_RANDOM_VALUE_HERE__",
"login_url": "/login",
"xsrf_cookies": True,
}
application = tornado.web.Application([
(r"/", MainHandler),
(r"/login", LoginHandler),
], **settings)


 続いてフォームタグに{% module xsrf_form_html() %}を埋め込む(以下までのコードはドキュメントからのコピペ)。そしてRequestHandlerを継承したクラスでself.render([filename])でテンプレートにレンダーを済ませてクライアントに返す。
<form action="/new_message" method="post">
{% module xsrf_form_html() %}
<input type="text" name="message"/>
<input type="submit" value="Post"/>
</form>


 ここまでは公式ドキュメントのわかりやすいところに書いてある。
http://www.tornadoweb.org/en/stable/overview.html#cross-site-request-forgery-protection

 クッキーとhiddenでフォームに埋め込んだ_xsrfの整合を調べるには、RequestHandlerクラスでメソッドが用意されている。self.check_xsrf_cookieメソッドを呼び出せばOK。整合が取れなければエラーを出してくれる。


***
 XSRF対策のトークンをクッキーとformに埋め込む。どちらかをハッシュ化しておくべきという解説をたまに見かける。盗聴や改ざん対策らしい。ハッシュ化がどちらにも効果的には思えないのだが一応。
盗聴対策→もっとベーシックな盗聴対策をするべき。SSL通信を使う。
改ざん対策→クッキーやフォームに仕込むトークンの値は予想のつかないものにしておく。XSRF対策が施されたWebサイトへの攻撃を成功させるためにはトークンの値を知る必要がある。トークンが第三者に知られるというのはXSSや盗聴が考えられるので、まずその対策をしておく。
            

コメントの投稿

非公開コメント

プロフィール

hMatoba

Author:hMatoba
Github

最新記事
リンク
作ったものなど
月別アーカイブ
カテゴリ
タグリスト

検索フォーム
Amazon
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。