【问题标题】:How to sanitize html blob uploads in python in Google App Engine?如何在 Google App Engine 中清理 python 中的 html blob 上传?
【发布时间】:2018-06-11 03:33:37
【问题描述】:

如果将 HTML 上传到 Google App Engine 并打算在 iframe 中提供服务,那么清理它的最佳方法是什么(例如删除脚本和其他恶意 html)?

我在想

        reader = blobstore.BlobReader(binfo.key())
        value = reader.read()
        newHtml = lxml.html.clean.Cleaner().clean_html (value)
        #save newHtml as the blob in google cloud store to be served.

我想知道是否有更好的方法来做到这一点,非常感谢任何帮助。

注意:如果有一种方法可以移除锚点或使锚点(或源)非相对且安全的 http 等(或完全禁止),那也会很棒。

【问题讨论】:

    标签: python google-app-engine sanitization


    【解决方案1】:

    这可能是一个很难解决的具有挑战性的问题,因为可以通过多种方式将恶意内容注入 HTML。 script 元素可能是最知名/最常见的,但 forminputimg 元素也可能被滥用。还可以通过事件处理程序将恶意 JS 包含在几乎任何元素中。 More information about XSS from OWASP,让您开始。

    由于您使用的是 Python,因此这里有一些用于清理 HTML 的库,可能对您有用。

    无论如何,在 iframe 中托管用户提供的 HTML 是防止恶意内容访问您托管的应用程序的一种方法(尽管您可能希望采取措施防止 iframe 突破),但是您可能希望向您的用户明确指出,托管在那里的内容并不总是可信的。

    希望这会有所帮助!

    【讨论】:

    • 非常感谢。我正在使用 lxml.clean,它去掉了很多,似乎是一种流行的消毒剂。但我也会检查你提到的其他人。顺便说一句,当您说“iframe 突破”时,您是什么意思?此外,我正在考虑对 iframe 进行“沙盒化” - 在这种情况下通常会推荐吗?
    • 是的,sandboxed iframes 应该让你能够锁定更多东西。你也可以考虑设置X-Frame-Options,如果它们适合你的用例。以下是更多信息:* Clickjacking Defense Cheat Sheet * Recent SO thread about frame-busting
    猜你喜欢
    • 2010-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多