Ruby on rails 我可以只接受来自域名的post请求吗?

Ruby on rails 我可以只接受来自域名的post请求吗?,ruby-on-rails,ruby,post,domain-name,Ruby On Rails,Ruby,Post,Domain Name,我正在我的应用程序上实现一种付款方式,银行网站会发回一个post请求,其中包含有关付款的信息,如状态、付款id 但为了确保请求不是来自试图做坏事的人,我可以只接受银行系统的请求吗?我正在查找要签入的内容此操作/控制器的请求仅来自mybank.com并跳过其他请求。您可以尝试检查引用者并拒绝不匹配的请求: if request.referer.starts_with?('https://your.bank/') # or request.env['HTTP_REFERER'] # do stu

我正在我的应用程序上实现一种付款方式,银行网站会发回一个post请求,其中包含有关付款的信息,如状态、付款id


但为了确保请求不是来自试图做坏事的人,我可以只接受银行系统的请求吗?我正在查找要签入的内容此操作/控制器的请求仅来自mybank.com并跳过其他请求。

您可以尝试检查引用者并拒绝不匹配的请求:

if request.referer.starts_with?('https://your.bank/') # or request.env['HTTP_REFERER']
  # do stuff
else
  # render error
end
但不是:a)推荐人不安全。每个人都可以伪造它们。b) 您的银行很可能没有发送推荐人

我将研究其他解决方案:只允许来自您的银行ip范围的请求,并要求银行使用机密进行身份验证。


我不明白你的问题。请多解释。我们能看看你实施了什么吗?我有一个控制器,它有一个付款响应动作。当用户付费时,银行服务器使用xml作为post回调此操作。我想做的是将此路由/操作限制为某个域名,即银行域名。如果您的支付处理程序不提供验证支付的方法,则是时候寻找新的支付处理程序了。是的,最好的解决方案之一是银行发送的带有de DATA的秘密,但不幸的是,我的支付处理程序不提供。我将查看ip范围,但主要问题是银行服务器是否更改了其ip并且超出范围。如果您的银行没有提供任何方法来确保/证明付款的真实性,我将根本不信任这家银行。银行给了我唯一的服务器ip。发布“银行响应”=>“银行支付响应”,约束:{ip:“127.0.0.1”}谢谢
post 'yourpath', to: 'controller#action', constraints: { protocol: 'https://', host: 'yourbank' }