htmlspecialchars / htmlentities / addslashes / mysql_real_escape_string / mysqli_real_escape_string

セキュリティ

結論

 状態:-  閲覧数:2,995  投稿日: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

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

htmlspecialchars


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

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

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

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

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

addslashes

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

addslashes


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

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


mysql_real_escape_string

 閲覧数:693 投稿日: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

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

mysqli::real_escape_string


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

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

strip_tags

 閲覧数:572 投稿日: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インジェクション

入力 フィルタリング

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



週間人気ページランキング / 1-30 → 2-5
順位 ページタイトル抜粋 アクセス数
1 Parse error: syntax error, unexpected 'public' (T_PUBLIC) | Parse error(エラーメッセージ) 10
2 ブラウザを閉じたらセッションデータはどうなるの? | セッション 9
3 curl で Cookie を使用する 4
3 Fatal error: Access level to ▲::$△ must be protected (as in class ●) or weaker | Fatal error(エラーメッセージ) 4
3 PHPで定数を定義する方法は2種類ある / 配列定数の定義 4
4 コード例 … 「例外処理」はネストすることができる 3
4 Warning: PDO::query(): LOAD DATA LOCAL INFILE forbidden | Warning(エラーメッセージ) 3
4 http_build_queryとは? / 構文 /パラメータ 3
4 Mailer Error: SMTP connect() failed. https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting | エラーメッセージ 3
5 Fatal error: Cannot redeclare 関数名() (previously declared in ファイル名:○○) in ファイル名 | Fatal error(エラーメッセージ) 2
5 Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[28000] [1045] Access denied for user 'データベースユーザー名'@'localhost' (using password: YES)' | phpMyAdmin(データベース関連) 2
5 ( ! ) Fatal error: Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: parameter was not defined | Fatal error(エラーメッセージ) 2
5 new clone違い | 演算子 2
5 オブジェクト関係マッピング | データベース関連 2
5 array_filter | 配列 2
6 Fatal error: Uncaught Error: Call to a member function modify() on string | Fatal error(エラーメッセージ) 1
6 Fatal error: require_once(): Failed opening required 'PEAR.php' | Fatal error(エラーメッセージ) 1
6 セッション単位 | セッション 1
6 htmlspecialchars / htmlentities / addslashes / mysql_real_escape_string / mysqli_real_escape_string | セキュリティ 1
6 dirname() / (__FILE__ ) / basename( dirname( __FILE__ ) ); | 関数 1
2025/2/6 1:02 更新