如何转义模板中的输出
编辑本页警告:您正在浏览的文档欧宝官网下载appob娱乐下载Symfony 4.2,现已不再维护。
读本页的更新版本用于Syob娱乐下载mfony 6.2(当前稳定版本)。
如何转义模板中的输出
从模板生成HTML时,总是存在这样的风险:模板变量可能会输出非预期的HTML或危险的客户端代码。结果是,动态内容可能会破坏结果页面的HTML,或者允许恶意用户执行错误操作跨站点脚本(XSS)攻击。想想这个经典的例子:
1
你好{{name}}
假设用户输入以下代码作为他们的名字:
1
<脚本>alert (“你好!”)脚本>
没有任何输出转义,生成的模板将导致一个JavaScript警告框弹出:
1
你好<脚本>alert (“你好!”)脚本>
虽然这看起来是无害的,但如果一个用户能够做到这一点,那么同样的用户也应该能够编写JavaScript,在一个不知情的合法用户的安全区域内执行恶意操作。
这个问题的答案是输出转义。在输出转义开启时,相同的模板将无害地呈现,并逐字打印脚本
标签到屏幕:
1
你好& lt;脚本比;alert (& # 39;你好!& # 39;)& lt;/脚本比;
Twig和PHP模板系统以不同的方式处理这个问题。如果你正在使用Twig,输出转义是默认开启的,你是受保护的。在PHP中,输出转义不是自动的,这意味着需要在必要时手动转义。
输出转义在树枝
如果您正在使用Twig模板,那么默认情况下输出转义是开启的。这意味着您可以立即免受用户提交代码的意外后果的影响。默认情况下,输出转义假设为HTML输出转义内容。
在某些情况下,当呈现受信任的变量并包含不应转义的标记时,需要禁用输出转义。假设管理用户能够编写包含HTML代码的文章。默认情况下,Twig将转义文章正文。
要正常渲染,请添加生
过滤器:
1
{{article.body |生}}
类型中的输出转义也可以禁用{% block %}
区域或整个模板。有关更多信息,请参见输出逃离在Twig文档中。欧宝官网下载app
PHP输出转义
在使用PHP模板时,输出转义不是自动的。这意味着除非显式地选择转义变量,否则不会受到保护。要使用输出转义,请使用特殊escape ()
查看方法:
1
你好<?=$视图->逃避($的名字)? >
默认情况下,escape ()
方法假设变量是在HTML上下文中呈现的(因此变量被转义为HTML安全)。第二个参数允许您更改上下文。例如,要在JavaScript字符串中输出内容,可以使用js
背景:
1
var myMsg = '你好<?=$视图->逃避($的名字,js的)? >”;