windows7 IE的保护模式对于js form.submit()自动执行提交的影响

近期在完成一个项目充值支付业务逻辑时,需要完成用户在网站上提交充值订单,网站后端处理充值订单信息,发布“网站正在跳转,进入充值平台”的提示信息,跳转至充值平台进行充值的这样一个流程。

因为直接采用的是discuzX进行二次开发,在xp、2003等各浏览器下业务逻辑测试都没有问题。就是在交付客户测试中,发现客户的IE9浏览器不能正常的充值支付;发现是停顿在了跳转消息发布的那一步中了,也就是说后端返回自建的form表单,并没有正确的提交。


// 对discuzx的提交进行了更改,没有采用ajax提交;而是直接订单form表单新页面提交,后端直接echo数据。

echo '<form id="payform" action="'.$requesturl.'" method="post"></form><script type="text/javascript" reload="1">$(\'payform\').submit();</script>';
dexit();

确实是个问题了,刚开始以为是订单form新页面提交后,新产生的此页面渲染模式有关,从而建立完整的文档结构


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7; IE=EmulateIE9">

...

但是效果还是没好转,只是在完成提示信息;自己form表单还是没有进行自提交。再次google查看

不过在查看的过程中发现了这样一个问题,就是在xp或2003的系统上是能够正常跳转使用的;但在win7 ie下则不可以了,但是其他浏览器则行,就算是IE内核,但非ie官方的浏览器也是正常的。

于是对比2003与win7下的IE8设置,发现了下图独特的地方。

多了一个“启动保护模式”选择框!
另一位同事尝试的取消这个勾选框后,重启IE 再次测试就能正常的跳转了。
至此问题明了了,不过这个选择框是windows7上系列浏览器的默认勾选状态;所以不可能要求windows7的用户去更改此项设置,且会招致用户的反感。
于是在想办法的过程中参考了其他网站的api支付跳转实现效果,发现用户充值订单表单提交后,在跳转信息的提示过程中,程序后端并没有直接跳转至支付平台,而是再次跳转至网站本地后端的一个页面,而这个跳转的过程是使用window.location.href来实现的,而目标页面则直接通过header location跳转到了目标支付平台,也就是充值表单数据最终是以get方式发布至支付平台。(安全性方面不知道是否降低了,待验证)
代码结构再次更改后,2003下测试正常;在windows7下测试也能执行正常的跳转了!为此,新添加一个php页面用来处理添加充值订单,header页面跳转。而原form接受页面只是进行数据的收集以及跳转信息的提示。
在业务逻辑构造的过程中,查看了discuzx2.5最新版本;支付充值这块地方的代码还是没有变化还是采用自建from表单提交的方式实现的。于是在discuz官网论坛上面去搜索“IE9 充值”果然有很多用户的帖子,
而官方团队对此的回复是“该问题我们已经发现,这问题与环境有关,且不好重现,之前装有安全软件的一些用户也出现空白现象,往后我们再排查下是否是产品本身的兼容性问题。 感谢您的反馈1”
不过已经有用户发现了这样的问题了,并且有了对应的解答
知识普及:
IE保护模式原理简述

IE保护模式(Protected Mode),以前也叫做IE低权利(Lowcenters)。IE保护模式可能是Windows Vista里最严厉的安全措施,比我们熟知的UAC(用户帐户控制)还要严厉。事实上,IE保护模式依赖于Windows Vista的以下三大特性:

(1)UAC(用户帐户控制)

相信大家已经很熟悉了,可以让管理员帐户自动获得一个标准用户的访问令牌,以减少WindowsVista系统的受攻击面。

(2)MIC(强制完整性控制)

这是WindowsVista安全架构中新增加的一种检测机制。大家知道,Windows2000/XP安全体系里,安全子系统把进程的访问令牌和 资源的访问控制列表进行匹配比较,以确认该进程是否具有访问该资源的权限。而在WindowsVista下,除了遵守传统的安全控制机制外,还必须检查进 程和资源对象的完整性级别,完整性级别低的进程,不能写入完整性级别高的资源对象。

(3)UIPI(用户界面特权隔离)

完整性级别低的进程,不能向完整性级别高的进程发送Window消息。

windows IE浏览器安全设置的注意事项:

在这里,我们必须了解以下三点注意事项:

1.只有IE浏览器才能享用保护模式带来的好处,第三方的浏览器、或者以IE为内核的一些外挂浏览器无法获得保护模式的功能。

2.只有确认安全的网站,才能添加到可信站点区域。错将问题站点添加到可信区域,将会导致系统安全的严重受损。

3.最好能够对旧版插件进行改进,以确保插件的兼容性,这样可以大大提高系统安全。

扩展阅读

Internet Explorer 保护模式有何功能?

IE8浏览器安全设置 更好的安全浏览

关闭“保护模式”后,IE9还有没有安全?

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*