PHP サニタイズについて
サニタイズとは
こちらのURLに詳しく記載があった
https://webukatu.com/wordpress/blog/1635
具体的な書き方
<!DOCTYPE html>
<html lang="en">
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<p>お名前:<input type="text" name="name" size="20"></p>
<p>Mail:<input type="text" name="mail" size="20"></p>
<p>要望:<input type="text" name="youbo" size="20"></p>
<p>その他:<input type="text" name="other" size="20"></p>
<p>やる気<input type="text" name="yaruki" size="20"></p>
</form>
</body>
</html>
xss2.php
<?php
function h($val){
return htmlspecialchars($val,ENT_QUOTES);
}
$name = $_POST['name'];
$mail = $_POST['mail'];
$youbo = $_POST['youbo'];
$other = $_POST['other'];
$yaruki = $_POST['yaruki'];
?>
<html>
<head>
</head>
<body>
<p>お名前:<?= htmlspecialchars($name, ENT_QUOTES); ?></p>
<p>Mail:<?= htmlspecialchars($mail, ENT_QUOTES);?></p>
<p><?=h($youbo)?></p>
<p><?=h($other)?></p>
<p><?=$yaruki?></p>
</body>
</html>
内容はxss.phpで送信した内容をxss2.phpで表示している
この時送信するユーザー入力の値を返す記述(xss2.php内の「htmlspecialchars()」の部分。
これで囲うことで入力値が<script>alert('hit')</script>の様なタグが入ったときでもアラートが実行されず、文字列として値が出力される。
しかしこの記述毎回書くのは面倒。
そこで関数化すると便利
それがこの部分
function h($val){
return htmlspecialchars($val,ENT_QUOTES);
}
これを定義することで出力される値の記述をするときにこれまで
<p><?= htmlspecialchars($name, ENT_QUOTES); ?></p>
こうしていたところを
<p><?=h($name)?></p>
この様に省略可能になる。(関数「h」の引数が1つなので1つ値を入れればOKということ)
便利!