-1

私の Web サイトには、テキスト領域から入力を受け取り、空の場合 (strlen = 0) とテキストが含まれている場合は別の方法で処理するフォームがあります。以下はフォームの一部です。

<form name='contact' action='contact.php' method='post'>
    ...
    Message*<br />
    <textarea name='msg' rows='10' cols='70' maxlength='2048'><?php echo $msg ?></textarea><br />
    ...
    <input type='submit' value='Send!' id='subby' name='fatk' style='height:60px; width:300px;' />
</form>

今PHPコード:

$msg = isset($_POST['msg'])?safeString($_POST['msg']):'';
$msg = substr($msg,0,2048);
if (strlen($msg) == 0)
    echo "<h1>Test failed</h1>";
else { ... }

safestring(str)メソッドは次のとおりです。

function safeString($str) {
    htmlentities($str);
    htmlspecialchars($str);
}

フォームを送信するたびに、msg テキストエリアに入力した量に関係なく、常に空であると表示されます (TEST FAILED をエコーすることにより)。また、safestring()フォームをより安全にするために関数に追加する必要があることを他に知っていますか?

4

1 に答える 1

4

から何も返していませんsafeString

それとは別に、何をするかsafeStringは冗長です (htmlentitiesは のスーパーセットでhtmlspecialcharsあり、後者は XSS から保護する役割を果たします)。

最後に、入力を受け入れるときにこのサニタイズを行うべきではなく、出力を生成するときにのみ行うべきです。

まとめると、コードは次のようになります

$msg = isset($_POST['msg']) ? $_POST['msg'] :'';
if ($msg == '')
    echo "<h1>Test failed</h1>";
else {
    echo "Received value: ".htmlspecialchars($msg);
}

入力のエンコーディングも必ずhtmlspecialchars指定する必要があります ( の 3 番目のパラメータを参照)。

于 2012-06-30T16:56:03.230 に答える