确定POST数据的来源或客户端

时间:2016-01-04 21:50:23

标签: asp.net

我有一个asp.net应用程序,它接受用户名作为Form Post值,并根据发布的值进行身份验证。

在我的Login.aspx的Page_Init中,我有以下代码

if (!String.IsNullOrEmpty(HttpContext.Current.Request.Form["username"].ToString()))
{
    //my logic to authenticate, authorize, redirect to page
}

到目前为止一切正常。我不得不添加这个,因为我的公司有一个外部认证系统,它完成所有认证部分,并将用户名发送到应用程序,以便在应用程序中自动登录。

虽然它工作正常,但我想在此已发布的用户名之上添加一层额外的安全性。我想确定此Post请求是否来自我们的Gateway网站。我的问题是

  • 有没有办法识别发布到我的Login.aspx的网址?
  • 如果没有,是否有办法识别任何其他客户信息以验证帖子?

我不希望任何使用帖子变量“username”创建简单HTML的人都可以访问我的应用程序。感谢您对此的见解。

正在查看Request.UserHostAddress和Request.UserHostName中的一个或两个值吗?

1 个答案:

答案 0 :(得分:1)

  

有没有办法识别发布到我的Login.aspx的网址?

没有

  

如果没有,是否有办法识别任何其他客户信息   验证帖子?

嗯,唯一可靠的信息是客户端IP。因此,如果您知道将发送此HTTP请求的应用程序的地址,您可以使用HttpContext.Current.Request.UserHostAddress进行比较。

作为替代方案,您可以在客户端应用程序和服务器之间共享一些常见的秘密。然后,除了发布用户名之外,您还可以要求客户端POST一些将使用此秘密签名的其他消息。现在服务器可以验证签名并保证它来自客户端(因为它是唯一知道如何签名消息的人)。此过程称为Digital Signature,可确保邮件在发件人和收件人之间未被篡改。