首页 > 代码库 > CSRF的防御之HttpOnly

CSRF的防御之HttpOnly

CSRF攻击的全称是跨站请求伪造(cross site request forgery),是一种对网站的恶意利用,尽管听起来跟XSS跨站脚本攻击有点相似,但事实上CSRF与XSS差别很大,XSS利用的是站点内的信任用户,而CSRF则是通过伪装来自受信任用户的请求来利用受信任的网站。你可以这么理解CSRF攻击:攻击者盗用了你的身份,以你的名义向第三方网站发送恶意请求。CRSF能做的事情包括利用你的身份发邮件、发短信、进行交易转账等等,甚至盗取你的账号。

 

 

           

 

  C#代码实现,本想自己写一个,但是发现万能的MSDN上避免有个现成的果断拿来之,MSDN上的啰嗦:

  

该属性有助于缓解跨站点脚本威胁,这种威胁可能导致 Cookie 被窃取。 窃取的 Cookie 可以包含标识站点用户的敏感信息,如 ASP.NET 会话 ID 或 Forms 身份验证票证,攻击者可以重播窃取的 Cookie,以便伪装成用户或获取敏感信息。 如果兼容浏览器接收到 HttpOnly Cookie,则客户端脚本不能对它进行访问。
警告说明
将 HttpOnly 属性设置为 true,并不能防止对网络频道具有访问权限的攻击者直接访问该 Cookie。 针对这种情况,应考虑使用安全套接字层 (SSL) 来提供帮助。 工作站的安全也很重要,原因是恶意用户可能使用打开的浏览器窗口或包含持久性 Cookie 的计算机,以合法用户的标识获取对网站的访问。

  

      

<%@ Page Language="C#" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><script runat="server">    void Page_Load(object sender, EventArgs e)    {        // Create a new HttpCookie.        HttpCookie myHttpCookie = new HttpCookie("LastVisit", DateTime.Now.ToString());        // By default, the HttpOnly property is set to false         // unless specified otherwise in configuration.        myHttpCookie.Name = "MyHttpCookie";        Response.AppendCookie(myHttpCookie);        // Show the name of the cookie.        Response.Write(myHttpCookie.Name);        // Create an HttpOnly cookie.        HttpCookie myHttpOnlyCookie = new HttpCookie("LastVisit", DateTime.Now.ToString());        // Setting the HttpOnly value to true, makes        // this cookie accessible only to ASP.NET.        myHttpOnlyCookie.HttpOnly = true;        myHttpOnlyCookie.Name = "MyHttpOnlyCookie";        Response.AppendCookie(myHttpOnlyCookie);        // Show the name of the HttpOnly cookie.        Response.Write(myHttpOnlyCookie.Name);    }</script><html xmlns="http://www.w3.org/1999/xhtml" ><head runat="server">    <title>ASP.NET Example</title></head><body><script type="text/javascript">function getCookie(NameOfCookie){    if (document.cookie.length > 0) {     begin = document.cookie.indexOf(NameOfCookie+"=");     if (begin != -1)   {     begin += NameOfCookie.length+1;       end = document.cookie.indexOf(";", begin);      if (end == -1) end = document.cookie.length;      return unescape(document.cookie.substring(begin, end));             }   }return null;  }</script><script type="text/javascript">    // This code returns the cookie name.    alert("Getting HTTP Cookie");    alert(getCookie("MyHttpCookie"));    // Because the cookie is set to HttpOnly,    // this returns null.    alert("Getting HTTP Only Cookie");    alert(getCookie("MyHttpOnlyCookie"));</script> </body></html>

 

 相关资料:http://msdn.microsoft.com/zh-cn/library/ms533046(vs.85).aspx

  http://msdn.microsoft.com/zh-cn/library/ms533046(vs.85).aspx

  http://kb.cnblogs.com/page/115136/

  图片来自陈康贤<<大型分布式网站架构设计与实践>>

 

CSRF的防御之HttpOnly