###htmlspecialchars関数とは
・HTMLの特殊タグをエスケープ(変換)する関数。
ユーザーからの入力を受け取る際、XSS等悪意のあるスクリプト挿入などの攻撃を避ける。
例) & → '&' < → '<' > → '>' " → '"' ENT_NOQUOTEを設定していない時 ' → ''' ENT_QUOTES設定時
qiita.php
<?php
$sample = htmlspecialchars("<script>window.location='http://yahooooooooo.coooo.jp';</script>", ENT_QUOTES, 'utf-8');
echo $sample;
//<script>window.location='http://yahooooooooo.coooo.jp';</script>
//ブラウザ上で右クリックでページのソースを表示するとエスケープされているのがわかる。
?>
・htnlspecialcharsを使用するタイミングはDBの内容を画面に呼び出す直前にする。
・DBに保存するタイミングで使用すると変換された文字列がDBに保存されてしまい、DBの内容を「HTMLへ出力する」以外の用途に使う場合に支障が出る可能性がある。
####打つのが面倒なので関数化
qiita.php
<?php
function h($str){
echo htmlspecialchars($str, ENT_QUOTES, 'UTF-8');
}
$sample = h("<script>window.location='http://yahooooooooo.coooo.jp';</script>");
echo $sample;
//<script>window.location='http://yahooooooooo.coooo.jp';</script>
?>
#####入力フォーム等改行がある入力を受け取る場合
qiita.php
function hbr($str){
echo nl2br(h($str));
}
を追加してみた。
関数化の際、echoかreturnのどちらが適しているのかが気になっている点です。ご指摘ありましたらお願いいたします。