現在、次のコードを使用してWebサイトにエラーを表示しています。
<?php
$failure = strip_tags($_GET['failure']);
if($failure!=""){
echo '<div class="error">';
echo $failure;
echo '</div>';
}
?>
しかし、これが安全かどうか興味があります。それは...ですか?
現在、次のコードを使用してWebサイトにエラーを表示しています。
<?php
$failure = strip_tags($_GET['failure']);
if($failure!=""){
echo '<div class="error">';
echo $failure;
echo '</div>';
}
?>
しかし、これが安全かどうか興味があります。それは...ですか?
このソリューションはあなたのアプローチを少し変えるでしょうが、なぜこの構造の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を含めるようにしてください。
なんで?
私見では、この場合、文字列よりもintを使用する方がはるかに安全です。
巧妙な構造がタグストリッパーを通過するのを防ぐために、後から行うことができます(もちろん、常にそうすべきです、ハットチップ@DaveRandom) 。私はこれをうまく実行しているエクスプロイトを見たことがありませんが、追加の予防策を講じることを損なうことはありません。htmlspecialchars()
strip_tags
それをすべて行うと、これは安全に見えます。
GETリクエストの最大サイズには制限があることに注意してください。1kbが安全な最大量です。
お使いのPHPのバージョンによってfilter_input()
は、まともな代替手段です。