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

时间:2012-04-20 05:59:53

标签: c# asp.net paypal

我在我的ASP.NET网站上使用PayPal的网站付款标准。

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

  1. 数据库状态更改
  2. 生成PayPal表单,项目的隐藏字段
  3. 调用ScriptManager.RegisterClientScriptBlock()来调用将PayPal表单提交给PayPal的javascript函数。
  4. 我担心用户可以在网络浏览器上按停止,然后编辑隐藏表单中的值,然后提交表单。有办法防止这种情况吗?还是一个更好的选择?

    提前非常感谢你!

2 个答案:

答案 0 :(得分:3)

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

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

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

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

我不相信(但我可能错了)PP Standard有一个用于POST数据的服务器到服务器选项。这将有效地“隐藏”来自客户端/浏览器的数据 - 没什么可看的,没有什么可以篡改的。数据传输在后台 - 客户端/浏览器一无所知。

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

从本质上讲,您将创建他们称之为“加密按钮”即时。这样,对于检查它的人来说,数据看起来就像是胡言乱语 - 它只对PayPal有意义,因为它们可以相应地解密数据。这就是如何保护/保护数据免受篡改(不是查看 - 但同样,可以看到的是胡言乱语)......

... H个

更新

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

答案 1 :(得分:0)

即使我正在使用PHP,使用NVP API,您也可以使用只能由paypal使用的令牌获取重定向链接。所有链接都显示为https://www.sandbox.paypal.com/webscr?cmd=_express-checkout&token=TOKEN,其中TOKEN是先前通过调用PayPal API检索的令牌。

我只为ExpressCheckout开发了它。您可以在此处查看API:

https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/howto_api_reference