"Th-6ren">
gpt4 book ai didi

ruby - 在 Ruby 中,插入字符串的数据是否会导致字符串终止?

转载 作者:数据小太阳 更新时间:2023-10-29 07:56:26 25 4
gpt4 key购买 nike

在 Ruby 中,有什么方法可以通过插值将数据添加到字符串来终止字符串?例如:

"This remains#{\somekindofmagic} and this does not" # => "This remains"

我假设不是,但我想确保做类似的事情

something.send("#{untrusted_input}=", more_untrusted_input)

实际上并没有留下某种方式来终止插入的字符串并用于发送 eval。

最佳答案

输入字符串数据 AFAIK 是不可能的。 Ruby String 可以包含任意二进制数据,不应该有字节的神奇组合提前终止 String

如果您担心对 Ruby 字符串的“注入(inject)”式攻击,那么如果输入是已转换为字符串的外部数据形式(并且您特别担心有一个 eval触发不会发生)。这种攻击方式依赖于将输入字符串传递给其他一些解释器(例如 SQL 或 JavaScript)而没有正确转义语言结构的代码。

但是,如果 String 参数以来自同一进程中不受信任的 Ruby 代码的 Ruby 对象的形式出现,则可能会给它们添加副作用:

class BadString
def to_s
puts "Payload"
"I am innocent"
end
end

b = BadString.new

c = "Hello #{b}"
Payload
=> "Hello I am innocent"

编辑:你的例子

something.send("#{untrusted_input}=", more_untrusted_input)

还是会让我有点担心,如果 untrusted_input 真的是不受信任的,你会严重依赖这样一个事实,即没有以 = 结尾的方法,你会不高兴打过电话。有时由于使用框架或 gem,可以在核心类上定义新方法,而您可能不知道它们,或者它们可能出现在 gem 的更高版本中。出于这个原因,我个人会将允许的方法名称列入白名单,或者对传入数据使用一些其他验证方案,无论您对开放式评估有多安全。

关于ruby - 在 Ruby 中,插入字符串的数据是否会导致字符串终止?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16753239/

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