如果有人能帮助我,我会感激不尽。目前,我正在ASP.NET应用程序上实现一些jQuery AJAX方法,以便将GET和POST数据传输到我们的服务器。我们希望在此基础上使用某种形式的身份验证,它是轻量级的,并且实现起来相当快。
目前,每个AJAX请求都会将表单身份验证cookie发送到我们的WCF服务,如Fiddler所示。当我们收到对WCF服务的请求时,它有一个解密Forms Authentication cookie的方法。目前,如果cookie不为空且未过期,它将仅提供数据响应。这很好用,并且cookie存在的唯一方法是用户是否通过了我们的安全登录系统。
我想知道的是,这是否是确保我们的AJAX呼叫安全的有效形式。
模仿表格饼干容易吗?是否有可能规避表单cookie?任何建议都会受到赞赏,因为我在这里有点深入。
编辑:我们目前还启用了SSL和安全HTTPS传输。
以下是我们代码的示例:
private bool AuthenticateAJAXRequest()
{
// assume user is not authenticated
bool authenticated = false;
if (HttpContext.Current != null)
{
if (HttpContext.Current.Request != null)
{
var authCookie = HttpContext.Current.Request.Cookies["authCookie"];
if (authCookie != null)
{
FormsAuthenticationTicket fTicket = FormsAuthentication.Decrypt(authCookie.Value);
if (fTicket != null)
{
if (!fTicket.Expired)
authenticated = true;
}
}
}
}
return authenticated;
}
答案 0 :(得分:1)
首先,AJAX(XHR - Xml Http Request)异步请求受“Same-Origin”策略的约束。这意味着浏览器将隐式拒绝/限制对除页面源之外的服务器进行AJAX调用。 这会处理跨域脚本攻击。 (您仍然可以使用JSONp或手动使用脚本标记进行跨域异步调用,但这不是当前讨论范围内的其他球类游戏。) 从我收集的内容来看,如果您只是检查cookie并且没有退回,那么您将遇到麻烦,因为一些用户可能已经在他们的浏览器中关闭了cookie。相反,我建议使用可以为每个用户会话存储和检索的用户级别唯一ID。将此唯一ID作为每个Ajax请求的一部分发送,并根据服务器上的数据存储(缓存或持久)对其进行验证。这样您就可以放心,无论使用哪种cookie,该系统仍然可以正常工作。还要确保在用户注销后销毁唯一ID,以便不再遵守任何将来的请求(整页或Ajax)。 希望这能回答你的问题。