Cpp--查看文章
 
用ISAPI Filter设置HttpOnly属性
发布时间:2010-11-25

作者:Tony Qu

说到ISAPI很多人会觉得很陌生,因为如果你是做ASP.NET开发的话,ISAPI的方式已经过时,取而代之的是HttpHandler和HttpModule,说到这两个东西很多人估计明白了,ISAPI可以说是早期实现请求拦截和处理的唯一途径,只是随着ASP.NET的流行,渐渐淡出了开发人员的视野。

 

此文的开发场景是这样的,我们公司使用古老的ASP语言,但是ASP的Response.Cookies属性中没有HttpOnly(但.Net的Cookie对象是有HttpOnly属性的),有帖子说可以利用Path属性来设置HttpOnly,可以这么做是因为我们在页面中设置cookie值的动作都会被转换成Set-Cookie头,如下

Set-Cookie: user=t=bfabf0b1c1133a822; path=/
但如果要让cookie变成HttpOnly,就需要用如下格式:
Set-Cookie: user=t=bfabf0b1c1133a822; path=/;HttpOnly

理论上讲设置Path是完全可行的,因为说白了就是在原来Path的基础上增加;HttpOnly,

但经试验表明这行不通,比如我用下面的代码

Response.Cookies(“user”).Path+=”;HttpOnly”;

得到的结果却是

Set-Cookie: user=t=bfabf0b1c1133a822; path=/3B%;HttpOnly

这显然是不行的,所以我们不得不考虑用ISAPI来实现。

 

ISAPI基础

首先,请不要把ISAPI Extension和ISAPI Filter混为一谈,这两个东西虽然只差一个字,但却完全是两样东西,所提供的接口是完全不一样的。ISAPI Extension是一个类似页面的dll,你可以对它做post或get提交,如http://localhost/abc.dll?a=1,从严格意义上讲它没有拦截的功能,和cgi差不多。而ISAPI Filter则是具有过滤功能的,你可以在IIS网站的属性中添加需要加载的ISAPI Filter,例如asp.net的实现也使用了一个ISAPI Filter,叫做aspnet_filter.dll。

ISAPI Filter说到底就是一个DLL,它有两个主要的接口:GetFilterVersion和HttpFilterProc,如下所示:

BOOL WINAPI __stdcall GetFilterVersion(HTTP_FILTER_VERSION *pVer) 
{ 
 /* Specify the types and order of notification */ 
 
 pVer->dwFlags = (SF_NOTIFY_PREPROC_HEADERS | SF_NOTIFY_AUTHENTICATION | 
 SF_NOTIFY_URL_MAP | SF_NOTIFY_SEND_RAW_DATA | SF_NOTIFY_LOG | SF_NOTIFY_END_OF_NET_SESSION ); 
 
 pVer->dwFilterVersion = HTTP_FILTER_REVISION; 
 
 strcpy(pVer->lpszFilterDesc, "Upper case conversion filter, Version 1.0"); 

[1] [2] [3] [4] [5] [6] [7] [8] [9] 下一页



 [Cpp]Windows编程--伪句柄 (佚名,01-06)
> Windows编程--伪句柄 Posted on 2011-01-05 21:22 0hui0 阅读(59) 评论(0) 编辑 收藏 所属分类: Windows编程 <!-- 在系统中,对象分两类:核心对象和用户对象。如进程对象,线程对象……

 [Cpp]vs下调试多个c项目联调 (佚名,08-10)
> 一.Debug版本和Release版本的区别Debug通常称为调试版本,它包含调试信息,并且不作任何优化,便于程序员调试程序。Release称为发布版本,它往往是进行了各种优化,使得程序在代码大小和运行速度上都是最优的,以便用户很好地使用。只有Debug版本的程序才能设置断点、单步……

 [Cpp]HEVC bit depth increasment (佚名,10-29)
Body> /// encoder configuration class  class TAppEncCfg { // coding tools (bit-depth) UInt m_uiInputBitDepth; ///< bit-depth of input fil……

 [Cpp]正确使用STL-MAP中Erase函数 (佚名,08-10)
> 正确使用STL-MAP中Erase函数 一切尽在代码中#include <iostream>#include <map>#include <string>using namespace std ;int main(void) { ……

 [Cpp]100题_16 O(logn)求Fibonacci数列 (佚名,03-09)
Body> 我们很容易想到递归和循环的方法,最快是O(n)的 对于O(lgn)的解法,我们要用到公式: f(n) f(n-1)        1 1    (n-1)f(……

 


©2008 MyExt.cn
本站文章来自互联网,仅供学习和研究使用,如有版权问题,请发送Email:myext@126.com.