你能安全地通过IP验证请求吗?


Can You Securely Authenticate A Request Via IP?

我目前正在将NAB transaction支付网关集成到一个电子商务商店中。一旦付款处理完毕,NAB transaction系统将向我们的端点发送POST请求,以便我们处理结果。

问题是POST请求不包含安全的哈希/令牌,我们可以用它来发送回NAB transaction系统,以验证请求是真实的,而不是欺骗的。更糟糕的是,NAB transaction系统甚至没有任何用于任何信息身份验证的API,本质上,安全性非常差!

是否有一种方法可以安全地验证这些请求?例如,检查请求是否来自NAB事务系统所操作的已知IP地址列表?或者反向查找IP?有哪些选项?如何在PHP中实现这些选项?

是不是依靠IP身份验证不安全,因为它可以被欺骗?

基于IP地址的身份验证很好,如果您:

  • 知道ip列表(即支付提供商使用的ip)
  • ip是静态的(很明显,但是如果请求实际上是由提供商发送的,而不是通过"付款成功"页面上的隐藏表单,那么情况就是这样)
  • 它们会立即通知您任何更改(或者您的脚本可能会拒绝有效的请求或接受来自提供商不再使用的ip的请求)
  • 所有可以使用IP地址的系统(即支付提供商的服务器,假设数据中心没有使用一些蹩脚的网络设置)都是足够可信的,不会发送任何虚假通知。

欺骗源IP是不可能的,因为TCP使用三次握手,如果欺骗了IP,握手将失败。

所以基本上:如果满足一些基本标准(见上文),通过IP进行身份验证是可以接受的,但当然,如果他们为您提供一种验证通知的方法——通过调用他们这边的API或使用加密签名(更好,因为它不会因为无法访问远程服务器而失败),则会更安全。

问题是POST请求不包含安全哈希/令牌我们可以用它发送回NAB交易系统验证请求是真实的,而不是欺骗的

是的,这是一个问题,对吧:)

不依赖于IP身份验证不是那么安全,因为它可以欺骗吗?

一点都不安全!