2011-12-15 74 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()是一個不錯的選擇。