编程语言
首页 > 编程语言> > python-使用户制作的HTML模板安全

python-使用户制作的HTML模板安全

作者:互联网

我想允许用户创建微小的模板,然后在Django中使用预定义的上下文进行渲染.我假设Django渲染是安全的(我曾问过有关before的问题),但是仍然存在跨站点脚本编写的风险,因此我想避免这种情况.这些模板的主要要求之一是用户应该对页面的布局有所控制,而不仅仅是其语义.我看到一些解决方案:

>允许用户使用HTML,但是在最后一步中手动过滤掉危险标签(诸如< script>和< a onclick ='..'>之类的东西.我对这个选项并不热心,因为我恐怕我可能会忽略一些标签.即使那样,用户仍然可以在< divs>上使用绝对定位来弄乱页面其余部分上的一两个东西.
>使用可产生安全HTML的标记语言.据我所知,在大多数标记语言中,我可以剥离任何html,然后处理结果.问题是大多数标记语言在布局方面都不是很强大.据我所见,即使在ReST中,也无法在Markdown中居中放置元素.这里的优点是某些标记语言已被详细记录,用户可能已经知道如何使用它们.
>提出一些专有的标记.我在这里看到的缺点几乎全部归为专有一词.

因此,总结一下:是否存在一些安全,简单的方法来“纯化” HTML(防止xss),或者存在一种相当普遍的标记语言,可以对布局和样式进行一些控制.

资源:

> My earlier question about Django templates
> Class names in markdown.

解决方法:

有一个基于PHP的HTML purifier,我本人还没有使用过它,但是听说过非常好的东西.他们承诺很多:

HTML Purifier is a standards-compliant
HTML filter library written in
PHP. HTML Purifier will not only remove all malicious
code (better known as XSS) with a thoroughly audited,
secure yet permissive whitelist,
it will also make sure your documents are
standards compliant, something only achievable with a
comprehensive knowledge of W3C’s specifications.

即使它不是基于Python的,也值得一试.更新:@Matchu发现了一个基于Python的替代方案,看起来也不错.

但是,您会遇到很多非常困难的情况,只是考虑一下Flash嵌入.另外,恶意使用“位置:绝对”极其困难(存在位置:“相对”可以达到相同的效果,但它也是完全合法的布局工具.)也许要看一看-例如-eBay允许,以及不允许吗如果有人有必要的经验,可以从数百万个示例中了解什么是危险,什么不是,那么他们就可以了.

在eBay上的相关资源:

> HTML & JavaScript示例
> Site Interference尚不清楚,但是什么才被禁止,什么被过滤

根据我的发现,他们似乎没有发布内部HTML黑名单,但是如果找到了禁止的代码,则会输出一条错误消息. (这可能是他们的明智之举,但不幸的是,就此问题而言.)

标签:security,xss,markup,html,python
来源: https://codeday.me/bug/20191024/1918698.html