Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何防止使用PayPal编辑隐藏字段';s的网站支付标准?_C#_Asp.net_Paypal - Fatal编程技术网

C# 如何防止使用PayPal编辑隐藏字段';s的网站支付标准?

C# 如何防止使用PayPal编辑隐藏字段';s的网站支付标准?,c#,asp.net,paypal,C#,Asp.net,Paypal,我在我的ASP.NET网站上使用贝宝的网站支付标准 我所做的是,当用户单击“立即付款”按钮时,我在codebhind中执行以下操作: 数据库状态更改 生成PayPal表单,项目的隐藏字段 调用ScriptManager.RegisterClientScriptBlock()调用将PayPal表单提交给PayPal的javascript函数 我担心用户可能会在web浏览器上按stop,然后编辑隐藏表单中的值,然后提交表单。有没有办法防止这种情况?还是更好的选择 提前非常感谢 我还没有完成PP标准。

我在我的ASP.NET网站上使用贝宝的网站支付标准

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

  • 数据库状态更改
  • 生成PayPal表单,项目的隐藏字段
  • 调用ScriptManager.RegisterClientScriptBlock()调用将PayPal表单提交给PayPal的javascript函数
  • 我担心用户可能会在web浏览器上按stop,然后编辑隐藏表单中的值,然后提交表单。有没有办法防止这种情况?还是更好的选择


    提前非常感谢

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

    不幸的是,您的计划无法保护您——就像web上的任何其他HTML表单一样,HTTP请求和响应可以使用现成的工具进行检查和篡改

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

    除非有一个附加的安全层,例如签名或加密,否则它总是容易被篡改(查看已成定局,可以查看)

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

    然而,他们的方法似乎是正确/安全的

    本质上,您将动态创建他们所谓的“加密按钮”。这样一来,数据在任何检查它的人看来都像是胡言乱语——这对PayPal来说才有意义,因为他们可以相应地解密数据。这就是如何保护数据不被篡改的方法(不是查看-但同样,可以看到的是胡言乱语)

    更新:


    也应该考虑贝宝IPN存储数据。你是在做上面的假设(我认为),每个点击按钮的人都会实际完成付款(或者可以成功付款)。使用IPN,只有在成功付款后,您才能“监听”来自PayPal的数据(您应该在这里存储订单相关数据和/或库存更新等)…

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

    不幸的是,您的计划无法保护您——就像web上的任何其他HTML表单一样,HTTP请求和响应可以使用现成的工具进行检查和篡改

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

    除非有一个附加的安全层,例如签名或加密,否则它总是容易被篡改(查看已成定局,可以查看)

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

    然而,他们的方法似乎是正确/安全的

    本质上,您将动态创建他们所谓的“加密按钮”。这样一来,数据在任何检查它的人看来都像是胡言乱语——这对PayPal来说才有意义,因为他们可以相应地解密数据。这就是如何保护数据不被篡改的方法(不是查看-但同样,可以看到的是胡言乱语)

    更新:


    也应该考虑贝宝IPN存储数据。你是在做上面的假设(我认为),每个点击按钮的人都会实际完成付款(或者可以成功付款)。使用IPN,只有在成功付款后,您才能“监听”来自PayPal的数据(您应该在这里存储订单相关数据和/或库存更新等)…

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

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


    即使我正在使用PHP,使用NVP API,您也可以使用只能由paypal使用的令牌获取指向重定向的链接。所有链接看起来都像
    https://www.sandbox.paypal.com/webscr?cmd=_express-checkout&token=token
    ,其中
    token
    是预先检索到的令牌