PHP:通过$_GET返回失败


PHP: Echo Failure via $_GET

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

<?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(或者无论你的主配置文件名是什么)。

为什么?

  1. 错误经常重复,这样你就可以一遍又一遍地使用它们。
  2. 如果你想把网站翻译成另一种语言,这个系统将非常有用。
  3. 如果你需要更改错误信息中的单词,你只需要在errors.php文件中更改一次。

恕我直言,在这种情况下,使用int比使用string安全得多

您可以(当然总是应该,帽提示@DaveRandom)在strip_tags之后做htmlspecialchars(),以防止一些聪明的结构通过标签剥离器。我从未见过一个有效的漏洞可以成功地做到这一点,但采取额外的预防措施总不会有坏处。

如果你做了所有这些,这看起来很安全。

请注意,GET请求的最大大小是有限制的——1kb是一个安全的最大值。

根据您使用的PHP版本,filter_input()是一个不错的选择。