多语言展示
当前在线:932今日阅读:126今日分享:42

控制ISAPI扩展标识

ISAPI扩展和过滤器包含代码将直接暴露在Internet上。不要认为客户端收到的任何信息都是正确格式化,验证或可信任。ISAPI DLL应该包含验证函数防止天真和恶意用户竞争。天真客户可能会做一些意外动作,如尝试以脚本方式运行ISAPI DLL。恶意客户积极尝试破坏应用程序或通过采用302响应,从一个服务器作出新的请求直到另一服务器使用报头数据从第一个服务器获得欺骗身份。客户端请求时严格验证ISAPI响应。身份验证IIS处理一个请求之前,客户端身份验证将处理进程安全上下文(或标识)以便执行请求。复杂扩展依赖于工作线程直到完成其处理。默认,在它们运行时,工作线程和进程有相同安全标识,除非Win32 RevertToSelf函数被调用。进程和ISAPI应用程序线程标识在IIS应用程序标识表中声明。此表中忽略一个细节,ISAPI扩展GetExtensionVersion函数在本地系统安全上下文中调用,而其它ISAPI函数调用使用与请求关联的安全令牌。若ISAPI扩展访问安全资源,如IIS元数据库,它需要通过登录用户安全上下文从进程获取模拟令牌给线程。在ISAPI扩展中获取模拟令牌1. 调用ServerSupportFunction函数并指定HSE_REQ_GET_IMPERSONATION_TOKEN作为值给dwHSERequest参数。这个功能返回一个句柄给模拟令牌,它在EXTENSION_CONTROL_BLOCK结构存活期内有效。异步和同步扩展在处理获取安全令牌上略有不同。若同步操作调用ServerSupportFunction,那么EXTENSION_CONTROL_BLOCK有效直到HttpExtensionProc函数完成。若异步操作调用ServerSupportFunction,那么EXTENSION_CONTROL_BLOCK有效直到扩展调用ServerSupportFunction并指定HSE_REQ_DONE_WITH_SESSION的值给dwHSERequest参数。2. 在当前I/O线程调用ImpersonateLoggedOnUser函数或为指定线程调用SetThreadToken函数,使线程获得用户授权。这两个函数可通过第一步骤中调用ServerSupportFunction函数获取请求句柄给模拟令牌。3. 若要返回线程到进程的安全上下文中并运行,调用Win32 API RevertToSelf函数返回到原始线程标记。关于异步操作更多相关信息,请参阅 异步 I/O 处理。授权ISAPI扩展的安全性由Microsoft Windows安全模型派生而来。成功发送任何请求前,IIS将再次验证请求资源ACL的已通过用户授权的模拟令牌。此外,对于ASP 的ISAPI扩展请求,工作进程应用用户授权的令牌作为模拟令牌给线程调用进入ISAPI扩展。当ISAPI扩展处理请求时,模拟令牌(替代进程标识)应于所需操作。当选择应用程序隔离模型时(或当选择应用程序缓冲池标识为IIS 6.0方案下工作进程隔离模式),为你程序选择申请了一个最低权限设置。若进程标识和LocalSystem一样,具有最高权限,应用程序给予权限超过用户授权范围,并带来安全风险。ISAPI故障疑难解答一些ISAPI过滤器和扩展在一定条件下可能产生故障。当排除故障失败时,注意下列几点: o 为调试ISAPI过滤器或池中扩展,你必须附加到DLLHost.dll实例加载它。 o 若你的ISAPI过滤器或扩展调用任何形式的RevertToSelf,你的线程将作为WAM用户(IWAM_machinename)在应用程序缓冲池中运行。WAM用户没有LocalSystem帐户的大部分功能;因此,特权调用依赖于LocalSystem帐户,恢复后将发生故障。 o 若ISAPI过滤器或扩展使用线程池并从HttpExtensionProc或DllMain中创建辅助线程,由此产生的辅助工作线程将无法调整令牌与他们关联。因此,如调用API,如RevertToSelf,ImpersonateLoggedOnUser,和SetThreadToken,当从辅助工作线程调用时,将产生故障。你可以在创建辅助工作线程之前,通过调用RevertToSelf直接解决此问题。若你的ISAPI过滤器或扩展属于上面几点之一,并不能在池中运行,你仍然可以在IIS 5.0隔离模式下将它配置为进程内运行。若要完成此任务,你可以创建进程内应用程序,或你可以添加扩展到元数据库InProcessIsapiApps列表。该列表包含需要运行在进程内完整路径的任何扩展。列表上的所有扩展在进程内运行,不管包含它们应用程序的配置。创建进程内应用程序1. 创建新应用程序虚拟目录或服务器。2. 打开其属性页。3. 在 主目录,虚拟目录或目录属性页,应用程序设置下,选择 低(IIS进程)。添加扩展到 InProcessIsapiApps 列表 o 由于列表无用户界面,你必须使用命令行工作,如 Adsutil.vbs 或 Mdutil.exe,添加你的扩展。根键全路径是 HKEY_LOCAL_MACHINE/W3SVC/InProcessIsapiApps。
推荐信息