テックキャンプ71日目

kobasaです(´ω`*)
昨日は勉強仲間で集まって(リモート)エラーの解消についてあれこれ話していました。
今までも何回かリモートの集まりはあったんですけど、勉強会っぽいことは初めてでした。
「そういうところ見るんや!」とか「エディタの表示こんな風にしてるんや!」とか色々発見もあり楽しかったです。

機会があればまた勉強会したいですね!今度は助けてもらおうw

71日目の勉強内容

専門用語は苦手意識が出てしまいますね(´・ω・`)
現在は頭の片隅に置いておくくらいですすめます。

セキュリティについて

XSS(Cross Site Scripting)

悪意のあるJavaScriptのプログラム(スクリプト)をフォームに投稿する形で埋め込み、そのサイトの利用者を攻撃する手法。

対策としては、投稿内容の「”」や「<」を文字参照により、「& quot;」や「& lt;」に書き換えてスクリプトとしての意味をなさなくする。

Railsではヘルパーメソッドの<%= form_with %>を使用することで文字列として出力されるため、XSSの対策を行える。

セッションハイジャック

正規利用者ではないものが、正規利用者のセッションを取得する攻撃方法。
クッキーにはセッションをセッションIDというユーザー固有の識別番号を用いて保存している。
このセッションIDを盗み出されるとセッションハイジャックが成立し、
アプリ内で正規利用者ができることはほとんど実行可能になってしまう。

対策としては、独自でセッションIDの生成を行わないこと。
フレームワークなどのwebアプリケーション開発のツールを利用することが安全とされている。
フレームワークは指摘・改善が素早く行われることが期待できる。Railsも含まれる。

deviseはセッションIDを変更し続けることで対策している。

SCRF(Cross Site Request Forgery)

ユーザーのログイン情報を盗み出すなど、脆弱性のあるwebアプリケーションに対して
正規利用者になりすましてリクエストを送る攻撃のこと。

対策は、サーバーサイドの全てに対策を行うのではなく、重要な部分のリクエストのみ行う。
HTTPメソッドがPOSTやDELETEなどのデータベースの情報を書き換えるためのリクエストに対して対策する。

パスワード変更に関わるリクエストにも現在のパスワードを再入力させることでCSRFの対策になる。
攻撃者が知り得ないトークンを要求するようにすれば、不正リクエストによる重要な処理を防げる。
トークンとは、一度だけ使用可能なパスワードでユーザーのブラウザ上にのみ保管される。

Railsのフォームヘルパーメソッドparamsの ”〇〇_token” => のこと。
トークンが存在するのはPOST、DELETE、PATCH、PUTなどのHTTPメソッドのときのみ。重要な処理のHTTPメソッドを無理やりGETにしてはいけない。

トークンはSCRFには有効だが、他の脆弱性がある場合はトークンも盗み出されてしまう。セキュリティ対策は総合的に行う必要がある。

SQLインジェクション

webページのテキスト入力欄やURLなどにSQL文の断片を埋め込むことで、DBを改竄したり、不正に情報を入手する手法。
入力フォームから送信した値により、アプリケーションが本来想定しないSQL文を実行させ攻撃を行う。

SQL文中では「’」が文字列の終盤を意味しているので、特殊文字をエスケープして対策する。
RailsではActiveRecordのメソッドを使用する場合は、SQLインジェクションが問題になることはほとんどない。
ただし、SQL文を直接書いてレコードを取得するfind_by_sqlメソッドには脆弱性が潜んでいる。

コメント

  1. みずたーに より:

    助けられる日がくるよう、精進しなければ。。
    本当にありがとうございました!!!

    • kobasa より:

      どういたしまして〜(´ω`*)
      勉強仲間ができるのはスクールの良いところですね!
      勉強以外の面白い話も聞けましたし、定期的に集まれると良いですね!

タイトルとURLをコピーしました