使用发布数据重定向 - 没有查询字符串

时间:2015-02-06 10:27:25

标签: c# asp.net-mvc http redirect worldpay

我试图将数据提交给WorldPay的支付网关。我目前正在通过建立查询字符串(付款ID,金额,客户详细信息等)并将它们连接到WorldPay的基本网址(成功)来完成此操作(如下):

https://secure-test.worldpay.com/wcc/purchase?instId=12345&testMode=100&amount=999

......并且做了标准的Res​​ponse.Redirect([above_url])。

这是按预期工作的,但我担心在查询字符串中公开此信息可能会鼓励人们对其进行攻击(例如,更改"金额"键,等等,&# 34; 1"!)

WorldPay的示例仅提供基本的HTML表单,但由于数据是使用此方法发布的,因此上述问题从来都不是问题。不幸的是,在将用户重定向到WorldPay以完成付款之前,我需要进行一些预处理(订单状态更新等),所以我想知道这是否可以通过编程方式完成?

我怀疑我尝试与this问题完全相同:以编程方式将用户重定向到WorldPay网站,传递所有必要的付款详细信息 - 而不会泄露查询字符串值。

这可能吗?

1 个答案:

答案 0 :(得分:0)

WorldPay支持为我提供了解决方案。挖掘他们的来源,我可以看到他们正在做的事情[我怀疑] husnain_sys建议:

            var formBuilder = new StringBuilder();
        formBuilder.AppendLine("<html><head>");
        formBuilder.AppendLineFormat("</head><body onload=\"document.{0}.submit()\">", formName);
        formBuilder.AppendLineFormat("<form name=\"{0}\" method=\"{1}\" action=\"{2}\" >", formName, Method.ToString(), Url);
        for (int i = 0; i < _inputValues.Keys.Count; i++) {
            formBuilder.AppendLineFormat("<input name=\"{0}\" type=\"hidden\" value=\"{1}\">", 
                HttpUtility.HtmlEncode(_inputValues.Keys[i]), HttpUtility.HtmlEncode(_inputValues[_inputValues.Keys[i]]));
        }
        formBuilder.AppendLine("</form>");
        formBuilder.AppendLine("</body></html>");

        _httpContext.Response.Clear();
        _httpContext.Response.Write(formBuilder.ToString());
        _httpContext.Response.End();

这对我来说仍然看起来像是黑客(当然重定向不一定要通过JS来完成?),但是好啊 - 它有效!多谢你们。希望这有助于其他人。