我有一个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网站。我的问题是
我不希望任何使用帖子变量“username”创建简单HTML的人都可以访问我的应用程序。感谢您对此的见解。
正在查看Request.UserHostAddress和Request.UserHostName中的一个或两个值吗?
答案 0 :(得分:1)
有没有办法识别发布到我的Login.aspx的网址?
没有
如果没有,是否有办法识别任何其他客户信息 验证帖子?
嗯,唯一可靠的信息是客户端IP。因此,如果您知道将发送此HTTP请求的应用程序的地址,您可以使用HttpContext.Current.Request.UserHostAddress
进行比较。
作为替代方案,您可以在客户端应用程序和服务器之间共享一些常见的秘密。然后,除了发布用户名之外,您还可以要求客户端POST一些将使用此秘密签名的其他消息。现在服务器可以验证签名并保证它来自客户端(因为它是唯一知道如何签名消息的人)。此过程称为Digital Signature
,可确保邮件在发件人和收件人之间未被篡改。