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

use*_*111 3 javascript ruby ruby-on-rails

我正在使用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}]">
Run Code Online (Sandbox Code Playgroud)

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

aku*_*uhn 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)
Run Code Online (Sandbox Code Playgroud)

它会将你的字符串变成一个哈希数组.

 

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

data = JSON.parse(string,:symbolize_names=>true)
Run Code Online (Sandbox Code Playgroud)