我剛剛創建了一個表單,用戶可以在html中編寫,我想知道應該爲了安全原因刪除哪些html標籤。此表單被髮送到PHP文件,所以我想通過使用strip_tags刪除不需要的標籤。發佈表單時應該刪除哪些html標籤?
到目前爲止,我唯一的想法是刪除腳本和div(以避免打破布局)標籤。
我還應該解析什麼來避免安全和佈局問題?
在此先感謝
我剛剛創建了一個表單,用戶可以在html中編寫,我想知道應該爲了安全原因刪除哪些html標籤。此表單被髮送到PHP文件,所以我想通過使用strip_tags刪除不需要的標籤。發佈表單時應該刪除哪些html標籤?
到目前爲止,我唯一的想法是刪除腳本和div(以避免打破布局)標籤。
我還應該解析什麼來避免安全和佈局問題?
在此先感謝
答案可能取決於您想實現的「安全」級別。
如果你想成爲真的安全,恐怕你必須刪除所有的html標籤。如strip_tags
的文檔所述,您允許的任何標籤可能會被style
和onmouseover
屬性濫用。 http://php.net/manual/en/function.strip-tags.php
如果您想允許格式化,我建議使用降價編輯器。您將在此的其他問題找到好點子:
https://stackoverflow.com/questions/2357022/what-is-a-good-client-side-markdown-editor
這些HTML原因代碼注入在this ariticle作爲解釋:
<SCRIPT>
:添加一個腳本,在文檔中使用。
<OBJECT>
:在文檔上放置一個對象(如applet,媒體文件等)。標籤通常包含用於檢索IE用來顯示對象的ActiveX控件的信息。
<APPLET>
:用於在文檔上放置Java小程序。它在HTML 4.0規範中被折舊以支持標籤。
<EMBED>
:將一個對象嵌入到文檔中。嵌入式對象通常是需要特殊插件才能顯示的多媒體文件。特定媒體類型及其各自的插件可能具有用於控制文件播放的附加專有屬性。結束標籤並不總是必需的,但推薦使用。該標籤被HTML 4.0規範放棄以支持該標籤。
<FORM>
:表示表單的開始和結束。
還可以看看php的htmlentities()
函數。除htmlentities()外,該函數與htmlspecialchars()
完全相同,所有將HTML字符實體等效的字符都轉換爲這些實體。查看更多關於它here。
語義真的,我想,但直接的答案應該是「所有的這些」。
你的問題應該更像「我允許哪些標籤?」。
區別在於:除了那些你希望允許的東西(來自「白名單」),而不是允許除了那些在「黑名單」上的東西外,你所有的東西都是核武器。
因此,旋轉你的問題輪,你將在正確的軌道上。
然後去閱讀關於PHP類HTMLPurifier。
新增:如果你想知道你特林保護自己什麼的真實程度,然後小心翼翼地從OWASP
這個定義看你的方式。如果你的服務器有SSI(服務器端包含)啓用,也可能想要禁止SSI包含。
SSI看起來像<!--# something here -->
。
例如,如果在某個頁面上顯示來自用戶的輸入,則<!--#exec cmd="del *.*"-->
將從服務器上刪除所有內容。
希望這有一些幫助。