gpt4 book ai didi

ruby-on-rails - 调用 Flash 消息 html_safe 有什么危险吗?

转载 作者:行者123 更新时间:2023-12-01 06:47:56 24 4
gpt4 key购买 nike

我想要一条类似于以下内容的 Flash 消息:

“该确认链接无效或已过期。单击此处生成新链接。”

其中“单击此处”当然是指向应用程序中另一个操作的链接,其中可以生成新的确认链接。两个缺点: 一,由于在设置 flash 消息的 Controller 中未定义 link_to,因此我必须将链接 html 放入自己中。没什么大不了的,但有点乱。

第二:为了让链接在页面上正确显示,我必须在 View 中对 flash 显示功能进行 html_safe html_safe,所以现在看起来像(使用 Haml):

- flash.each do |name, message|
= content_tag :div, message.html_safe

这让我停下来。我 html_safe 的其他所有内容都是我自己在 helpers 和诸如此类的东西中编写的 HTML,但是 flash 散列的内容存储在 cookie 客户端中,并且可能会被更改。我已经仔细考虑过了,我不明白这会如何导致 XSS 攻击,但无论如何我都不太了解 XSS。

所以,两个问题:
1. 像这样总是html_safe-ing所有flash内容有什么危险吗?
2. 该解决方案如此困惑(通过在 Controller 中使用 HTML 破坏 MVC,始终使用 html_safe-ing 所有 Flash 内容)这一事实让我觉得我在做这个错误的事情。有没有更优雅的 Rails 风格的方法来做到这一点?

我正在使用 Rails 3.0.0.beta3。

最佳答案

这取决于您对消息内容的来源有多确定。如果任何用户都有可能操纵该消息,那么您不应该这样做!

我不会那样做。因为有可能您现在知道每个字符串都是安全的,但是如果您更改一个 Controller 并添加可能包含用户输入的消息,那么您就有可能存在漏洞。

我会设置任何消息 html_safe当它被添加到 flash你肯定知道它是安全的。

例如

class SomeController < ApplicationController
def some_action
flash[:info] = 'Some safe text!'.html_safe
flash[:unsecure] = User.find(1).signature #//evil code
end
end

在您看来,您可以这样做:

- flash.each do |name, message|
= content_tag :div, message

通过这种方式,您可以确保如果您添加不安全的新 Flash 消息,它会错误地在 View 中安全显示。

在这种情况下,flash[:info]消息打印为 html_safeflash[:unsecure]将被转义,因此不会执行用户恶意的 javascript 代码。

如果您知道消息中不可能有任何未经过滤的用户输入,那么在 flash 消息上使用 html_safe 应该是安全的。

关于ruby-on-rails - 调用 Flash 消息 html_safe 有什么危险吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2893224/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com