PR時のセキュリティレビュー観点

はじめに

プライベートな環境に忘れ去られし文章の第二弾。以下、お読みになる際の留意事項です

  1. 基本的には参考ページをサマっただけの内容です
  2. 去年の8月に作ったものなので、ちょっと古いかも
  3. 文言がところどころ自分向けにカスタマイズされてます
  4. [重要]セキュリティのプロではないので、あまり過信は禁物でお願いします。というか、むしろ教えてくだださいまし

0. 前提

  • Django使ってる

1. TL;DR

  1. ユーザ入力をそのままcmdしたり、sqlしたりするのを避ける
  2. HTMLはエスケープしてるのを確認する
  3. テンプレートはcsrf_tokenタグ使ってるかどうか、レスポンスをRequestContextでレンダリングしてるかを見る

2. 毎度きっちり見る

OSコマンド・インジェクション

  1. シェル(cmd.exeなど)を起動可能な言語機能の利用を避ける
  2. 外部からの命令文をそのままコマンドラインにインジェクションさせない

クロスサイトスクリプティング

  • Webページに出力するデータのエスケープ処理をみる

クロスサイトリクエストフォージェリ(CSRF)

  1. ミドルウェアを有効にする
  2. csrf_tokenタグを使用する
    <form method="post">{% csrf_token %}
    https://docs.djangoproject.com/ja/2.2/ref/csrf/
  3. RequestContext
    • RequestContextでレスポンスをレンダリングする
    • render() 、汎用ビューもしくは contrib アプリケーションを使う場合はすでに CSRF 対策はなされている

1番はこんなのを仕込む感じです

MIDDLEWARE_CLASSES = (
‘django.middleware.clickjacking.XFrameOptionsMiddleware’
)

バッファオーバーフロー攻撃

  • んー、わからない
  • 静的解析して、怪しいところを見つけるぐらい?

3. 大抵の場合、設定で済む

クリックジャッキング

MIDDLEWARE_CLASSES = (
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
)

SQLインジェクション

  • ORマッパーを使っていれば基本的に問題ない
  • ただし、生のSQLを書く場合は気をつけること。ORマッパーを使っていれば問題ない

セッションハイジャック

  • DjangoだとSessionMiddlewareを使っていれば、問題なかろう
  • Djangoのセッション管理では、セッションIDのやり取りにクッキーのみを使う

出典

https://www.trendmicro.com/ja_jp/security-intelligence/research-reports/threat-solution/csrf.html
https://qiita.com/mejileben/items/39d897757d5c3a904721
https://qiita.com/wanko5296/items/142b5b82485b0196a2da
https://cybersecurity-jp.com/cybersecurity-guide/14651