初心者のWEBデザイン

HTML,CSS、その他WEBデザインに関する事を記述していきます

20150411143621

PHP メールフォームを作ってみる 5 htmlspecialchars

前回までにindex.phpで入力した値をPOSTを使ってcheck.phpに渡しました。

もしユーザーが誤った値を入力して、index.phpに戻ると値は消えてしまいます。
それを防ぐために今度はcheck.phpに値がある場合のみindex.phpに値を
渡す記述をします。

がその前にセキュリティー上行っておくべきことがあります。

例えば現段階の仕様でユーザーがHTMLなどのタグを入力すると
タグの効力が効いたまま値を受け渡してしまいます。
簡単なタグ程度なら良いのですが、悪意があるユーザーが
悪意ある記述をした場合に、最悪サーバーが壊れてしまったり
データを盗まれてしまいます。
それを防ぐための初歩として下記の記述を行います。

<?php 
function h($str) {
	return htmlspecialchars($str,ENT_QUOTES,'UTF-8');
}
?>

hで関数を呼び出します。カールブラケット内の操作が終わった後
引数として$strに値を戻します。

この記述をすることで特殊文字は通常の文字列として扱われるようになります。

f:id:bellsmarket:20150508040954p:plain:w500
htmlspecialcharsの記述前
f:id:bellsmarket:20150508040958p:plain:w500
htmlspecialcharsの記述後
f:id:bellsmarket:20150508041002p:plain:w500

上記のようにタグをタグとして認識しなくなります。
ですので値の受け渡しがある変数を扱う時にはページ下段で
htmlspecialcharsをかけてあげるのが好ましいです。

下記がここまでの記述です。
check.php

<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>無題ドキュメント</title>
<link rel="stylesheet" href="style.css">

</head>

<body>
<?php 
function h($str) {
	return htmlspecialchars($str,ENT_QUOTES,'UTF-8');
}

foreach($entry as $v){
	$$v = $_POST[$v];
}

$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];

?>
<div id="container">
<h1>お問い合わせフォーム</h1>
<p>入力した内容を確認してください。</p>
<table>
	<tr>
		<th>お名前:</th>
		<td><?php echo h($name); ?></td>
	</tr>
	<tr>
		<th>メールアドレス:</th>
		<td><?php echo h($email); ?></td>
	</tr>
	<tr>
		<th>お問い合わせ内容:</th>
		<td><?php echo h($message); ?></td>
	</tr>
	<tr>
		<td><a href="send.php">送信する</a></td><td><a href="index.php">修正する</a></td>
	</tr>
</table>
</form>
</div>
</body>
</html>
topへ戻る