PHP サニタイズについて

サニタイズとは

こちらのURLに詳しく記載があった

https://webukatu.com/wordpress/blog/1635

 

具体的な書き方

 

xss.php

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
 

<form method="post" action="xss3.php">
<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>
<p>勇気:<input type="text" name="yuki" size="20"></p>
<p><input type="submit" value="送信"></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'];
$yuki = $_POST['yuki'];
?>

<html>
<head>
<meta charaset='utf-8'>
</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>
<p><?=$yuki?></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ということ)

便利!