PHP:通过$ _GET进行回声失败

时间:2011-12-15 16:59:02

标签: php strip-tags

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

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

然而,我很好奇这是否安全。是吗?

3 个答案:

答案 0 :(得分: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文件中更改一次。
  4. 恕我直言,在这种情况下,使用整数比使用字符串要强得多 更安全。

答案 1 :(得分:2)

你可以(当然总是,帽子提示@DaveRandom)在htmlspecialchars()之后做一个strip_tags,以防止一些聪明的构造越过标签剥离器。我从来没有见过一个成功的漏洞利用成功,但它不会伤害采取额外的预防措施。

如果你这样做,这看起来很安全。

请注意,GET请求的最大大小有限制 - 1kb是安全的最大金额。

答案 2 :(得分:0)

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