我在PHP實驗的社交網站合作。所以,會有很多用戶提交的數據被髮送到數據庫。
我已經編寫了一個自定義塊腳本,而這隻會阻止某些字符或關鍵字被提交。這工作,但它有問題的列表。
我聽說addslashes和mysql_real_escape_string會這樣做,但我不想做任何事情,直到我得到一些可靠的建議。
我嘗試addslashes,它會添加斜線不能,不,等等,我不想這樣。
我只想讓我的數據庫從xss,html,php和javascript攻擊中安全。有什麼建議?從PDO
我在PHP實驗的社交網站合作。所以,會有很多用戶提交的數據被髮送到數據庫。
我已經編寫了一個自定義塊腳本,而這隻會阻止某些字符或關鍵字被提交。這工作,但它有問題的列表。
我聽說addslashes和mysql_real_escape_string會這樣做,但我不想做任何事情,直到我得到一些可靠的建議。
我嘗試addslashes,它會添加斜線不能,不,等等,我不想這樣。
我只想讓我的數據庫從xss,html,php和javascript攻擊中安全。有什麼建議?從PDO
對於人誰不知道PHP或查找功能文檔:
<
,>
和&
轉換爲html實體,從而防止XSS。我真的沒有看到這裏需要解釋。
在輸出給用戶之前,您應該HTML轉義任何內容。然後當它輸出回來時它會很安全。 PHP使用htmlspecialchars。有關更多信息,請參閱What are the best practices for avoiding xss attacks in a PHP site並閱讀OWASP XSS (Cross Site Scripting) Prevention Cheat Sheet。
謝謝,我會詳細閱讀。 – Brad45 2011-04-30 22:36:46
-1表示在存儲之前逃脫。這有一些缺點:良好的模板引擎會爲你逃避。如果您的數據庫包含已經轉義的數據,這將會中斷。此外,如果您想要在非HTML環境中顯示數據,則會遇到問題,例如(明文)電子郵件。 – ThiefMaster 2011-04-30 22:38:28
@ThiefMaster:好點,在去數據庫之前刪除了有關轉義的一行。 – WhiteFang34 2011-04-30 22:41:29
到目前爲止所有好的答案,我只想補充一點,你應該確保輸入的數據來自所需的編碼 - 你還應該規範化不同類型的新換行符或脫機控制字符,我最終使用了以下功能:
function Filter($string, $control = true)
{
$string = iconv('UTF-8', 'UTF-8//IGNORE', $string);
if ($control === true)
{
return preg_replace('~\p{C}+~u', '', $string);
}
return preg_replace(array('~\r[\n]?~', '~[^\P{C}\t\n]+~u'), array("\n", ''), $string);
}
它將從字符串中移除所有無效的UTF-8數據並規範新行。所有控制字符(除標籤(\t
)和新行(\n
))都是有條紋的,並且如果$control == true
也被刪除。
PS:這不是從一個安全角度來看是非常有用的,但有助於避免GIGO。
如果沒有解釋什麼時候需要什麼,沒有多大意義。 – 2011-04-30 22:31:59
謝謝,對我有意義。感謝您的建議。 – Brad45 2011-04-30 23:07:23