2012-11-13 95 views
4

我有一個插入tinyMCE的文本區域,它將包含我希望保存到數據庫中的HTML代碼。我應該使用哪種類型的數據庫中的html文本?

我想保存的HTML代碼的權利,因爲它是要能夠隨時打印,甚至可以把它寫下來到一個文件(using fopen("filename","w");)

因爲我建立我的表將使用,我不知道哪種類型的記錄應該分配給我的數據庫中的HTML文本。

我應該..:

  • 使用addslashes/stripslashes當我保存/蓋章,HTML文本?
  • or htmlencodechars/decodechars
  • 或根本沒有?
+5

在最後可能的時刻逃脫。參數化查詢以安全地插入html,然後在輸出時對其進行編碼。 –

+0

好的,但我應該使用varchar字段?或長文?甚至是一個blob?寫下來的內容將成爲期刊文章,所以它會很長,作爲其中的一個......另外,當我編碼/解碼時,我應該使用什麼? htmlencodechars或addslashes? 感謝您的信息 –

回答

2

使用HTMLPurifier從HTML中去除任何惡意的XSS代碼。 TinyMCE試圖做到這一點,但它可以通過直接發佈到腳本來繞過。

存儲數據時,使用參數化查詢/準備語句而不是轉義,以防止SQL注入。 PDOMySQLi可以做到這一點。 This is a good PDO tutorial,特別是如果你來自本機mysql_ *庫。

至於數據類型,任何字符串類型都很好,這取決於您的內容可能會有多長。

+0

非常感謝,這與arkascha answear實際上解決了我的問題,查找教程,所以我將能夠高效地使用它^^ –

1

對數據庫中的列使用類型「text」,並使用一些數據庫抽象層來爲您進行封裝,如PDO。

htmlencodechars()addslashes()都不合適。做一些編碼並不重要,但要爲給定的目的做適當的編碼類型。

+0

thx爲您的answear,我從來沒有聽說過數據庫抽象層,所以你能幫我開始嗎?我目前正在閱讀PDO的PHP手冊,但我不太明白,所以如果你能總結繩索,我會感激它...,再次感謝 –

+1

簡短摘要:通過給它一個'raw'sql模板創建一個查詢對象,這是一個帶有'placeholders'(「:valuename」)的模板,後面的佔位符被查詢對象替換。您通過交付值的聯合數組,非轉義值開始執行。取決於當前正在使用的數據庫類型的實際需要,PDO對象會爲您進行轉義。更多功能,但這些都是基礎知識。看看例子,這並不難。 – arkascha

+0

非常感謝,我會嘗試一下,看看我能做什麼,所以基本上pdo做轉義,並允許我安全地通過變量SQL注入?這是我上次用php編碼的一個很好的插件! :) –

1

使用TEXT數據類型來存儲HTML和參數化查詢與PDO或mysqli而不是addslashes

2

使用諸如varchar(5000)這樣的大型varchar意味着您將能夠進行全文索引,而在TEXT列上則無法進行全文索引。

如果使用諸如BBcode標記之類的東西會更安全些,但是如果您必須使用HTML(希望不允許客人輸入它),則會有像http://htmlpurifier.org/這樣的插件可以很好地淨化HTML。

很明顯,您可以使用標準的PHP函數對HTML進行編碼和解碼,但總會有讓某些東西通過的風險。

希望這會有所幫助。

+1

HTML代碼可能不是最好的全文索引。 –

相關問題