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接続に必要な情報をここで定義。
次回は
認証アプリケーション作成のつづき。




