簡體   English   中英

如何安全地輸出包含 HTML 標簽的內容?

[英]How can I safely output content that contains HTML tags?

我有一個博客系統,用戶必須將內容輸入到 html 文本區域,包括<p>等 html 標簽。 這存儲在數據庫中。 如果此輸入隨后使用 php 回顯到網頁,我如何轉義輸出以防止 XSS,但保留 html 標簽的含義,以便正確格式化博客文章? 如果我使用htmlentities($blog_content)它會將 html 標簽打印到頁面上,所以你會看到<p>hello this is a blog</p>

這可能嗎?

您想要的是選擇性過濾或消毒。 換句話說,您希望允許某些HTML,但不允許其他可能是惡意的標簽。 這是一項非常棘手的業務,尤其是因為 HTML 語法非常復雜,而且過於簡單的清理嘗試容易出現錯誤,從而允許通過格式錯誤的 HTML 注入標簽。

如果可能,您應該完全避免讓您的用戶提交 HTML。 使用特殊的標記語言,如 Wiki 標記、Markdown、BBcodes 或類似語言。

如果您確定自己在做什么,則應該選擇一個良好的、經過良好測試的、健壯的庫,以提供此類清理功能。 HTML Purifier是我所知道的唯一符合此描述的工具。

好吧,你可以只去掉<script>標簽,使用strip_tags()這不是一個防彈解決方案,但是你可以通過允許一些標簽(基本上是粗體、斜體、鏈接等等)來提高安全性......

然后,您可以輕松打印您的內容並避免執行 javascript。

$text = '<p>Test paragraph.</p><!-- Comment --> <a href="#fragment">Other text</a>';
echo strip_tags($text);
echo "\n";

// Allow <p>, <a> and some formatting
echo strip_tags($text, '<p><a><i><em><b><strong>');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM