验证HTTP POST并确保数据未被用户

时间:2015-10-21 08:50:10

标签: c# asp.net-mvc security asp.net-mvc-5

所以我有一个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值吗?

2 个答案:

答案 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)

您不应直接从用户浏览器向支付网关提交请求。对支付网关的请求向用户显示太多信息。只需查看请求数据,用户就可以操纵任何东西。

相反,您应该将所有与支付网关相关的信息安全地存储在您的服务器中,用户应该将请求提交给您的服务器,并让您的服务器将请求发布到支付网关。除了提高安全性之外,您还可以鼓励您向服务器发送最少的信息,因为您的系统中可能已经有用户的详细信息(例如电子邮件地址),并且会在支付网关周围提供抽象。