2

現在、次のコードを使用してWebサイトにエラーを表示しています。

<?php
$failure = strip_tags($_GET['failure']);
if($failure!=""){
echo '<div class="error">';
echo $failure;
echo '</div>';
}
?>

しかし、これが安全かどうか興味があります。それは...ですか?

4

3 に答える 3

5

このソリューションはあなたのアプローチを少し変えるでしょうが、なぜこの構造のerrors.phpファイルを持っていないのですか?

$error[1] = 'some error message';
$error[2] = 'some other error message';
$error[3] = '...'; // you get the point

そして、エラーとしてIDを送信するだけです。

somepage.php?failure=2

次に、通常エラーを表示する場所に次のコードを含めます。

if($_GET['failure'] && array_key_exists($_GET['failure'],$error) {
    echo $error[$_GET['failure']];
}

config.phpファイル(またはメイン構成のファイル名が何であれ)にerrors.phpを含めるようにしてください。

なんで?

  1. エラーは頻繁に繰り返されます。このようにして、エラーを何度も使用できます。
  2. サイトを別の言語に翻訳したい場合は、このシステムが非常に役立ちます。
  3. エラーメッセージの単語を変更する必要がある場合は、errors.phpファイルで一度変更する必要があります。

私見では、この場合、文字列よりもintを使用する方がはるか安全です。

于 2011-12-15T17:08:55.263 に答える
2

巧妙な構造がタグストリッパーを通過するのを防ぐために、後から行うことができます(もちろん、常にそうすべきです、ハットチップ@DaveRandom) 。私はこれをうまく実行しているエクスプロイトを見たことがありませんが、追加の予防策を講じることを損なうことはありません。htmlspecialchars()strip_tags

それをすべて行うと、これは安全に見えます。

GETリクエストの最大サイズには制限があることに注意してください。1kbが安全な最大量です。

于 2011-12-15T17:00:23.317 に答える
0

お使いのPHPのバージョンによってfilter_input()は、まともな代替手段です。

于 2011-12-15T17:10:51.860 に答える