【问题标题】:Redirect with post data - WITHOUT query string使用帖子数据重定向 - 没有查询字符串
【发布时间】:2015-04-06 11:13:59
【问题描述】:

我正在尝试向 WorldPay 的支付网关提交数据。我目前正在通过构建查询字符串(付款 ID、金额、客户详细信息等)并将它们连接到 WorldPay 的基本 url 来(成功地)这样做,如下所示:

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

...以及执行标准的 Response.Redirect([above_url])。

这按预期工作,但我担心在查询字符串中公开此信息可能会鼓励人们攻击它(例如将“数量”键更改为“1”!)。

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

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

这可能吗?

【问题讨论】:

  • 您可以使用method='post'和所有参数作为隐藏字段动态创建表单。并提交该表格
  • @NickH 根据我的理解,这取决于外部服务(在您的情况下为 WorldPay)可以理解的内容。如果它能够从表单的 post 值中读取,那么您绝对可以准备 POST 数据并重定向。

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


【解决方案1】:

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();

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

【讨论】:

    猜你喜欢
    • 2014-09-09
    • 1970-01-01
    • 1970-01-01
    • 2015-03-25
    • 1970-01-01
    • 2014-11-03
    • 2012-10-02
    • 1970-01-01
    相关资源
    最近更新 更多