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

时间 2019-02-21
阅读 32
点赞 0
收藏 0
连接bluespheal

我最近想开始在我的网站上实现API,但是我遇到了一些关于验证的问题,因为我不知道如何用RubyonRails正确地发送JSON数据。我以前曾使用过一些API和JSON,但这是我第一次同时使用这两种方法,而且我在ROR方面的经验仍然不足。

我的第一反应是将参数连接到URL上,在看到来自API的更积极(尽管仍然不完整)的JSON响应后,我认为我走的是正确的道路,但在没有得到成功的响应后,我开始深入了解我发送的内容,这时我注意到了两个问题。

第一个问题是,在URL中有一些敏感信息,比如我的客户ID,关于购买的信息,比如价格和描述,还有一个用MD5加密的密钥和一点加密盐,但是根据文档,这是安全的,只是为了与服务器接收到的信息进行比较,所以我根本没有太担心会泄露这种信息了。不过,我还是想改进我的代码,尽可能地保护更多的信息。

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

就在那时,我知道我做错了什么,所以我开始寻找替代方案,最好是在回复后,但是我仍然不知道如何正确地发送参数,而当我尝试使用表单时信息仍然存在,更糟糕的是,我发送的参数似乎在另一个E上是空的。与我之前的尝试不同,我开始深入研究它。

然后我发现链接“to helper”可以发送参数,但是经过一些测试,它不起作用,然后我发现使用rails将参数发送到外部站点时,建议的方法是将参数连接到url中,因此我返回了整圈。

所以我的问题是,如果没有Rails中的表单(因为所有信息以前都是在以前的表单中填写的),如何将参数发送到外部网站(最好是在尽可能安全地保存所有信息的情况下)?

虽然我之前已经使用过API和JSON,但它们仍然是我还不太习惯使用它们的主题,在某种程度上,我在ROR中仍然学到了很多东西。

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

我的控制器订购控制器.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

在我看来确认订单.html.erb有点像

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

任何见解都是受欢迎的,但现在我真的对如何处理这个问题一无所知,因为我已经用尽了所学的一切。

建议答案

我有点困惑于你的用户界面是什么样子的,但是我会把所有的信息保存在链接之外,并确保在一篇文章中确认(因为有些浏览器会预加载链接,如果你将其保存为链接,可能会导致意外购买)。我会用button_to帮手。

我不知道您是如何跟踪订单的,无论是在数据库中还是在会话中,或者是什么。所以您可能需要稍微修改一下,以便传递正确的参数。

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

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

然后在你的confirm_order行动,你可以重定向到支付网站,而不是把所有的机密信息放在整个页面上。如果有人在监视网络流量,他们会看到它很快从标题中通过,但不太容易被发现,而且页面上的链接可以在一个新标签中多次打开。

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

我不确定你想要那个重定向的网址是什么。这取决于外部站点。如果需要它是querystring参数,可以对键和值进行哈希,并使用to_query方法将其转换为查询字符串。

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

👍 0