😈
自作Webサイトをハッキングしてみよう
SQLインジェクション
- 発生ケース
ユーザが入力したデータを元にSQLクエリを生成するWEBアプリケーション(例:検索機能やログイン機能など)
画像:「安全なウェブサイトの作り方 - 1.1 SQLインジェクション」より
-
攻撃手法
攻撃者がユーザ入力の部分にSQL文を埋め込んで送信することで、データベースに対して意図しない操作を実行する。例えば、ログインフォームに' OR '1'='1
という入力をすると、認証をバイパスして不正にログインできる場合があります。 -
対策
- プレースホルダの利用
- SQLクエリにパラメータをバインドすることで、入力されたデータがSQL文として解釈されるのを防ぐことができます。
- 入力値のバリデーション
- ユーザからの入力値を適切に検証し、不正なデータが含まれていないことを確認します。特に、特殊文字やSQL予約語の使用を制限します。
- エスケープ処理
- ユーザからの入力をエスケープすることで、SQL文の一部として解釈されないようにします。ただし、この方法はプリペアドステートメントに比べて不完全な場合があります。
- プレースホルダの利用
-
発生ケースの具体例
- ログイン機能
- 攻撃者は、ログインフォームにSQLインジェクションを仕込み、管理者としてログインしようとします。
- 検索機能
- 攻撃者は、検索フォームに悪意のあるSQL文を入力し、データベースから不正に情報を取得しようとします。
- ログイン機能
XSS (クロスサイトスクリプティング)
- 発生ケース
個人が投稿した項目を他のユーザもみることのできるWEBサイト(2ちゃんねるなど)
画像:「安全なウェブサイトの作り方 - 1.5 クロスサイト・スクリプティング」より
-
攻撃手法
攻撃者はあるWebページにおいて、自分の投稿内のリンクに<script>タグを仕込みます。このリンクを他のユーザが閲覧することで、悪意のあるスクリプトが実行され、該当ユーザの個人情報などが攻撃者のサーバーに送信される可能性があります。 -
対策
- ページに表示する要素に対してエスケープ処理を行う
-
<
,>
,&
などをHTMLエンティティ(<
など)に置き換えることで、無害化する
-
- URLの入力時、
http://~
orhttps://~
のみを許可する-
javascript:~
をはじめとしたスクリプトを除外
-
- 入力値のバリデーション
- scriptタグを送信できないように制限をかける
- Cookieの設定の
HttpOnly
を有効化- Javascriptからcookie情報を参照できないように設定する。これにより、XSS攻撃によるcookie情報の窃取を防ぐことができます
- 入力されたHTMLテキストからスクリプトを含まない要素を抽出する
- ロジックが複雑で場合によっては処理に負荷がかかる場合あり
- ページに表示する要素に対してエスケープ処理を行う
[1])
CSRF (クロスサイトリクエストフォージェリ- 発生ケース
ECサイトにログインした状態で、悪質サイトにアクセスしてしまった場合
画像:「安全なウェブサイトの作り方 - 1.6 CSRF(クロスサイト・リクエスト・フォージェリ)」より
-
攻撃手法
ユーザのブラウザに保存されたログイン状態(主にcookie)を利用して、特定のサイトに対して許可なく<form>タグ経由でAPIコールを行います。 -
対策
-
- CookieのSameSite属性
- SameSite属性を設定することで、同一サイトからのリクエストのみを許可し、他サイトからのリクエストをブロックする
-
- CSRFトークンの利用
- フォーム送信時にセッションIDがサーバー側と合致しているかどうかをチェックし、正当なリクエストかどうかを確認
-
-
フォージェリ...偽造という意味 ↩︎
Discussion