2012-05-18 42 views
3

我一直在使用base64_encode<textarea>窗體保存html並將數據存儲在數據庫中。檢索時使用base64_decode並將數據放入文本區。如果不使用mysql_real_escape_string(),安全嗎?使用base64_encode而不是mysql_real_escape_string安全嗎?

我在使用mysql_real_escape_string時,檢索模板id$_GET參數。

templates.php?id=4

但是使用Base64保存HTML還保留任何惡意SQL代碼人們可能會在textarea的補充。到目前爲止,我沒有遇到任何問題。

這是不好的做法,使用base64而不是mysql_real_escape_string()

「錯誤的工具」?

注:我使用htmlspecialchars($text, ENT_QUOTES);爲xss。

+2

請不要使用古老的'mysql_ *'函數編寫新代碼。他們不再被維護,社區已經開始[棄用流程](http://news.php.net/php.internals/53799)。相反,您應該瞭解準備好的語句並使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/mysqli)。如果你關心學習,[這裏是一個很好的PDO相關教程](http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers)。 –

+1

你真的想要在你的數據庫中存儲base64 blob嗎?它不僅浪費空間,還會阻止您對數據庫中的數據執行任何操作。 – deceze

+0

@deceze沒關係。我不會在存儲的html上運行查詢,但是其他部分是我逃過mysql的。 – Kyle

回答

3

技術上base64_encode將永遠不會輸出任何可用於SQL注入的東西。就目前而言,這是安全的。

不過,我想使它成爲一個習慣,總是SQL逃生任何查詢中使用任何參數或總是使用參數化查詢來開始(實際上,順應時代!)。它更簡單,它很直接,當你改變你的代碼時,它不會讓你後來遇到問題。

+0

雖然,如果你透過文本/ html透明地像OP一樣,你必須注意xss漏洞。 – nos

2

是的,base64字符串可安全地在數據庫中使用。但它有一些缺點。

  • 每次進入/存在數據庫時,都需要對字符串進行編碼和解碼,而當您轉義/準備數據庫時,您只需要執行一次。
  • 你在浪費空間。 base64字符串比原始字符串大33%左右。

最好的選擇是轉移到更新的MySQL驅動程序(如mysqliPDO),並使用預準備語句。如果無論出於何種原因都無法實現,請堅持使用mysql_real_escape_string

相關問題