所以我有一个MVC5网络应用程序,我试图与支付网关集成,我必须对支付网关网址进行以下HTTP POST。
@Html.BeginForm(null, null, FormMethod.Post, new { @action = "https://l33tpaymentgateway.com" })
{
<input id="MerchantCode" name="MerchantCode" type="hidden" value="12345" />
<input id="RefNo" name="RefNo" type="hidden" value="ABCDE" />
<input id="Amount" name="Amount" type="hidden" value="300" />
<input id="Currency" name="Currency" type="hidden" value="USD" />
<input id="UserEmail" name="UserEmail" type="hidden" value="warheat1990@warheat1990.com" />
<input id="Signature" name="Signature" type="hidden" value="1234567890" />
<input id="ResponseURL" name="ResponseURL" type="hidden" value="http://warheat1990.com" />
<input type="submit" value="submit"/>
}
正如您所看到的,用户可以轻松编辑数据(例如,使用chrome检查元素并且只能更改隐藏输入的值)这意味着我需要进行大量验证,是否可以执行HTTP在我的服务器端POST,然后重定向用户?或者还有其他方法可以阻止用户篡改HTML值吗?
答案 0 :(得分:0)
您可以在服务器上执行所有操作:
public async Task<ActionResult> SubmitPayment()
{
using (var client = new HttpClient())
{
client.BaseAddress = new Uri("https://l33tpaymentgateway.com");
var content = new FormUrlEncodedContent(new[]
{
new KeyValuePair<string, string>("MerchantCode", "12345"),
new KeyValuePair<string, string>("RefNo", "ABCDE"),
//add other properties here
});
var result = await client.PostAsync("", content);
if(result.IsSuccessStatusCode)
{
//Payment successfull
if you need to read response content:
var responseContent = await result.Content.ReadAsStringAsync();
}
else
{
you got error
}
}
}
可以通过AJAX或
从客户端触发此操作@Html.BeginForm("SubmitPayment", "ControllerName", FormMethod.Post)
{
<input type="submit" value="submit"/>
}
答案 1 :(得分:0)
您不应直接从用户浏览器向支付网关提交请求。对支付网关的请求向用户显示太多信息。只需查看请求数据,用户就可以操纵任何东西。
相反,您应该将所有与支付网关相关的信息安全地存储在您的服务器中,用户应该将请求提交给您的服务器,并让您的服务器将请求发布到支付网关。除了提高安全性之外,您还可以鼓励您向服务器发送最少的信息,因为您的系统中可能已经有用户的详细信息(例如电子邮件地址),并且会在支付网关周围提供抽象。