2015-02-06 3 views
0

Я пытаюсь отправить данные на платежный шлюз WorldPay. Я сейчас делаю это (успешно) путем создания строки запроса (платежное ID, количество, данные клиента и т.д.) и конкатенации их к базовому URL WorldPay, как и так:Перенаправление с данными сообщения - БЕЗ строки запроса

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

... и выполняя стандартный ответ Response.Redirect ([above_url]).

Это работает так, как предполагалось, но я обеспокоен тем, что обнародование этой информации в строке запроса может побудить людей атаковать ее (например, изменение «суммы» ключа, скажем, «1»!).

В примерах WorldPay вы найдете только базовую форму HTML, но поскольку данные POSTed с использованием этого метода, вышеупомянутая проблема никогда не является проблемой. К сожалению, мне необходимо выполнить предварительную обработку (обновления статуса заказа и т. Д.) ПЕРЕД тем, чтобы перенаправить пользователя на WorldPay, чтобы завершить платеж, поэтому мне остается задаться вопросом, можно ли это сделать программно?

Я подозреваю, что я пытаюсь сделать то же самое, что и вопрос this: программно перенаправить пользователя на сайт WorldPay, передав все необходимые данные о платеже, не подвергая строкам строки запроса.

Возможно ли это?

+0

Динамическую форму можно создать с помощью метода = 'post' и всех параметров в виде скрытых полей. И отправьте эту форму –

+0

@NickH Основываясь на том, что я понимаю, это зависит от того, что может понять эта внешняя услуга (WorldPay в вашем случае). Если у него есть возможность читать значения формы, то вы можете определенно подготовить данные POST и перенаправить. –

ответ

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?), но хорошо, хорошо! Спасибо, парни. Надеюсь, это помогает кому-то другому.

Смежные вопросы