【问题标题】:Can I accept post request only from a domain name?我可以只接受来自域名的发帖请求吗?
【发布时间】:2015-01-09 01:48:45
【问题描述】:

我正在我的应用程序中实施一种付款方式,银行网站发回一个包含付款信息的发布请求,例如状态、付款 ID ...

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

【问题讨论】:

  • 我不明白你的问题。请进一步解释。我们可以看看你实现了什么吗?
  • 我有一个带有 payment_response 动作的控制器。当用户付款时,银行服务器会使用 xml 作为 post 回调此操作。我想做的是将这个路由/动作限制在某个域名,即银行域名。
  • 如果您的支付处理器不提供验证支付的方式,那么是时候寻找新的支付处理器了。

标签: ruby-on-rails ruby post domain-name


【解决方案1】:

You can constrain the route:

post 'yourpath', to: 'controller#action', constraints: { protocol: 'https://', host: 'yourbank' }

【讨论】:

  • 银行给了我唯一的服务器ip。发布 'bank_response' => 'bank#payment_response',约束:{ ip: "127.0.0.1" } 谢谢
【解决方案2】:

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

if request.referer.starts_with?('https://your.bank/') # or request.env['HTTP_REFERER']
  # do stuff
else
  # render error
end

但不是:a) 推荐人不安全。每个人都可以伪造它们。 b) 您的银行很可能没有发送推荐人。

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

【讨论】:

  • 是的,最好的解决方案之一是银行发送的带有数据的秘密,但不幸的是我的不提供。我会查看 ip 范围,但主要问题是银行服务器是否更改了它的 ip 并且超出了范围。
  • 如果您的银行没有提供任何方法来确保/证明付款的真实性,我根本不会信任这家银行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-20
  • 2014-05-10
  • 1970-01-01
  • 1970-01-01
  • 2013-06-15
  • 1970-01-01
  • 2023-03-29
相关资源
最近更新 更多