2月16日(月)3コマ目

今日、やったこと

  • CSRF(<form>タグのばあい)
  • SQLインジェクション
  • Spring Securityで認証アプリケーション作成

今日のホワイトボード

CSRF(<form>タグのばあい)

<form>タグは、ダウンロード元とは異なるサイト(クロスサイト)をaction属性に指定できる。

CSRF(クロスサイトリクエストフォージェリ)の脆弱性がある。

図 <form>タグにはCSRFの脆弱性がある


CSRF対策

<form></form>内にCSRFトークンを埋め込む

AmazonのサイトからダウンロードしたページにはCSRFトークンがある。このCSRFトークンはサーバー側とクライアント側で共有する。submitボタンをクリックした際に、AmazonにはCSRFトークンが送信される。トークンが一致するなら、正しいリクエストと判断できる。

悪意のあるサイトからダウンロードしたページにはCSRFトークンがない。(悪意のあるサイトはCSRFトークンに何を指定すればいいかわからない) よって、このページからAmazonにリクエストしても、CSRFトークンがないため、Amazonはリクエストを拒否する。

図 <form>タグのCSRF対策 => CSRFトークンの埋め込み


SQLインジェクション

プログラム中で、SQLをクライアントから送信されたデータを使って、文字列結合で組み立てる場合に発生する。

SQLにはパラメータマーカーを使い、SQL実行時にデータをバインドすれば発生しない(と思う)

図 SQLインジェクション


認証機能をつくる

Spring Securityを使って、ユーザー認証をする。

Spring Securityは認証・認可のフレームワーク。


DB中のユーザー情報

パスワードはハッシュ化された状態で保存。(漏洩対策)

図 パスワードのハッシュ値がDBに保存される

暗号化とハッシュ化は似ているが、もとに戻せるか、戻せないか(厳密には戻すのにすごく時間がかかる)が違う。

図 暗号化とハッシュ化の違い


ソースコード

今日は途中まで作成。

なお、DBアクセスはO/Rマッピングツールを使っている。

O/Rマッピングツールのためのアノテーションがちょこちょこ出てくるので注意。

entity/Item.java

SEC_商品マスタテーブル情報を受け渡すためのクラス。


repository/ItemRepository.java

JpaRepositoryインタフェースを継承したインタフェース。

SEC_商品マスタテーブルを操作するインタフェース。

基本的なDB操作は作成してくれる。


application.properties

resourcesフォルダ内にある。プロジェクトの定数設定用ファイル。

DB接続に必要な情報をここで定義。


次回は

認証アプリケーション作成のつづき。

このブログの人気の投稿

1月13日(火)3コマ目

2月2日(月)4コマ目

2月10日(火)3コマ目