c# - 如何防止使用 PayPal 的网站支付标准编辑隐藏字段?

标签 c# asp.net paypal

我在我的 ASP.NET 网站中使用 PayPal 的网站支付标准。

我所做的是当用户点击“立即付款”按钮时,我在代码隐藏中执行以下操作:

  1. 数据库状态变化
  2. 生成 PayPal 表单,项目的隐藏字段
  3. 调用 ScriptManager.RegisterClientScriptBlock() 以调用将 PayPal 表单提交到 PayPal 的 javascript 函数。

我担心用户可以在网络浏览器上按下停止键,然后编辑隐藏表单中的值,然后提交表单。有没有办法防止这种情况?或者更好的选择?

提前致谢!

最佳答案

我还没有完成 PP 标准。我已经使用过 Gateway 和 Pro/Express Checkout,但已经有一段时间了 - 尽管如此,您的问题仍可以以更“通用”的方式处理...

不幸的是,您的计划不会采取任何措施来保护您 - 就像网络上的任何其他 HTML 表单一样,可以使用现成的工具检查和篡改 HTTP 请求和响应。

防止篡改的常用方法是对来自任何 客户端/浏览器的提交值进行服务器端验证(经验法则是“不信任任何人”)。在您的场景中,您在服务器端做事,但这仍然先于数据的实际提交目标——即 PayPal。实际将数据发送到“目标”的步骤仍然是浏览器/客户端——可以说这就是问题所在。要验证的数据适用于您系统以外的系统(因此您无法验证 PayPal)。

除非有额外的安全层,例如签名或加密,总是容易被篡改(查看已成定局,可以查看)。

我不相信(但我可能是错的)PP Standard 有一个用于发布数据的服务器到服务器选项。这将有效地从客户端/浏览器中完全“隐藏”数据——没有什么可看的,没有什么可以篡改的。数据传输在后台进行 - 客户端/浏览器对此一无所知。

然而,他们的PayPal Payments Standard and Button Manager API似乎是这样做的正确/安全的方式。

本质上,您将即时创建他们所谓的“加密按钮”。这样,对于任何检查数据的人来说,数据看起来就像是乱码——只有 PayPal 才有意义,因为他们可以相应地解密数据。这就是保护/保护数据免受篡改的方式(不是查看 - 但同样,可以看到的是乱码)...

嗯...

更新:

此外,您应该考虑使用 PayPal IPN 来存储数据。您在上面做出假设(我认为)每个点击按钮的人实际上都会完成付款(或者可以成功付款)。使用 IPN,您将“收听”来自 PayPal 的数据仅在成功付款后(这是您应该存储订单相关数据和/或库存更新等的地方)....

关于c# - 如何防止使用 PayPal 的网站支付标准编辑隐藏字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10241038/

相关文章:

html - Paypal 按钮和文本之间的距离

iphone - 适用于 Android 操作系统的 PayPal 应用内购买 - 服务器/客户端模型

javascript - 从根本上来说,C# 和 Javascript 中的 "this"关键字是否相同

c# - 如何取消订阅此 lambda 事件?

c# - 在消息处理程序中添加属性值

c# - 找不到方法 : Void System. Web.UI.ScriptResourceDefinition.set_LoadSuccessExpression

ruby-on-rails - Paypal 环境变量凭据

c# - 从 View 获取 List<ViewModel> 到 Controller

c# - 从完整路径获取目录

asp.net - 本地主机上的 jQuery 脚本缓存