3

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

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

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

4

2 回答 2

6

"#{str}"这个警告是安全的:格式本身不能由用户提供。另一方面,插入的(对 的评估str)不是(评估)结果。

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

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

当然,必须正确使用生成的字符串(来自最初的问题)(例如,数据库占位符或 HTML 正确引用)以避免标准注入漏洞;但想象中的漏洞并不存在

于 2013-09-04T21:33:03.813 回答
0

唯一要做的就是用and"foo#{bar}baz"应用和连接结果。如果您通过文本框等获取用户输入,则输入已经是字符串。如果已经是一个字符串,它会返回自己。连接将产生一个字符串。结果字符串可能看起来像,但除非你进一步做类似或的事情,否则不会对字符串做任何其他事情。to_sbarfoobazbarto_srm -rfsystemeval

于 2013-09-04T22:45:13.650 回答