WEBプログラミング入門

PHPセキュリティ

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

& " ' < > をエスケープする。ENT_QUOTESはシングルクォートもエスケープする。
詳細はPHPマニュアル参照

.php
htmlspecialchars(変換対象, ENT_QUOTES, 'UTF-8');

クリックジャッキング

php個別のページに設定する場合、header("X-FRAME-OPTIONS: DENY");と書く。全ページに設定する場合、ドキュメントルートの.htaccessに書く。「DENY」は一切禁止で「SAMEORIGIN」「ALLOW-FROM」は一部許可する設定。フレームが必要な場合のみ個別ページに「SAMEORIGIN」「ALLOW-FROM」を設定する。
詳細はMDNマニュアル参照

.htaccess
Header set X-FRAME-OPTIONS "DENY"

設定確認

F12→Network→ファイル選択→Headersで'x-frame-options: DENY'となっていればよい。

ディレクトリトラバーサル

basename関数を使う。基本的に外部入力からファイル名の生成をしない設計にする。

OSコマンドインジェクション

外部入力からコマンドを生成しない。

CSRF(クロスサイトリクエストフォージェリ)

遷移前でセッションにtokenを埋め込み、遷移先で確認。

セッションハイジャック

ログイン直後にセッション変更

HTTPヘッダインジェクション

リクエストボディの値をリクエストヘッダに設定しない。する場合は改行コードをエスケープする。

メールヘッダインジェクション

swiftmailerなどのライブラリを使う。

SQLインジェクション

PDOのプレースホルダを使う。

関連リンク