0

我想知道什么时候可以安全使用html_safe,什么时候不安全。我读到如果代码可能包含用户内容,您不想这样做。这在实践中意味着什么?

flash[:danger]="Dear #{@user.username} <br> please take a look #{view_context.link_to('here', some_path)}" <br> Your organization #{@user.organizationname} bla bla"

例如,对于这样一条消息,需要正确显示,但在这种情况下,html_safe它还包含用户输入的内容。那么使用......仍然安全吗?usernameorganizationnamehtml_safe

4

2 回答 2

3

如果您将用户内容注入到使用 html_safe 呈现的字符串中,则必须确保所有注入的内容都是sanitized

flash[:danger]="Dear #{ActionController::Base.helpers.sanitize @user.username} <br> please take a look #{view_context.link_to('here', some_path)}" <br> Your organization #{ActionController::Base.helpers.sanitize @user.organizationname} bla bla"

http://api.rubyonrails.org/classes/ActionView/Helpers/SanitizeHelper.html

于 2015-07-25T10:12:06.547 回答
1

一般来说,它不是,恶意用户可能会输入一些有害的 js 代码作为他的organizationname,并且这些代码会成为你应用程序的一部分 - 你不想要这个。这种攻击被称为跨站点脚本(XSS),你可以在这里阅读它: http ://www.jasonwieringa.com/Learning-About-XSS-Attacks-in-Rails/

正如 axel 指出的那样,您应该调用sanitize要标记的每个用户输入,因为html_safe它所做的是将所有 html 特殊字符替换为实体,因此用户浏览器不会解释任何不需要的标记或 js 代码。

于 2015-07-25T10:12:43.663 回答