将敏感和较短的数据传递到外部链接

Passing sensitive and shorter data onto external links

我最近想开始在我的网站中实施 APIs,但由于我缺乏关于如何正确发送 JSON 数据的知识,我遇到了一些关于验证的问题Ruby 在 Rails 上。我过去曾与一些 API 和 JSON 合作过,但这是我第一次同时完成这两项工作,而且我在 RoR 方面的经验仍然不足。

我的第一直觉是将参数连接到 url 上,在看到来自 API 的更积极(尽管仍然不完整)JSON 响应后,我以为我是在正确的轨道上,但在未能获得成功响应后,我开始深入研究我发送的内容,那时我注意到两个问题。

第一个问题是 URL 里面有敏感信息,比如我的 clientID,关于购买的信息,比如价格和描述,以及用 MD5 加密的密钥和一些加密盐,但是根据对于文档来说,它是安全的,只是为了与服务器接收到的信息进行比较,所以总而言之,我并不太担心泄露这类信息。我仍然想改进我的代码并尽可能多地保护信息。

我的第二个问题更严重,我注意到发送的信息不完整,因为 url 参数中的 space 有限。

那时我知道我做错了什么,所以我开始寻找替代方案,最好是 POST 响应,但是我仍然缺乏如何使用 [=48] 正确发送参数的知识=] 当我尝试使用表单时,信息仍然存在,更糟糕的是,与我之前的尝试不同,我发送的参数在另一端似乎是空的,所以我开始深入研究它。

然后我发现 link_to helper 可以发送参数,但经过一些测试后它不起作用,然后我发现用 rails 向外部站点发送参数,建议方法是将参数连接到url,所以我回来了。

所以我的问题是,如何在没有表格的情况下将参数发送到外部网站(最好同时尽可能保证所有信息的安全)(因为所有信息之前都已在以前的表格中填写过)在 rails?

虽然我之前曾与 APIs 和 JSON 一起工作过,但它们仍然是我与它们一起工作时不太舒服的主题,并且在某种程度上我仍在学习很多东西在 RoR 中。

这是给我最多结果的代码(真正的代码看起来有点不同):

我的控制器order_controller.rb

def confirm_order

  #Here I group all the parameters I'll need

  @payment_params = []
  description = "create_"+ @order.name.gsub(' ','_')
  device_info = "WEB"
  currency = @order.currency
  fee =  @order.price
  #this was to concatenate the url, previouly I had the name of each parameter and the "&" taken into account, the response was different as I added each.
  @payment_params << description << device_info << currency << fee
end

在我看来 confirm_order.html.erb 类似于

<a href= <%="https://payexample/something/order?"+ @payment_params%> >Confirm order</a>

欢迎任何见解,但现在我真的不知道如何解决这个问题,因为我已经用尽了我所学的一切。

我对你的 UI 的样子有点困惑,但我会把所有这些信息都放在 link 之外,并确保在 [=33] 中进行确认=](因为某些浏览器会预加载 link,如果您将其保留为 link,可能会导致意外购买)。我会改用 button_to 助手。

我不确定您是如何跟踪订单的,是在数据库中还是在 session 中还是其他什么。所以你可能需要稍微修改一下才能传递正确的参数。

https://apidock.com/rails/ActionView/Helpers/UrlHelper/button_to

<%= button_to('Confirm order', action: 'confirm_order') %>

然后在您的 confirm_order 操作中,您可以重定向到支付网站,而不是将所有机密信息一直放在页面上。如果有人正在观察网络流量,他们会看到它以 header 的速度真正快速地通过,但它不太容易被发现,并且 link 在您可以在新选项卡中打开的页面上次。

def confirm_order
  #Here I group all the parameters I'll need

  @payment_params = []
  description = "create_"+ @order.name.gsub(' ','_')
  device_info = "WEB"
  currency = @order.currency
  fee =  @order.price
  #this was to concatenate the url, previouly I had the name of each parameter and the "&" taken into account, the response was different as I added each.
  @payment_params << description << device_info << currency << fee

  redirect_to("https://payexample/something/order?#{@payment_params}")
end

我不确定您希望重定向 url 是什么。这取决于外部站点。如果你需要它是querystring参数,你可以把键和值做一个散列,然后使用to_query方法把它变成一个querystring。

https://apidock.com/rails/Hash/to_query