flavorじっくりコトコト煮込んだみかん2。知らないことを知りたい。2008-08-22Djangoで開発する際にセキュリティについて気をつけることdjangoWebアプリケーションを製作するときに、セキュリティについて気をつけなきゃいけないことはいろいろありますが、使用するフレームワークによって何を気にしなければいけないか、何を気にしなくてもいいのかは変わってきます。そこでDjangoでは何を考えなければいけないかを様々なセキュリティリスクについて見てみます。Djangoのバージョンは1.0alpha2とします。SQLインジェクションSQLインジェクションは、DjangoのO/Rマッパーを使っている限り、SQL文中の変数は自動的にエスケープされるので気にする必要はありません。DjangoのO/Rマッパーはよくできているので、生のSQLクエリを発行することはあまりないかと思われますが、生のSQLを使う際もプレースホルダを利用すれば問題なく処理されます。余談ですが、SQLのLIKE演算子を使うときも、O/Rマッパーを使ってフィールドを照合する際に__contains,__startswith,__endswithを使えばワイルドカードである'%'と'_'を自動的にエスケープされるので、パーセント記号とアンダースコアが含まれていることを気にしなくても大丈夫です。"&amp;"に変換されます。言ってしまえば力技ですが、おかげでほとんど気にせずにテンプレートを書くことができます。%}のようにautoescapeタグで囲えばそのまま出力されます。urlquote(username)というようにしなければいけません。クロスサイトリクエストフォージェリ(CSRF)CsrfMiddlewareクラスを使うと、レスポンスに含まれるすべてのフォームに、セッションIDとシークレット文字列から作られたハッシュをhiddenフィールドとして追加します。すべてのPOSTリクエストに対して、ハッシュが一致するかどうかをチェックし、そのリクエストが正規のフォームから作られたものであるかを確認することで、不正なリクエストを排除することができます。セッションハイジャックDjangoのSessionMiddlewareを使えば、問題ないでしょうきっと。Djangoのセッション管理では、セッションIDのやりとりにクッキーのみを使います。やる気がなくなって来た感が否めません。フォームのパラメータ改ざん適当なforms.〜Fieldを使っていれば、フィールドごとにバリデートされるのできっと大丈夫。ディレクトリトラバーサルユーザーにファイルをアップロードさせるときは気をつけたほうがいいかもね。バッファオーバーランこの対策は大変そうだね。