将类似哈希的字符串转换为Hash&安全风险

时间:2013-01-04 21:41:26

标签: javascript ruby-on-rails ruby

我正在使用JavaScript将用户输入转换为一个看起来像哈希数组的String,并将其传递给Rails表单中的隐藏字段。即像这样的东西传递给我的控制器:

<input id="UserHash" name="UserHash" type="hidden" value="[{ :payer_id => 1, :amt => 90.00}, { :payer_id => 2, :amt => 80.00}, { :payer_id => 4, :amt => 20.00}]">

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

1 个答案:

答案 0 :(得分:5)

最好的办法是改用JSON。

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

在Ruby中解析它
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)