我正在开发一个博客评论包,我想让用户使用 Markdown 发布一些代码。
我正在使用 symfony2、TWIG 和KNP Markdown 捆绑包 https://github.com/KnpLabs/KnpMarkdownBundle用于解析
{{ post.content|markdown }}
实际上,内容已经经过 Markdown 解析(<code>
<p>
...) 但是如果我的内容中有一些 HTML 代码,例如:
Some content
``` <script>alert("hello world");</script> ```
该代码未转义,并且我收到一条警报消息。
请有人解释一下我该如何处理 XSS 问题? (foo|raw
and foo|escape
正在破坏解析)
正如@sjagr 暗示的那样,你最好编写自己的树枝扩展。曾几何时,我遇到了类似的问题,并且刚刚编写了一个简单的扩展来对其进行排序,这非常简单易行。
新树枝标签:
{{ post.content|yourNewTag }}
新的树枝扩展类:
namespace Car\BrandBundle\Twig;
class YourNewTagExtension extends \Twig_Extension
{
public function yourNewTagFilter($param)
{
// Escape your content as you wish with some logic and return it
return $escaped;
}
public function getFilters()
{
return array(new \Twig_SimpleFilter('yourNewTag', array($this, 'yourNewTagFilter')));
}
public function getName()
{
return 'yourNewTag_extension';
}
}
CONFIG:
services:
car.twig.yourNewTag_extension:
class: Car\BrandBundle\Twig\YourNewTagExtension
tags:
- { name: twig.extension }
EDIT:
TWIG:
{% set someContent = '<script>alert("hello world");</script>' %}
{{ someContent|yourNewTag }}
如果您不想转义特定标签,则使用允许的标签 http://php.net/manual/en/function.strip-tags.php使用 strip_tags() 函数进行标记。
public function yourNewTagFilter($param)
{
$escaped = strip_tags($param);
// Do something else as well if you want
return $escaped;
// This will print alert("hello world"); as output in your webpage
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)