htmlspecialchars / htmlentities / addslashes / mysql_real_escape_string / mysqli_real_escape_string

セキュリティ

結論

 状態:-  閲覧数:3,137  投稿日:2015-11-07  更新日:2018-04-26  
「クロスサイトスクリプティング対策」と「SQLインジェクション対策」では、変換すべき文字や、変換後の文字が異なる
・この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
※mysqli::real_escape_string と mysqli_real_escape_string は、引数の数が異なる

htmlspecialchars

 閲覧数:838 投稿日:2015-11-07 更新日:2015-11-14 

htmlspecialchars


掲示板やゲストブックなどでユーザが書きこんだテキストから HTML のマークアップ用文字を取り除く場合
・特殊文字を HTML エンティティへ変換

ENT_NOQUOTES が設定されていない場合
" (ダブルクォート) → "

ENT_QUOTES が設定されている場合
' (シングルクオート) → '

一覧表
読み方 メタ文字 変換後
アンパサンド & &
ダブルクォート " "
シングルクォート ' '
小なり < &lt;
大なり > &gt;

怠った場合に、引き起こされる可能性があるセキュリティリスク
・クロスサイト・スクリプティング

addslashes

 閲覧数:704 投稿日:2015-11-07 更新日:2015-11-12 

addslashes


データベースへの問い合わせなど

一覧表          
読み方 メタ文字 変換後
ダブルクォート " \"
シングルクォート ' \'
バックスラッシュ \ \\
NULL バイト NUL \NUL


mysql_real_escape_string

 閲覧数:749 投稿日:2015-11-07 更新日:2015-11-11 

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

 閲覧数:798 投稿日:2015-11-08 更新日:2015-11-12 

mysqli::real_escape_string


接続の現在の文字セットを考慮して、SQL 文で使用する文字列の特殊文字をエスケープ

怠った場合に、引き起こされる可能性があるセキュリティリスク
・SQLインジェクション

strip_tags

 閲覧数:631 投稿日:2018-04-26 更新日:2018-04-26 

基本的な使い方


$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!


SQLインジェクション

入力 フィルタリング

コメント投稿(ログインが必要)



週間人気ページランキング / 5-24 → 5-30
順位 ページタイトル抜粋 アクセス数
1 PHPにおけるメソッドのオーバーライドについて /「引数の数や型は、親クラスのメソッドと完全に一致していなければなりません。」とは具体的にどういう意味ですか? 5
2 http_build_queryとは? / 構文 /パラメータ 4
2 Parse error: syntax error, unexpected 'public' (T_PUBLIC) | Parse error(エラーメッセージ) 4
3 セッション管理が必要な理由は、HTTPプロトコルには状態を保持する機能がないため | セッション 3
3 htmlspecialchars / htmlentities / addslashes / mysql_real_escape_string / mysqli_real_escape_string | セキュリティ 3
3 ブラウザを閉じたらセッションデータはどうなるの? | セッション 3
4 ( ! ) Fatal error: Uncaught PDOException: SQLSTATE[22001]: String data, right truncated: 1406 Data too long for column | Fatal error(エラーメッセージ) 2
4 set_error_handler | 例外処理(制御構造) 2
4 $this | クラスとオブジェクト 2
4 Fatal error(エラーメッセージ) カテゴリー 2
4 PHPで定数を定義する方法は2種類ある / 配列定数の定義 2
4 Warning: session_write_close(): Failed to write session data (user) | Warning(エラーメッセージ) 2
4 ( ! ) Warning: Declaration of xxxx should be compatible with | エラーメッセージ 2
4 ( ! ) Fatal error: Uncaught Abraham\TwitterOAuth\TwitterOAuthException: {"errors":[{"code":32,"message":"Could not authenticate you."}]} | Fatal error(エラーメッセージ) 2
4 インポートするデータを受信できませんでした。ファイル名が送信されていないか、ファイルサイズが PHP の設定で許可された最大値を超えています。FAQ 1.16 をご覧ください | エラーメッセージ 2
4 Fatal error: require_once(): Failed opening required 'PEAR.php' | Fatal error(エラーメッセージ) 2
4 Fatal error: Uncaught Wrench\Exception\HandshakeException: No accept header receieved on handshake response in ★★★ headless-chromium-php/vendor/wrench/wrench/lib/Wrench/Protocol/Protocol.php | エラーメッセージ 2
4 Fatal error: Uncaught Error: Call to a member function modify() on string | Fatal error(エラーメッセージ) 2
4 可変変数 | 変数 2
4 クロージャ | 関数 2
2025/5/31 1:01 更新