失敗我目前在我的網站使用此代碼顯示錯誤信息:
<?php
$failure = strip_tags($_GET['failure']);
if($failure!=""){
echo '<div class="error">';
echo $failure;
echo '</div>';
}
?>
不過,我很好奇,如果這是安全的。是嗎?
失敗我目前在我的網站使用此代碼顯示錯誤信息:
<?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']];
}
就一定要包括錯誤.php在您的config.php文件(或任何您的主要配置的文件名是)。
爲什麼?
恕我直言,這是很多安全使用整數比在這種情況下字符串。
你可以(當然總是應該,帽尖@DaveRandom)爲了防止一些聰明的建設從過去獲得的標籤剝離器做htmlspecialchars()
strip_tags
之後。我從來沒有見過這樣做的成功,但它不能傷害採取額外的預防措施。
如果你這樣做,這看起來很安全。
請注意,GET請求的最大大小有一個限制 - 1kb是最大安全數量。
儘管我同意這種觀點,即使你不是「完全偏執狂」,你也可能會這樣做 - 一個錯誤消息可以合理地包含任何'<>&` – DaveRandom 2011-12-15 17:03:23
根據您擁有的PHP版本,filter_input()
是一個不錯的選擇。
佩卡說什麼是丹迪,但更好的解決方案是定義數組或函數中的所有錯誤,然後通過傳遞錯誤發生時設置的$ _SESSION變量來訪問它們 – 2011-12-15 17:05:35
公平點@勞倫斯,雖然它是一個如果你有動態數據,實現起來更復雜一些。 – 2011-12-15 17:19:58