3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ポートフォリオ製作中、セキュリティ対策について学んだこと

Posted at

はじめに

某マッチングアプリにて”SQLインジェクション”世間が賑わっていた際に、自分のRailsで作ったポートフォリオは問題ないだろうかと思い、学習を兼ねて色々調べた際の備忘録となります。

参考文献

セッションハイジャック

概要
ログイン情報が入ったcookieを盗むことで、そのユーザーになりすましログインができる
対応策
SSLサーバ証明書を取得しHTTPSでの通信を行えるように対応。
また、HTTPでアクセスしたユーザーに対しては、HTTPSにリダイレクトするよう設定。

nginx.conf
server {
  listen 80;
  server_name  _;
  return 301 https://$host$request_uri;
}

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

概要
imgのソース属性に、"http://www.webapp.com/project/1/destroy"などを埋め込み、www.webapp.comにログイン状態のユーザーがその画像を閲覧すると、projectの1番が削除されてしまう
対応策
DBを書き換える動作などにはGETを使用しないことで対応

また、Railsにはデフォルトで、Railsで生成されるすべてのフォームとAjaxリクエストに対しセキュリティトークンが自動的に含まれるため、外部から送信が来た場合、そのトークンがマッチしない判定になるため例外が発生する。

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

概要
サイト上のフォームにスクリプトタグなどを埋め込み、悪意のあるコードを実行させる攻撃
対応策
Railsではデフォルトでエスケープする仕様のため、意図的に解除していない限りは問題なし
しかし、改行の反映はデフォルトのままではできないため、以下内容にて対応

simple_format(h(schedule.content))

SQLインジェクション

概要
フォームなどで、悪意のあるSQL文を打つことで、データを不正に入手したり削除したりする攻撃
対応策
RailsではActiverecordを使用して実行していれば、Rails側で対策をしているので問題なし。
しかし、whereメソッドでは手動でエスケープもしくは、配列やハッシュで文字を渡す対応策は必要。

--検索フォーム入力内容
" a' OR WHERE employee_id = 1 "

WHERE (title LIKE '%a\' OR WHERE employee_id = 1%') 
-- 自動的にバックスラッシュが'についている
3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?