【问题标题】:Python and Django. Remove all js from htmlPython 和 Django。从html中删除所有js
【发布时间】:2013-04-25 16:22:41
【问题描述】:

我想显示用户键入的 html(来自 WYSIWYG)。

但是我在从 html 中删除 js 时遇到了一些问题。

这是我的看法:

def bad_view(request):
    # in real project we got it from user
    bad_html = '<p onclick="alert(0)">:((</p><script>alert(0);</script>'
    return render(request, 'template.html', {'bad_html': bad_html})

我的模板中的代码:

{{ bad_html|safe }}

bad_html 应该是这样的&lt;p onclick=""&gt;:((&lt;/p&gt;

从这个 html 中删除所有 js 的最佳方法是什么?

对于删除&lt;script&gt;,我可以使用正则表达式,但是 onclick 处理程序(和其他 js 处理程序)呢?

感谢您的建议!

【问题讨论】:

  • 您不能考虑要删除什么。您必须考虑允许什么。它更安全。
  • 搜索“python html sanitizer”,选择你最喜欢的。但安托约是对的。尽可能少地允许,积极地。 (如,在单个属性及其值级别列入白名单。)
  • 改变这个:bad_html = '&lt;p onclick="alert(0)"&gt;:((&lt;/p&gt;&lt;script&gt;alert(0);&lt;/script&gt;bad_html = '&lt;p&gt;:((&lt;/p&gt;' :)

标签: javascript python html django wysiwyg


【解决方案1】:

我推荐使用bleach python库,它旨在处理各种特殊情况,并为您的问题提供完整的解决方案

http://bleach.readthedocs.org/en/latest/index.html

【讨论】:

  • 谢谢!你真的帮了我
【解决方案2】:

我可以为 django https://www.djangopackages.com/grids/g/forms/ 推荐一个预构建的解决方案吗? 大多数都包含某种形式的过滤器示例。实际上,我自己也在研究 TinyMCE。

更多信息在这里Using safe filter in Django for rich text fields

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-11
    • 2017-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-30
    • 2012-01-07
    相关资源
    最近更新 更多