- A+
1.什么是HttpOnly?
如果您在cookie中设置了HttpOnly属性,那么通过js脚本将无法读取到cookie信息,这样能有效的防止XSS攻击,具体一点的介绍请google进行搜索
2.javaEE的API是否支持?
目前sun公司还没有公布相关的API,但PHP、C#均有实现。搞javaEE的兄弟们比较郁闷了,别急下文有变通实现
3.HttpOnly的设置样例
javaEE
1
2
|
response.setHeader( "Set-Cookie" , "cookiename=value; Path=/;Domain=domainvalue;Max-Age=seconds;HTTPOnly"); |
具体参数的含义再次不做阐述,设置完毕后通过js脚本是读不到该cookie的,但使用如下方式可以读取
1
|
Cookie cookies[]=request.getCookies(); |
C#
1
2
3
|
HttpCookie myCookie = new HttpCookie( "myCookie" ); myCookie.HttpOnly = true ; Response.AppendCookie(myCookie); |
VB.NET
1
2
3
|
Dim myCookie As HttpCookie = new HttpCookie( "myCookie" ) myCookie.HttpOnly = True Response.AppendCookie(myCookie) |
但是在 .NET 1.1 ,中您需要手动添加
1
|
Response.Cookies[cookie].Path += ";HTTPOnly" ; |
PHP4
1
|
header( "Set-Cookie: hidden=value; httpOnly" ); |
PHP5
1
|
setcookie( "abc" , "test" , NULL, NULL, NULL, NULL, TRUE); |
最后一个参数为HttpOnly属性
于HttpOnly对于防范XSS来获取cookies信息的分析,请参考剑心同学写的:利用httponly提升应用程序安全性,这里仅把常用的一些Web开发语言的设置方法整理总结下,备用。
javaEE中的设置:
API中没有提供具体的操作方法或者函数属性来设置,不知道后续版本是否会提供,下面为变通设置方法:
————————————————————————————–
response.setHeader(”Set-Cookie”,“cookiename=value;
Path=/;Domain=neeao.com;Max-Age=seconds;HTTPOnly”);
————————————————————————————–
ASP.NET中的设置
.net2.0以上版本支持在Web.config文件中来配置全局的httponly,设置如下,在web.config中添加一个节点即可:
------------------------------------------------------------------
<httpCookieshttpOnlyCookies="true"/>
------------------------------------------------------------------
.net2.0以上版本cookie对象中,直接有一个HttpOnly的参数供调用,使用方法如下:
C#代码:
------------------------------------------------------------------
HttpCookiemyCookie=newHttpCookie("myCookie");
myCookie.HttpOnly=true;
Response.AppendCookie(myCookie);
-------------------------------------------------------------------
vb.net代码
-------------------------------------------------------------------
DimmyCookieAsHttpCookie=newHttpCookie("myCookie")
myCookie.HttpOnly=True
Response.AppendCookie(myCookie)
-------------------------------------------------------------------
在asp.net1.1中也可以设置全局的cookiesHttpOnly,在全局文件Global.asax的application节点的Application_EndRequest事件中添加:
-------------------------------------------------------------------
protectedvoidApplication_EndRequest(Objectsender,EventArgse)
{
stringauthCookie=FormsAuthentication.FormsCookieName;
foreach(stringsCookieinResponse.Cookies)
{
if(sCookie.Equals(authCookie))
{
&nbweb开发语言sp; Response.Cookies.Path+=";HttpOnly";
}
}
}
-------------------------------------------------------------------
在代码中写的话,就需要这样来添加了:
--------------------------------------------
Response.Cookies.Paandroid开发语言th+=";HTTPOnly";
---------------------------------------------
PHP中的设置
PHP5.2以上版本已支持HttpOnly参数的设置,同样也支持全局的HttpOnly的设置,在php.ini中
-----------------------------------------------------
session.cookie_httponly=
-----------------------------------------------------
设置其值为1或者TRUE,来开启全局的Cookie的HttpOnly属性,当然也支持在代码中来开启:
-----------------------------------------------------
<php
ini_set("session.cookie_httponly",1);
//or
session_set_cookie_params(0,NULL,NULL,NULL,TRUE);
>
-----------------------------------------------------
Cookie操作函数setcookie函数和setrawcookie函数也专门添加了第7个参数来做为HttpOnly的选项,开启方法为:
-------------------------------------------------------
setcookie("abc","test",NULL,NULL,NULL,NULL,TRUE);
setrawcookie("abc","test",NULL,NULL,NULL,NULL,TRUE);
-------------------------------------------------------
对于PHP5.1以前版本以及PHP4版本的话,则需要通过header函数来变通下了:
-------------------------------------------------------------
<php
header("Set-Cookie:hidden=value;httpOnly");
>
-------------------------------------------------------------
Asp中的设置
asp的内置对象中没有提供相关方法,只能变通来实现了:
-----------------------------------------------------<%
‘**************************************************
‘ASP中输出httponlycookieIE6.0以上浏览器支持
‘WDFrog
‘2009-04-15
‘<metahttp-equiv=”Content-Type”content=”text/html;charset=gb2312″>
‘***************嵌入式开发语言***********************************
‘———-SetHttpOnlyCookie—————————————-
‘功能:设置HttpOnlyCookie
‘参数:expDate为保到期,0表示不设置,设置为过去某一时间表示清除
‘参数:domain为空(string.Empty)表示不设置
‘——————————————————————-
FunctionSetHttpOnlyCookie(cookieName,cookieValue,domain,path,expDate)
Dimcookie
cookie=cookieName&“=”&Server.URLEncode(cookieValue)&“;path=”&path
IfexpDate<>0Then
cookie=cookie&“;expires=”&DateToGMT(expDate)
EndIf
Ifdomain<>“”Then
cookie=cookie&“;domain=”&domain
EndIf
cookie=cookie&“;HttpOnly”
CallResponse.AddHeader(”Set-Cookie”,cookie)
EndFunction
‘————-getGMTTime————
‘参数:sDate需要转换成GMT的时间
‘———————————
FunctionDateToGMT(sDate)
DimdWeek,dMonth
DimstrZero,strZone
standroid 开发语言rZero=”00″
strZone=”+0800″
dWeek=Array(”Sun”,”Mon”,”Tue”,”Wes”,”Thu”,”Fri”,”Sat”)
dMonth=Array(”Jan”,”Feb”,”Mar”,”Apr”,”May”,”Jun”,”Jul”,”Aug”,”Sep”,”Oct”,”Nov”,”Dec”)
DateToGMT=dWeek(WeekDay(sDate)-1)&”,“&Right(strZero&Day(sDate),2)&”“&dMonth(Month(sDate)-1)&”“&Year(sDate)&”“&Right(strZero&Hour(sDate),2)&”:”&Right(strZero&Minute(sDate),2)&”:”&Right(strZero&Second(sDate),2)&”“&strZone
EndFunction
‘参考
‘CallSetHttpOnlyCookie(”cookieOnly1″,”onlyValue”,”.gyzs.com”,”/”,0)
%>
----------------------------------------------------
参考文献:
1.http://www.owasp.org/index.php/HTTPOnly
2.http://blogs.msdn.com/dansellers/archive/2006/03/13/550947.aspx
3.http://ilia.ws/archives/121-http最新编程语言排行榜Only-cookie-flag-support-in-PHP-5.2.html
4.http://www.asp101.com/tips/index.aspid=160
5.http://www.cnblogs.com/wdfrog/archive/2009/04/15/1436493.html
https://www.cnblogs.com/strugglesMen/archive/2011/07/04/2097110.html
- 我的微信
- 这是我的微信扫一扫
- 我的微信公众号
- 我的微信公众号扫一扫