2011-12-15 76 views
2

失败我目前在我的网站使用此代码显示错误信息:

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

不过,我很好奇,如果这是安全的。是吗?

+0

佩卡说什么是丹迪,但更好的解决方案是定义数组或函数中的所有错误,然后通过传递错误发生时设置的$ _SESSION变量来访问它们 – 2011-12-15 17:05:35

+0

公平点@劳伦斯,虽然它是一个如果你有动态数据,实现起来更复杂一些。 – 2011-12-15 17:19:58

回答

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']]; 
} 

就一定要包括错误.php在您的config.php文件(或任何您的主要配置的文件名是)。

为什么?

  1. 错误经常重复,这样您可以反复使用它们。
  2. 如果您想将网站翻译成其他语言,该系统将非常有帮助。
  3. 如果您需要更改错误消息中的单词,您只需在errors.php文件中更改一次即可。

恕我直言,这是很安全使用整数比在这种情况下字符串。

2

你可以(当然总是应该,帽尖@DaveRandom)为了防止一些聪明的建设从过去获得的标签剥离器做htmlspecialchars()strip_tags之后。我从来没有见过这样做的成功,但它不能伤害采取额外的预防措施。

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

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

+0

尽管我同意这种观点,即使你不是“完全偏执狂”,你也可能会这样做 - 一个错误消息可以合理地包含任何'<>&` – DaveRandom 2011-12-15 17:03:23

0

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