我目前在我的网站上使用这个代码显示错误:
<?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(或者无论你的主配置文件名是什么)。
为什么?
- 错误经常重复,这样你就可以一遍又一遍地使用它们。
- 如果你想把网站翻译成另一种语言,这个系统将非常有用。
- 如果你需要更改错误信息中的单词,你只需要在errors.php文件中更改一次。
恕我直言,在这种情况下,使用int比使用string安全得多。
您可以(当然总是应该,帽提示@DaveRandom)在strip_tags
之后做htmlspecialchars()
,以防止一些聪明的结构通过标签剥离器。我从未见过一个有效的漏洞可以成功地做到这一点,但采取额外的预防措施总不会有坏处。
如果你做了所有这些,这看起来很安全。
请注意,GET请求的最大大小是有限制的——1kb是一个安全的最大值。
根据您使用的PHP版本,filter_input()
是一个不错的选择。