我在工作中使用的应用程序只能在旧版本的Internet Explorer中运行。我发现原因是由于ASPX文件中的脚本在登录后错误地访问了document.forms属性:
document.forms('frmAutoSubmit').DocList.value = window.WebCtl1.GetDocDirectoryList('');
我创建了一个Google Chrome扩展程序来解决这个问题,因为我没有应用程序的源代码,也无权以任何方式更改应用程序。该扩展创建一个脚本元素并将其附加到页面。以下是执行的代码:
**inject.js**
(function (document) {
var i = 0, j = document.forms.length;
// Extend document to allow functional use
document._forms = [];
for (; i < j; ++i) {
document._forms[i] = document.forms[i];
}
document.forms = function (form) {
return document._forms[form];
};
console.debug('done');
})(document);
加载扩展并测试页面后,即使我的console.debug
语句先执行,我仍然会收到相同的错误。
done inject.js:18
Uncaught TypeError: Property 'forms' of object #<HTMLDocument> is not a function
document.forms
是一个只读且不可更改的参数吗?还有另一种攻击方式吗?