😈

自作Webサイトをハッキングしてみよう

2024/08/02に公開

SQLインジェクション

  • 発生ケース
    ユーザが入力したデータを元にSQLクエリを生成するWEBアプリケーション(例:検索機能やログイン機能など)

画像:「安全なウェブサイトの作り方 - 1.1 SQLインジェクション」より

  • 攻撃手法
    攻撃者がユーザ入力の部分にSQL文を埋め込んで送信することで、データベースに対して意図しない操作を実行する。例えば、ログインフォームに' OR '1'='1という入力をすると、認証をバイパスして不正にログインできる場合があります。

  • 対策

    • プレースホルダの利用
      • SQLクエリにパラメータをバインドすることで、入力されたデータがSQL文として解釈されるのを防ぐことができます。
    • 入力値のバリデーション
      • ユーザからの入力値を適切に検証し、不正なデータが含まれていないことを確認します。特に、特殊文字やSQL予約語の使用を制限します。
    • エスケープ処理
      • ユーザからの入力をエスケープすることで、SQL文の一部として解釈されないようにします。ただし、この方法はプリペアドステートメントに比べて不完全な場合があります。
  • 発生ケースの具体例

    • ログイン機能
      • 攻撃者は、ログインフォームにSQLインジェクションを仕込み、管理者としてログインしようとします。
    • 検索機能
      • 攻撃者は、検索フォームに悪意のあるSQL文を入力し、データベースから不正に情報を取得しようとします。

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

  • 発生ケース
    個人が投稿した項目を他のユーザもみることのできるWEBサイト(2ちゃんねるなど)

画像:「安全なウェブサイトの作り方 - 1.5 クロスサイト・スクリプティング」より

  • 攻撃手法
    攻撃者はあるWebページにおいて、自分の投稿内のリンクに<script>タグを仕込みます。このリンクを他のユーザが閲覧することで、悪意のあるスクリプトが実行され、該当ユーザの個人情報などが攻撃者のサーバーに送信される可能性があります。

  • 対策

    • ページに表示する要素に対してエスケープ処理を行う
      • <, >, &などをHTMLエンティティ(&lt;など)に置き換えることで、無害化する
    • URLの入力時、http://~ or https://~ のみを許可する
      • javascript:~ をはじめとしたスクリプトを除外
    • 入力値のバリデーション
      • scriptタグを送信できないように制限をかける
    • Cookieの設定の HttpOnly を有効化
      • Javascriptからcookie情報を参照できないように設定する。これにより、XSS攻撃によるcookie情報の窃取を防ぐことができます
    • 入力されたHTMLテキストからスクリプトを含まない要素を抽出する
      • ロジックが複雑で場合によっては処理に負荷がかかる場合あり

CSRF (クロスサイトリクエストフォージェリ[1]

  • 発生ケース
    ECサイトにログインした状態で、悪質サイトにアクセスしてしまった場合


画像:「安全なウェブサイトの作り方 - 1.6 CSRF(クロスサイト・リクエスト・フォージェリ)」より

  • 攻撃手法
    ユーザのブラウザに保存されたログイン状態(主にcookie)を利用して、特定のサイトに対して許可なく<form>タグ経由でAPIコールを行います。

  • 対策

      1. CookieのSameSite属性
      • SameSite属性を設定することで、同一サイトからのリクエストのみを許可し、他サイトからのリクエストをブロックする
      1. CSRFトークンの利用
      • フォーム送信時にセッションIDがサーバー側と合致しているかどうかをチェックし、正当なリクエストかどうかを確認
脚注
  1. フォージェリ...偽造という意味 ↩︎

Discussion