【问题标题】:Rails Sanitize: Safety + Allowing EmbedsRails Sanitize:安全 + 允许嵌入
【发布时间】:2011-01-21 02:42:02
【问题描述】:

我们正在构建一个用户生成的内容网站,我们希望用户能够在其中嵌入视频、幻灯片共享等内容...任何人都可以推荐一个普遍接受的标签/属性列表,以允许在 rails 中对其进行清理会给我们提供很好的安全性,同时仍然允许大量的可嵌入内容/html 格式?

【问题讨论】:

    标签: ruby-on-rails sanitization html-sanitizing


    【解决方案1】:

    只要是关闭的,你应该可以允许对象。您甚至可以定义对象标签的实际可接受参数,以便您只允许白名单,而不能包含任意对象。

    但是,为嵌入提供一些 UI 支持可能会更好。例如,我提示用户输入 YouTube URL,然后从中派生视频的嵌入代码。

    几个好处: - 默认的 YouTube 代码不符合标准,因此我可以构建自己的对象代码 - 我可以完全控制嵌入元素包含在输出页面中的方式

    【讨论】:

      【解决方案2】:

      老实说,允许用户使用 WYSIWYG Html 编辑器可能听起来不错,但实际上它对用户和开发人员都不起作用。原因是:

      • 在不同浏览器中的行为仍然相差太大。
      • 白名单允许保护站点,但用户最终会调用并要求允许 OBJECT 标记或类似标记的另一个参数。黑名单并不安全。
      • 没有多少用户知道什么是 HTML 标签。
      • 对于用户而言,很难设置文本格式(如何告诉他们使用 HEADER 而不是 BOLD+FONT-SIZE)。
      • 一般来说,这很痛苦,如果需要,您无法真正更改网站设计,因为用户没有正确使用 HTML。

      如果我现在要做类似 CMS 的系统,我可能会使用 语义 标记。
      大多数用户很快就会习惯它,它只是纯文本(如这里在 SO)。

      您还可以生成正确的 HTML 并支持所需的标签。
      例如,如果您需要嵌入图片,您可以编写如下内容:

      我的脸:image-http://here.there/bla.gif

      这样会为你生成 HTML:

      <a class='image-link' title='My Face' href='http://here.there/bla.gif'>
        <img alt='My Face' src='http://here.there/bla.gif' />
      </a>
      

      周围有很多标记语言,因此只需选择一种更适合您的语言并添加您自己的修改即可。

      例如,GitHub 使用修改后的markdown,解析它的代码只是couple 的行数。

      一个缺点是用户需要学习该语言并且它不是所见即所得的。

      问候,
      德米特里。

      【讨论】:

      • 你是在暗示像降价这样的东西不需要任何卫生吗?
      【解决方案3】:

      有一个很棒的项目。它甚至有嵌入分析,例如只允许 youtube 嵌入

      https://github.com/rgrove/sanitize

      【讨论】:

        猜你喜欢
        • 2010-10-06
        • 2012-10-04
        • 2010-12-30
        • 2011-04-16
        • 1970-01-01
        • 1970-01-01
        • 2015-08-02
        • 2021-10-12
        • 2012-10-24
        相关资源
        最近更新 更多