簡體   English   中英

轉義以防止XSS的快捷方式

[英]shortcut to escaping to prevent XSS

我剛剛發現我的網站(html / php)容易受到XSS攻擊。
除了手動將htmlspecialchars手動添加到我發送到網頁的每個變量中之外,還有什么方法可以清理我的數據(可能會丟失一些,從而仍然容易受到攻擊)?

不,沒有捷徑。 數據轉義始終需要根據具體情況進行; 不僅涉及HTML,而且涉及其他任何文本格式(SQL,JSON,CSV等)。 “技巧”是使用工具,不需要您考慮太多,因此可以讓您“錯過”某些東西。 如果您只是將字符串echo為其他字符串,則說明您是在裸機級別上工作,並且確實需要付出很多自覺的努力才能逃避一切。 通常公認的替代方法是使用一種模板語言,該模板語言會隱式地轉義所有內容。

例如, Twig

PHP語言很冗長,在輸出轉義時變得非常冗長:

 <?php echo $var ?> <?php echo htmlspecialchars($var, ENT_QUOTES, 'UTF-8') ?> 

相比之下,Twig的語法非常簡潔,使模板更具可讀性:

 {{ var }} {{ var|escape }} {{ var|e }} {# shortcut to escape a variable #} 

為了安全起見,您可以全局啟用自動轉義,也可以為部分代碼啟用自動轉義:

 {% autoescape true %} {{ var }} {{ var|raw }} {# var won't be escaped #} {{ var|escape }} {# var won't be doubled-escaped #} {% endautoescape %} 

這仍然可以讓您用腳射擊,但效果要好得多。

還有一個步驟是PHPTAL

 <div class="item" tal:repeat="value values"> <div class="title"> <span tal:condition="value/hasDate" tal:replace="value/getDate"/> <a tal:attributes="href value/getUrl" tal:content="value/getTitle"/> </div> <div id="content" tal:content="value/getContent"/> </div> 

它要求您僅編寫有效的HTML即可編譯模板,並且模板引擎完全了解HTML語法,並將以DOM級別而不是字符串形式處理所有用戶數據。 這將HTML降級為純粹的序列化格式(無論如何應為純序列化),該格式由序列化程序生成,序列化程序唯一的工作就是將面向對象的數據結構轉換為文本。 無法通過錯誤的轉義來弄亂該語法。

暫無
暫無

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

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