导轨消毒:安全 +允许嵌入

发布于 2024-08-22 18:58:22 字数 122 浏览 5 评论 0原文

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

We're building a user generated content site where we want to allow users to be able to embed things like videos, slideshares, etc... Can anyone recommend a generally accepted list of tags / attributes to allow in rails sanitize that will give us pretty good security, while still allowing a good amount of the embedable content / html formatting?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

幸福不弃 2024-08-29 18:58:22

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

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

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

As long as is turned off, you should be able to allow objects. You might even be able to to define the actual acceptable parameters of object tags, so that you only allow a whitelist, and abitrary objects cannot be included.

However, it may be better to provide some UI support for embedding. For example, I prompt the user for a YouTube URL and then derive the embed code for the video from that.

Several benefits:
- the default YouTube code is not standards compliant so I can construct my own Object code
- I have complete control over the way embedded elements are included in the output page

洛阳烟雨空心柳 2024-08-29 18:58:22

老实说,允许用户使用所见即所得的 Html 编辑器听起来不错,但在实践中,它对用户和开发人员来说都效果不佳。原因是:

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

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

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

我的脸:图片-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 ,解析它的代码只是一个 几行

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

问候,
德米特里。

Honestly saying allowing users to use WYSIWYG Html editors might sound good, but in practice it just doesn't work well for both users and developers. The reasons are:

  • Still too different behavior in different browsers.
  • Whitelist allows to secure site, but users will end up calling and asking to allow another parameter for OBJECT tag or similar. Blacklists are just not secure.
  • Not many users know what HTML tag is.
  • For users it is hard to format text (how can you tell them to use HEADER instead of BOLD+FONT-SIZE).
  • Generally it is pretty painful and you cannot really change the site design if needed because of users did not properly use HTML.

If I would be doing CMS-like system now, I would probably go with semantic markup.
Most users, get used to it quickly and it is just plain text (as here at SO).

Also YOU can generate proper HTML and support needed tags.
For example if you need to embed picture you might write something like:

My Face:image-http://here.there/bla.gif

Which would generate HTML for you like this:

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

There are plenty of markup languages around, so just pick the one is more appropriate to you and add your own modifications.

For example, GitHub uses modified markdown and the code to parse it is just a couple of lines.

One disadvantage is that users need to learn the language and it is NOT WYSIWYG.

Regards,
Dmitriy.

陪你搞怪i 2024-08-29 18:58:22

有一个很棒的项目可以做到这一点。它甚至具有嵌入分析功能,仅允许 YouTube 嵌入,例如

https://github.com/rgrove/sanitize

There's a great project for this. It even has embed-analysis to only allow youtube embeds, for example

https://github.com/rgrove/sanitize

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文