Javascript 将类似散列的字符串转换为散列&;安全风险

Javascript 将类似散列的字符串转换为散列&;安全风险,javascript,ruby-on-rails,ruby,Javascript,Ruby On Rails,Ruby,我使用JavaScript将用户输入转换成一个字符串,看起来像一个散列数组,并将其传递到Rails表单中的一个隐藏字段。也就是说,类似这样的内容会传递给我的控制器: 我正在使用eval(params[:UserHash])将其转换为可以使用的哈希。我使用eval()是否完全破坏了安全性?如果是,是否有办法检查传递的字符串是否是哈希数组?如果您对我的工作有任何意见,我们将不胜感激。我使用JS传递哈希数组的原因是因为我的表单收集关于可变长度集合(一组可变付款人)的数据。最好使用JSON 这正是J

我使用JavaScript将用户输入转换成一个字符串,看起来像一个散列数组,并将其传递到Rails表单中的一个隐藏字段。也就是说,类似这样的内容会传递给我的控制器:



我正在使用
eval(params[:UserHash])
将其转换为可以使用的哈希。我使用
eval()
是否完全破坏了安全性?如果是,是否有办法检查传递的字符串是否是哈希数组?如果您对我的工作有任何意见,我们将不胜感激。我使用JS传递哈希数组的原因是因为我的表单收集关于可变长度集合(一组可变付款人)的数据。

最好使用JSON

这正是JSON设计的场景。在Javascript中创建JSON字符串,并使用

require 'json'

string = '[{"payer_id":1,"amt":90.0},{"payer_id":2,"amt":80.0},{"payer_id":4,"amt":20.0}]'
data = JSON.parse(string)
它会将字符串转换为哈希数组

注意,如果希望键是符号,请使用

data = JSON.parse(string,:symbolize_names=>true)

是的,您使用
eval
完全破坏了安全性。为什么不直接使用JSON来存储和检索散列呢?解码是完全安全的,它提供了或多或少(好吧,更多)相同的简洁性。谢谢。然而,现在我在调用:data.detect{{付款人}付款人[:payer|u id]==var}[:amt]之后立即在行中得到了一个nil对象错误(“当你没有预料到它时,你有一个nil对象!”)。即使我只是硬编码你给我的字符串并使用它,硬编码var到一个付款人id,我也会得到同样的错误。当我在控制台中输出JSON.parse(字符串)(在调试期间)时,我得到:{“付款人id”=>1,“amt”=>25.0}{“付款人id”=>2,“amt”=>25.0}{“付款人id”=>4,“amt”=>25.0}{“付款人id”=>5,“amt”=>25.0}。。。此值周围没有大括号,这可能是问题所在吗?您正在尝试使用符号访问,但键是字符串。你必须这样做
data.detect{| payer | payer['payer_id']==var}['amt']
添加了关于如何获取符号化名称的说明。