結論
状態:-
閲覧数:2,995
投稿日:2015-11-07
更新日:2018-04-26
「クロスサイトスクリプティング対策」と「SQLインジェクション対策」では、変換すべき文字や、変換後の文字が異なる
・この2つは全く別物として考える
・原則的にサニタイズはHTML表示時かMySQLのquery発行時にその都度行なう
htmlspecialchars、htmlentities、addslashes、mysql_real_escape_string、mysqli_real_escape_string
※mysqli::real_escape_string と mysqli_real_escape_string は、引数の数が異なる
・この2つは全く別物として考える
・原則的にサニタイズはHTML表示時かMySQLのquery発行時にその都度行なう
一覧
htmlspecialchars、htmlentities、addslashes、mysql_real_escape_string、mysqli_real_escape_string
関数 | 方式 | 内容 | 対象数 |
---|---|---|---|
htmlspecialchars | エンコード | 特殊文字を HTML エンティティへ変換 | 5 |
htmlentities | エンコード | 全ての HTML 文字エンティティを変換 | 約100 |
addslashes | エスケープ | クォートされるべき文字の前に バックスラッシュを挿入した文字列を返す | 4 |
mysqli_real_escape_string | エスケープ | SQL 文中で用いる文字列の特殊文字をエスケープ | 7 |
mysqli::real_escape_string | エスケープ | 接続の現在の文字セットを考慮して、SQL 文で使用する文字列の特殊文字をエスケープ | 7 |
htmlspecialchars
htmlspecialchars
掲示板やゲストブックなどでユーザが書きこんだテキストから HTML のマークアップ用文字を取り除く場合
・特殊文字を HTML エンティティへ変換
ENT_NOQUOTES が設定されていない場合
" (ダブルクォート) → "
ENT_QUOTES が設定されている場合
' (シングルクオート) → '
一覧表
読み方 | メタ文字 | 変換後 |
---|---|---|
アンパサンド | & | & |
ダブルクォート | " | " |
シングルクォート | ' | ' |
小なり | < | < |
大なり | > | > |
怠った場合に、引き起こされる可能性があるセキュリティリスク
・クロスサイト・スクリプティング
addslashes
addslashes
データベースへの問い合わせなど
一覧表
読み方 | メタ文字 | 変換後 |
---|---|---|
ダブルクォート | " | \" |
シングルクォート | ' | \' |
バックスラッシュ | \ | \\ |
NULL バイト | NUL | \NUL |
mysql_real_escape_string
mysql_real_escape_string
SQL 文中で用いる文字列の特殊文字をエスケープ
・PHP 5.5.0 で非推奨になり、PHP 7.0.0 で削除
読み方 | メタ文字 | 変換後 |
---|---|---|
ダブルクォート | " | \" |
シングルクォート | ' | \' |
バックスラッシュ | \ | \\ |
NULL バイト | \x00 | \\x00 |
改行 | \n | \\n |
カーソルを文頭へ戻す制御コード(Carriage Return) | \r | \\r |
ファイル終端を示す制御コード(End Of File) | \x1a | \\x1a |
・SQLインジェクション
mysqli::real_escape_string
mysqli::real_escape_string
接続の現在の文字セットを考慮して、SQL 文で使用する文字列の特殊文字をエスケープ
怠った場合に、引き起こされる可能性があるセキュリティリスク
・SQLインジェクション
strip_tags
基本的な使い方
$str = '<b>PHP用語</b>';
echo strip_tags($str); //PHP用語
許可するタグを指定
$str = '<div><p><span>PHPデモ</span></p></div>';
echo strip_tags($str); //PHPデモ
//許可するタグを指定
echo strip_tags($str, '<p><span>'); //<p><span>PHPデモ</span></p>
注意事項
結果的にhtmlタグを削除しているだけ
・htmlタグであると判断して削除しているわけではない
<hoge></hoge>を削除する例
$str = '<div><hoge><p><span>PHPデモ</span></p></hoge></div>';
echo strip_tags($str); //PHPデモ
//許可するタグを指定
echo strip_tags($str, '<hoge><p><span>'); //<hoge><p><span>PHPデモ</span></p></hoge>
strip_tags
文字列からHTMLタグを除去
PHP HTMLタグ PHPタグ を除去・削除したい strip_tags() | WEPICKS!