首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果没有上下文转义,如何使用Laravel模板引擎?

如果没有上下文转义,如何使用Laravel模板引擎?
EN

Stack Overflow用户
提问于 2022-06-02 13:18:51
回答 1查看 168关注 0票数 0

默认情况下,Blade将所有内容转义为html,而且似乎没有其他选项。

这里有一个例子,这可能是一个问题:

代码语言:javascript
复制
// We have URL that contains some user input.
$url = "https://exaple.com/path?userInput1=USER_INPUT&userInput2=USER_INPUT";

// Let's render it in the Blade template.
<a href="{{ $url }}">URL</a>

// This prevents XSS but messes up the output.
<a href="https://exaple.com/path?userInput1=USER_INPUT&amp;userInput2=USER_INPUT">URL</a>

例如,细枝支持所有这些转义策略:

  • html:为HTML上下文转义一个字符串。
  • js:为JavaScript上下文转义一个字符串。
  • css:为CSS上下文转义一个字符串。CSS转义可以应用于插入到CSS中的任何字符串,并转义除字母数字以外的所有内容。
  • url:为URI或参数上下文转义字符串。这不应用于转义整个URI;只插入一个子组件。
  • html_attr:为HTML属性上下文转义一个字符串。

刀锋怎么回事?是否至少有任何提供此功能的库?

EN

回答 1

Stack Overflow用户

发布于 2022-06-07 15:08:04

这是我到目前为止发现的。

  • html{{ $var }}非常适合在HTML上下文中转义
  • js:对于javascript,Laravel有Js::from($var)助手。它应该防止js代码注入,并保留类型,因此可以像这样使用:const _var = {!! Js::from($var) !!};
  • html_attribute:您可以使用{{ $var }}或净化输出来转义输出。我没有找到Laravel为此目的提供的任何消毒液,作为一种选择,您可以查看从Twig来的那个
  • url:URL实际上是一个很难的地方。如果浏览器是HTML的唯一使用者,则可以转义它。现代浏览器可以处理它。如果这对您不起作用,您可能要做的是先解析URL,然后URL对每个URL组件进行编码(例如使用rawurlencode)。但是请记住,用于URL解析的PHP内置函数是不完全安全,所以查看一些第三方库是有意义的。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72476975

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档