繁体   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