因此,我正在我的网站上使用 2co 实施支付系统。我正在使用他们的“标头重定向”,它在成功付款后将客户返回到我网站上的 ASPX 页面,其中包含一堆查询字符串。
无论如何,我想知道。确保这一点的正确方法是什么?如果客户键入他/她自己的参数,例如“Payment.aspx?params-here”,并根据需要向他们的帐户添加积分,该怎么办。
如何确保这是 100% 正品?
建议?谢谢!
因此,我正在我的网站上使用 2co 实施支付系统。我正在使用他们的“标头重定向”,它在成功付款后将客户返回到我网站上的 ASPX 页面,其中包含一堆查询字符串。
无论如何,我想知道。确保这一点的正确方法是什么?如果客户键入他/她自己的参数,例如“Payment.aspx?params-here”,并根据需要向他们的帐户添加积分,该怎么办。
如何确保这是 100% 正品?
建议?谢谢!
参数篡改的一种解决方法通常是将查询参数映射到无法轻易操作的东西,例如,通过使用单向哈希函数创建摘要以与原始参数一起发送并限制特定映射的持续时间/摘要有效。如果摘要与查询参数匹配,您就知道请求没有被篡改。
例如你的网址
Payment.aspx?Amount=100
可能成为
Payment.aspx?Amount=100&Digest=53e5e07397f7f01c2b276af813901c2
这是一篇关于该主题的旧但仍然相关的详细文章:传递防篡改查询字符串参数
在 ASP.NET 中,您可以使用Page.EnableEventValidation
它使用隐藏文本框作为表单的一部分来验证是否从表单发出请求:
当 EnableEventValidation 属性设置为 true 时,ASP.NET 会验证控件事件是否源自由该控件呈现的用户界面。控件在呈现期间注册其事件,然后在回发或回调处理期间验证事件。例如,如果列表控件在呈现页面时包含编号为 1、2 或 3 的选项,并且如果收到指定选项编号 4 的回发请求,则 ASP.NET 会引发异常。默认情况下,ASP.NET 中的所有事件驱动控件都使用此功能。