1

我有一个问题正在发生,没有明显的错误信息可以解决,但我已经确定了故障点。我有一个 ActiveX 控件,它采用本地保存的 word .doc 文件,然后将其发布到另一个 URL。

  Dim WebBrowser: Set WebBrowser = CreateObject("InternetExplorer.Application")

  'You can uncoment next line to see form results
  'WebBrowser.Visible = True

  'Send the form data to URL as POST request
  Dim bFormData() As Byte
  ReDim bFormData(Len(FormData) - 1)
  bFormData = StrConv(FormData, vbFromUnicode)

  WebBrowser.Navigate URL, , , bFormData, _
    "Content-Type: multipart/form-data; boundary=" + Boundary + vbCrLf

  Do While WebBrowser.busy
'    Sleep 100
    DoEvents
  Loop
  WebBrowser.Quit

单词 doc 存在于用户中,C:\Users\[username]\AppData\Local\Temp\所以这不是问题;该文件确实存在。

包含此 ActiveX 控件的 Web 应用程序的环境是IE9,并且该站点托管在具有 SSL 证书的 IIS 中。

在这些条件下它也一直有效

  • 带有SSL的IE7
  • 带有SSL的IE8
  • 没有SSL的 IE9

仅适用于具有以下条件的某些机器,这是所需的环境:

  • 带有 SSL 的 IE9

在某些机器上它可以工作,而在其他机器上则不行。我们可以从 ActiveX 控件中找到任何错误。当 POST 工作时,我们可以在服务器上的站点上进行验证,因为有日志记录来接收文件。在它不起作用的情况下,POST 永远不会在服务器上成功发生,并且接受文件的 URL 永远不会被调用。

这告诉我 ActiveX 控件在使用文件进行 POST 的某些机器上存在问题,并且可能是 IE9 中的安全设置。但是,我们比较了工作机器和非工作机器上的所有IE 设置,找不到任何差异。

有谁知道什么安全限制可以防止这个本地保存在用户临时目录中的文件无法成功地被拾取并通过 POST 上传到 URL?它再次与带有 SSL 的 IE7 和 IE8 以及没有 SSL 的 IE9 一起工作。然而,使用SSL在 IE9 中工作是零星的。

4

1 回答 1

0

每台机器上安装的证书会有所不同,所以这是最大的共同因素。以下是它如何影响 POST 的解释:

我们最近确定忽略证书吊销检查失败的 URLMon 的代码(Win8、Win7 和可能更早版本)不适用于内容上传(例如 HTTP POST)。因此,如果证书吊销检查失败,这对上传是致命的(例如,IE 将显示页面无法显示错误消息;其他客户端将显示不同的错误)。然而,这在现实世界中并不重要,因为在大多数情况下,用户首先从目标 HTTPS 站点执行下载(HTTP GET),结果服务器的证书被缓存,并带有“忽略撤销检查失败”豁免进程的生命周期,因此后续的 POST 会继承该标志并成功。如果当前进程中对 HTTPS 站点的第一个请求是上传(例如

以下是如何排除故障的说明:

您可以配置 IE 以根据数字签名的状态采取不同的操作。签名可以是未签名的、使用有效证书签名的或使用无效证书签名的。

对于已签名或未签名的软件,您可以将 IE 配置为

  • 防止从区域下载或运行软件

  • 无需用户干预即可从区域下载并运行软件

  • 查询用户选择是从区域下载还是运行软件

您如何配置 IE 以响应证书取决于各种因素,例如您对内容来源的安全区域的信任级别。如果您在组织中部署 IE,您还需要考虑您对目标用户组的信任程度以及用户拥有的技术专长水平。例如,您可能信任来自 Intranet 的未签名软件,但不信任来自 Internet 的未签名活动内容。在这种情况下,您可以将 IE 配置为在无需用户干预的情况下自动从 Intranet 下载未签名的活动内容,并防止从 Internet 下载未签名的活动内容。

参考

于 2013-10-06T02:21:26.707 回答