可能重複:
Best way to prevent SQL Injection in PHP保存HTML數據庫 - ヶ輛
我的網站上我有一些HTML內容,用戶有時必須數據庫保存。什麼是安全的方式來做到這一點(我不希望我的數據庫處於危險之中,或者稍後會從數據庫中調用該代碼的用戶)。
所以我讀的是:
使用htmlentities在數據庫中的數據保存和html_entity_decode將數據從數據庫中進行解碼。這是否足夠安全,還是應該使用別的東西?
可能重複:
Best way to prevent SQL Injection in PHP保存HTML數據庫 - ヶ輛
我的網站上我有一些HTML內容,用戶有時必須數據庫保存。什麼是安全的方式來做到這一點(我不希望我的數據庫處於危險之中,或者稍後會從數據庫中調用該代碼的用戶)。
所以我讀的是:
使用htmlentities在數據庫中的數據保存和html_entity_decode將數據從數據庫中進行解碼。這是否足夠安全,還是應該使用別的東西?
假設您使用字符串轉義和/或預處理語句,HTML標記不會對您的數據庫造成任何損害。將HTML標記顯示給用戶時,會帶來危險,就像有人向您要顯示的標記中注入了不雅的HTML,然後您的手上就會發生XSS攻擊。
如果您不是在逃避或使用準備好的語句,那麼幾乎所有來自外部的數據都可能是危險的。
我還沒有聽說過「prerpared語句」,但我發現這個函數: 'function make_safe($ variable){ \t $ variable = stripslashes($ variable); $ variable = mysql_real_escape_string(trim($ variable)); \t $ variable = htmlspecialchars($ variable); return $ variable; }' 這是否足夠逃脫? – SomeoneS 2012-07-29 09:10:24
很可怕!不要使用它。 – GordonM 2012-07-29 09:10:59
爲什麼?那麼它應該看起來如何? (我曾用這個代碼清理用戶註冊數據):s – SomeoneS 2012-07-29 09:13:33
你可能想看看PHP函數mysql_real_escape_string()
...更多在這個帖子:strip_tags enough to remove HTML from string?
下面是一個例子...
// scrub string ... call with sanitize($blah,1) to allow HTML
function sanitize($val, $html=0) {
if (is_array($val)) {
foreach ($val as $k=>$v) $val[$k] = sanitize($v, $html);
return $val;
} else {
$val = trim($val);
if (!$html) {
$val = strip_tags($val);
$pat = array("\r\n", "\n\r", "\n", "\r");
$val = str_replace($pat, '<br>', $val); // newlines to <br>
$pat = array('/^\s+/', '/\s{2,}/', '/\s+\$/');
$rep = array('', ' ', '');
$val = preg_replace($pat, $rep, $val); // remove multiple whitespaces
}
return mysql_real_escape_string($val); // escape stuff
}
}
嘛,我不僅對數據庫的擔憂,也用於從數據庫中顯示html。 – SomeoneS 2012-07-29 09:11:53
這是[一個完全不同的問題](http://stackoverflow.com/questions/3129899/what-are-the-common-defenses-against-xss)(以及在將內容插入HTML文檔之前解決的問題,而不是就在將內容插入數據庫之前)。 – Quentin 2012-07-29 09:14:32