ruby - 我可以使用字符串作为可执行代码行的一部分吗?

标签 ruby string replace eval

我有一个字符串:

parsed[tag] => "first_name: 'Richard'"

我需要执行如下代码:

client.put_if_absent("profiles", bot_client_name, {first_name: 'Richard'})

我是否可以使用第一个字符串以某种方式充当等效文本的代码?我尝试使用 eval(parsed[tag]) 但失败了。

我改成如下:

response = "client.put_if_absent('profiles', bot_client_name, {#{parsed[tag]}})"

eval(response)

这确实有效——我可以做些什么来降低潜在风险?

最佳答案

请不要使用 eval 来解析用户输入。那是 super 危险的,你永远不会让它安全。您在这里的真正目标似乎是获取此字符串 "first_name: 'Richard'" 并从中生成此对象 {first_name: 'Richard'}。您不需要 eval 来完成该任务。

如果您正在尝试获取用户输入并将其转换为对象哈希,请查看此问题。 How do I convert a String object into a Hash object?我建议您查看 jackquack 在那篇文章中的回答,让您了解如何使用 Ruby 强大的字符串库 ( http://www.ruby-doc.org/core-2.1.4/String.html) 中的方法来解析您的输入。

如果您的用户输入采用标准格式,如 JSON、YAML、XML 等,那么您可以使用一个库来为您完成所有这些艰苦的工作。如果您的用户输入采用自定义格式(例如您的情况),那么您需要自己进行解析。

关于ruby - 我可以使用字符串作为可执行代码行的一部分吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27160890/

相关文章:

java - 在 Java 中使用变量创建正则表达式

ruby-on-rails - rails : Custom text for rails form_for label

ruby - 绕过 Element 的方法无法滚动到 View 中 - Watir-webdriver with Ruby

java - 输出 ArrayList 到 String 不出现 [,](括号)

ios - Swift 在字符的第一个匹配处拆分字符串

Vim:从一个文件复制模式并在另一个文件中搜索它

javascript正则表达式解析没有协议(protocol)的url

ruby-on-rails - 如何在文本字段rails postgresql中查询json数据

ruby-on-rails - Rake 任务仅调用一次时执行两次

algorithm - 算法所需的基础知识和数学