Security 在Smarty模板中将字符串替换为html标记
我想用Smarty模板中的html标记替换搜索查询,但我遇到了一个问题 当我在SmartySecurity 在Smarty模板中将字符串替换为html标记,security,replace,smarty,xss,Security,Replace,Smarty,Xss,我想用Smarty模板中的html标记替换搜索查询,但我遇到了一个问题 当我在Smartyreplace()函数中使用html标记时,我得到一个错误 这是我用html标记替换搜索查询的代码 {$tools[x].tool_title|replace:$q:'<b>$q</b>'} {$tools[x].tool_title | replace:$q:'$q'} 您需要使用双引号(使用变量值-否则将被视为原始字符串),并且需要使用nofilter 对于以下代码: {a
replace()
函数中使用html标记时,我得到一个错误
这是我用html标记替换搜索查询的代码
{$tools[x].tool_title|replace:$q:'<b>$q</b>'}
{$tools[x].tool_title | replace:$q:'$q'}
您需要使用双引号(使用变量值-否则将被视为原始字符串),并且需要使用nofilter
对于以下代码:
{assign var="q" value="sample"}
{assign var="text" value="This is sample text"}
{$text|replace:$q:"<b>$q</b>" nofilter}
{assign var="q" value="sample"}
{assign var="text" value="This is sample text <script>alert('hello');</script>"}
{$text|replace:$q:"<b>$q</b>" nofilter}
{assign var="q" value="sample"}
{assign var="text" value="This <b>is</b> sample text <script>alert('hello');</script>"}
{$text|escape|replace:$q:"<b>$q</b>" nofilter}
{assign var=“q”value=“sample”}
{assign var=“text”value=“这是示例文本”}
{$text |替换:$q:$q“nofilter}
页面源中的输出为:
This is <b>sample</b> text
这是示例文本
然而,你需要知道这可能是潜在的危险。考虑下面的代码:
{assign var="q" value="sample"}
{assign var="text" value="This is sample text"}
{$text|replace:$q:"<b>$q</b>" nofilter}
{assign var="q" value="sample"}
{assign var="text" value="This is sample text <script>alert('hello');</script>"}
{$text|replace:$q:"<b>$q</b>" nofilter}
{assign var="q" value="sample"}
{assign var="text" value="This <b>is</b> sample text <script>alert('hello');</script>"}
{$text|escape|replace:$q:"<b>$q</b>" nofilter}
{assign var=“q”value=“sample”}
{assign var=“text”value=“这是示例文本警报('hello');”}
{$text |替换:$q:$q“nofilter}
它将显示JavaScript警报,因为页面源现在是:
This is <b>sample</b> text <script>alert('hello');</script>
这是示例文本警报(“hello”);
但是,您似乎可以使用以下代码对其进行操作:
{assign var="q" value="sample"}
{assign var="text" value="This is sample text"}
{$text|replace:$q:"<b>$q</b>" nofilter}
{assign var="q" value="sample"}
{assign var="text" value="This is sample text <script>alert('hello');</script>"}
{$text|replace:$q:"<b>$q</b>" nofilter}
{assign var="q" value="sample"}
{assign var="text" value="This <b>is</b> sample text <script>alert('hello');</script>"}
{$text|escape|replace:$q:"<b>$q</b>" nofilter}
{assign var=“q”value=“sample”}
{assign var=“text”value=“这是示例文本警报('hello');”}
{$text | escape | replace:$q:“$q”nofilter}
其页面来源为:
This <b>is</b> <b>sample</b> text <script>alert('hello');</script>
此bis/b示例文本scriptalert(';你好';)/剧本
因为首先使用转义
修饰符转义$text
变量中的所有内容,然后在安全输入时执行替换