Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何以安全的方式使用html_safe?_Ruby On Rails_Ruby_Ruby On Rails 4_Html Safe - Fatal编程技术网

Ruby on rails 如何以安全的方式使用html_safe?

Ruby on rails 如何以安全的方式使用html_safe?,ruby-on-rails,ruby,ruby-on-rails-4,html-safe,Ruby On Rails,Ruby,Ruby On Rails 4,Html Safe,我想知道什么时候使用html\u 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" fla

我想知道什么时候使用
html\u 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"
flash[:danger]=“亲爱的#{@user.username}
请查看#{view_context.link_to('here',some_path)}”
您的组织#{@user.organizationname}bla bla bla

例如,对于像这样的flash消息,需要
html\u safe
才能正确显示,但在这种情况下,它还包含用户输入的内容
username
organizationname
。如果将用户内容注入到呈现的字符串中,那么使用
html\u safe
是否仍然安全使用html_-safe,您必须确保所有注入的内容都经过消毒

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"
flash[:danger]=“亲爱的#{ActionController::Base.helpers.sanitize@user.username}
请看一看#{view_context.link_to('here',some_path)}”
您的组织#{ActionController::Base.helpers.sanitize@user.organizationname}bla

如果将用户内容注入到使用html安全呈现的字符串中,则必须确保所有注入的内容都经过了
消毒

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"
flash[:danger]=“亲爱的#{ActionController::Base.helpers.sanitize@user.username}
请看一看#{view_context.link_to('here',some_path)}”
您的组织#{ActionController::Base.helpers.sanitize@user.organizationname}bla

一般来说,并非如此,恶意用户可能会输入一些有害的js代码作为他的
组织名称
,而这些代码将成为你的应用程序的一部分-你不希望这样。这种攻击被称为跨站点脚本(XSS),你可以在这里阅读:


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

一般来说,不是这样,恶意用户可能会输入一些有害的js将代码命名为他的
组织名称
,此代码将成为你的应用程序的一部分-你不需要此代码。此攻击称为跨站点脚本(XSS),你可以在此处阅读:


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

这与共享错误消息有关吗?我有:
  • 。将此更改为:
    更好吗?据我所知,我只有纯文本自定义错误消息,但您永远不知道使用了gems…您认为共享错误消息的最佳做法是什么?我认为只有在活动r中使用纯文本是常见且良好的做法ecord错误消息。我从未见过有人对其执行
    html\u-safe
    。因此,在您真正需要它之前,我肯定会省略html\u-safe以获得额外的安全性。我认为任何合理的gem提供商都不会或不应该将html放在活动记录错误消息中。这与共享错误消息有关吗?我有:
     
  • 。将此更改为:
    更好吗?据我所知,我只有纯文本自定义错误消息,但您永远不知道使用了gem…您认为共享错误消息的最佳做法是什么?我认为只有活动状态下才有纯文本是常见且良好的做法记录错误消息。我从未见过有人对其执行
    html\u-safe
    。因此,为了额外的安全性,我肯定会省略html\u-safe,直到您真正需要它。我认为任何合理的gem提供商都不会或不应该在活动记录错误消息中放置html。