gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 16:00:13 24 4
gpt4 key购买 nike

我有一个字符串:

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/

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