15分でできるSQLインジェクション

4,161 views

Published on

2011年4月23日の minami.rb 第7回勉強会のLTで発表した「15分でできるSQLインジェクション」の発表資料です。

Published in: Technology
  • Be the first to comment

15分でできるSQLインジェクション

  1. 1. 15分でできるSQLインジェクション よしだあつし
  2. 2. 自己紹介● 名前: 吉田篤● 生年月日: 1983年1月4日● 性別: 無職系男子● 最近のお気に入り: scala Android
  3. 3. SQLインジェクション
  4. 4. SQLインジェクションとは?● Webアプリケーションの脆弱性の一つ● 「任意のSQLが実行できる」脆弱性● 危険度: 大
  5. 5. デモ データの作成 ↓ データ一覧を表示 ↓ 検索 ↓SQLインジェクション発動
  6. 6. 対策
  7. 7. DBを使わない!
  8. 8. というわけにもいかないので
  9. 9. 対策(Railsの場合)
  10. 10. 1、プレースホルダを使うparams[:user][:name] = “Guns N Roses”# ダメな例User.where("name like %#{params[:user][:name]}%")#=> SELECT "users".* FROM "users" WHERE (name likeGuns N Roses)# 良い例User.where("name like ?", "%#{params[:user][:name]}%")#=> SELECT "users".* FROM "users" WHERE (name likeGuns N Roses)
  11. 11. 2、どうしてもSQLを直接実行しないと いけない場合は値をサニタイズするclass User < ActiveRecord::Base def self.force_bang(hostname) values = sanitize_sql_array(["pending = ?","t"]) conditions = sanitize_sql_array(["emaillike ?", hostname]) update_all(values, conditions) endendUser.force_bang("hotmail.com")
  12. 12. セキュリティで大切な事
  13. 13. ほむほむ「もう誰も信じない」(権利の関係上画像は削除しました)
  14. 14. まとめ● SQLインジェクション怖いです● プレースホルダを使え!● RailsではなるべくSQLをそのまま実行する のはやめましょう● どうしてもSQLを実行しないといけないとき は全ての値をサニタイズしましょう
  15. 15. おまけ
  16. 16. mail gem にパッチが取り込まれました
  17. 17. ご清聴ありがとうございました

×