2010-03-24 40 views
3

我想製作一個代碼片段數據庫Web應用程序。將它存儲在數據庫中的最佳方式是在HTML頁面上顯示片段時,對所有內容進行編碼以防止出現XSS?將代碼片段存儲在數據庫中

感謝您的幫助!

回答

7

數據庫與此無關;當您將它們呈現爲HTML時,您只需簡單地將片段轉義即可。

至少需要將所有&編碼爲&amp;,並將所有<字符編碼爲&lt;

但是,您的服務器端語言已經具有內置的HTML編碼功能;你應該使用它而不是重新發明輪子。有關更多詳細信息,請告訴我們您的服務器端代碼所使用的語言。

根據您以前的問題,我假設您使用的是PHP。
如果是這樣,那麼您正在尋找htmlspecialcharshtmlentities的功能。

+0

是的,我正在使用PHP。 – cskwrd 2010-03-24 02:50:42

+0

您應該通過點擊答案旁邊的向上箭頭來投票選出對您有幫助的答案。 – SLaks 2010-03-24 02:51:14

0

最好的辦法是不要將它存儲在數據庫中。我已經看到人們將存儲過程作爲一行存儲在數據庫中。只因爲你可以不意味着你應該。

+4

我不認爲他實際上是在他的數據庫中存儲他的網站的代碼,但更多的存儲代碼示例。人們可以使用代碼片段來弄清楚如何做某件事。 – Tarka 2010-03-24 02:42:32

+0

這是一個同樣殘酷的想法。如果只有某種類型的存儲與您的業務應用程序 – Woot4Moo 2010-03-24 02:45:16

+0

Slokun相關的信息的維基風格的方式,那麼您是正確的。 – cskwrd 2010-03-24 02:45:54

2

您要麼在存儲時將其轉義出來,要麼在顯示時將其轉義出來。在顯示器上執行它可能會更好,因此如果您稍後需要對其進行編輯,則不必對其進行解碼,然後對其進行重新編碼。另外,當你將它存儲在數據庫中時,你會希望確保你正確地轉義它,否則你會打開SQL注入。參數化語句是最好的方法,你根本不需要改變原始數據。

+2

我同意將它保留在數據庫中是最好的。這也意味着如果你需要改變它逃脫的方式(也許你發現了一個錯誤,或者你想添加語法突出顯示),那麼你將不必經過並重新處理已經存在的所有東西。增加體面的緩存,而且你對性能也很好。 – 2010-03-24 02:52:25

+0

對於DB **中的純文本HTML +1以及提示是SQL注入偏執狂! – lexu 2010-03-24 05:42:16

0

無論您如何存儲它,重要的是您如何在HTML表示中呈現它。我猜你在渲染字節之前需要做一些衛生處理。另一種選擇可能是將每個字符轉換爲HTML實體;這可能足以防止任何代碼或標籤被實際解釋。

作爲一個例子,用一些示例代碼查看堆棧溢出頁面的源代碼,並查看它們是如何在HTML中表示代碼的。