我正在用 C++ 为 IIS7/8 编写本机模块,其目的是拒绝文件上传进入具有特定扩展名的 IIS。
我已经使用 OnReadEntity 让模块工作,并且可以在上传文件的发布请求中看到请求正文。
但是,由于对 c++ 非常缺乏经验,我不知道我应该如何可靠地从请求正文中解析出 Content-Disposition 字段,以便我可以获得所有文件名。
下面是一个示例请求:
------WebKitFormBoundaryUomVPwKHGvBwvDhP
Content-Disposition: form-data; name="attach1"; filename="YSMIsapiFilter.sln"
Content-Type: text/plain
SomeDataHere
------WebKitFormBoundaryUomVPwKHGvBwvDhP
Content-Disposition: form-data; name="attach2"; filename="ysmISAPIFilter.log"
Content-Type: application/octet-stream
I AM A LOG
------WebKitFormBoundaryUomVPwKHGvBwvDhP
Content-Disposition: form-data; name="enter_a_number"
------WebKitFormBoundaryUomVPwKHGvBwvDhP--
ol: max-age=0
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8
Cookie: ASPSESSIONIDSSSRCTRS=GHMFFGABJAAOAEHFCFIOOJIO
Host: localhost:8080
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.36
Upgrade-Insecure-Requests: 1
有谁知道 httpserv.h API 中是否有东西可以为我做这件事。或者,如果在 Visual Studio 2015 中构建了一个免费的非商业 mime 类型解析器来执行此操作。
或者我需要自己解析它。
据我所知,Content-Disposition 和 content-type 应该始终是以 ------ 开头的行之后的第 2 行和第 3 行,webkitformBoundary 在客户端发帖(IE、Chrome、FireFox、等等等等)。然后我只需要跳到下一个-----如果有的话。
Content-Disposition 通过 RFC 规范声明它将始终是表单数据;后跟表单字段“attach1”的名称,然后是“文件”类型输入的情况下与该输入“文件名”相关的任何数据。
只是在这一点上寻找正确方向的点。
我已经尝试过使用 Mimetic,但是当我将它的标题添加到我的项目时,我无法构建它。它附带的 Win32 项目构建,但它不会构建在我的。