サニタイズ脳?
某所にて以下のようなコードを見つけてしまった。
<?php $name = htmlspecialchars($_post["name"], ent_quotes); $mail = htmlspecialchars($_post["mail"], ent_quotes); $mail = mb_convert_kana($mail, "a"); $sub = htmlspecialchars($_post["sub"], ent_quotes); $freeans = htmlspecialchars($_post["freeans"], ent_quotes); $check = htmlspecialchars($_post["check"], ent_quotes); if(!(($check == "1") || ($check == "0"))){ $error = "変数checkが予測されている値ではありません。"; } //入力チェック if(strlen($name) == "0"){ $error = "氏名を入力してください。"; }if(strlen($mail) == "0"){ $error = "メールアドレスを入力してください。"; }if(preg_match("/^[^@]+@([-a-z0-9]+\.)+[a-z]{2,}$/",$mail)){ $error = "メールアドレスの形式が正しくありません。"; }if($check == "0"){ $error = "個人情報の取り扱いについてに同意してください。"; } if(count($error)){ exit; } //入力情報をメールで送信 if (mb_send_mail("hoge@example.com", $sub, $final, $from)){ }else{ $error = "ご記入頂いた情報の転送に失敗しました。"; } ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html lang="ja"> <head> <body> <form method="post" action="<?=$_server["php_self"]?>"> <p>氏名:</p> <input class="form" type="text" name="name" value="<?=$name?>" /> <p>返信用メールアドレス:</p> <input class="form" type="text" name="mail" value="<?=$mail?>" /> <p>件名:</p> <input class="form" type="text" name="sub" value="<?=$sub?>" /> <p>お問い合わせ内容:</p> <textarea class="form" name="freeans" rows="4" cols="40"><?=$freeans?></textarea> <input name="check" type="checkbox" value="1" <?if($check == "1"){echo"checked";}?> />個人情報の取り扱いについて同意する。<br> <input type="submit" name="send" value="送信" /> </form> </body>
これって、XSSの対策はhtmlspecialchars()使えばいいという知識だけがあって、何のためにやるのかを理解してないんだろうなぁ。いろいろ脆弱性対策の解説はあるけど、実際のコードではどうすればいいのか?ってのが抜けているのかもしれないなぁとこれを見て思った。