编写这样的代码是一种方便的方法:

str = "John"
p "Welcome, #{str}"
# => "Welcome, John"

在实际的 Rails 应用中,可能会故意编写 str 来终止当前表达式并启动恶意代码。在我们确实需要将字符串与评估函数值混合的情况下,如何避免使用 #{}?例如: "Hello, #{foo(param)}"

最佳答案

"#{str}" 是安全的,但需要注意的是:格式本身不能由用户提供。另一方面,被插入的值(str 的评估)不是(eval)结果。

所以,让这段代码不安全实际上是相当困难的:

fmt = "doBadStuff()"
eval('"Welcome #{' + fmt + '}"')

当然,必须正确使用结果字符串(来自初始问题)(例如 database placeholders 或为 HTML 正确引用)以避免标准注入(inject)漏洞;但想象中的脆弱性并不存在。

关于ruby-on-rails - 如何避免 `#{str}` 中的安全问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18624051/

10-16 05:04