2

我目前使用以下代码在我的网站上显示错误:

<?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 文件中更改一次。

恕我直言,在这种情况下使用整数比使用字符串要安全得多

于 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 回答