默认情况下,Blade将所有内容转义为html,而且似乎没有其他选项。
这里有一个例子,这可能是一个问题:
// 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&userInput2=USER_INPUT">URL</a>例如,细枝支持所有这些转义策略:
html:为HTML上下文转义一个字符串。js:为JavaScript上下文转义一个字符串。css:为CSS上下文转义一个字符串。CSS转义可以应用于插入到CSS中的任何字符串,并转义除字母数字以外的所有内容。url:为URI或参数上下文转义字符串。这不应用于转义整个URI;只插入一个子组件。html_attr:为HTML属性上下文转义一个字符串。刀锋怎么回事?是否至少有任何提供此功能的库?
发布于 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内置函数是不完全安全,所以查看一些第三方库是有意义的。https://stackoverflow.com/questions/72476975
复制相似问题