我目前正在使用此代码在我的网站上显示错误:
<?php
$failure = strip_tags($_GET['failure']);
if($failure!=""){
echo '<div class="error">';
echo $failure;
echo '</div>';
}
?>
然而,我很好奇这是否安全。是吗?
答案 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)
你可以(当然总是,帽子提示@DaveRandom)在htmlspecialchars()
之后做一个strip_tags
,以防止一些聪明的构造越过标签剥离器。我从来没有见过一个成功的漏洞利用成功,但它不会伤害采取额外的预防措施。
如果你这样做,这看起来很安全。
请注意,GET请求的最大大小有限制 - 1kb是安全的最大金额。
答案 2 :(得分:0)
根据您拥有的PHP版本,filter_input()
是一个不错的选择。