提问人:Dandelion 提问时间:5/19/2023 最后编辑:Dandelion 更新时间:5/19/2023 访问量:160
从 location.pathname 创建锚链接并清理数据
Create anchor link from location.pathname and sanitise data
问:
嗨,我正在尝试从 的内容生成面包屑,一切正常,除了当我通过 Veracode 运行代码时,它抱怨输入不受信任。window.location.pathname
我尝试将不受信任数据上的所有字符替换为以下内容:
untrustedData.replace(/[^A-Za-z0-9]/g, '');
Veracode仍然抱怨。以下是我所做的大致工作
const breadcrumbsElement = document.querySelector('#breadcrumbs');
const pathNames = window.location.pathname.split('/');
const sanitiseString = (string) => string.replace(/[^A-Za-z0-9]/g, '');
const addCrumb = (sanitisedRoute, element) => {
const newCrumb = document.createElement('a');
newCrumb.href = `/consumer/${sanitisedRoute}`;
newCrumb.innerText = sanitisedRoute;
element.appendChild(newCrumb);
};
pathNames.forEach((route) => {
addCrumb(sanitiseString(route), breadcrumbsElement);
});
这是它给我的错误:
缺陷 ID:12
描述:此对 href() 的调用包含跨站脚本 (XSS) 缺陷。该应用程序使用不受信任的输入填充 HTTP 响应,允许攻击者嵌入恶意内容,例如 Javascript 代码,这些内容将在受害者浏览器的上下文中执行。XSS 漏洞通常被用于窃取或操纵 cookie、修改内容呈现和泄露机密信息,并定期发现新的攻击媒介。
修复:在使用所有不受信任的数据构造 HTTP 响应的任何部分之前,请对它使用上下文转义。应根据不受信任数据的具体用例来选择转义方法,否则可能无法完全抵御攻击。例如,如果数据正在写入 HTML 页面的正文,请使用 HTML 实体转义;如果要将数据写入属性,请使用属性转义;等。OWASP Java 编码器库和 Microsoft AntiXSS 库都提供上下文转义方法。有关上下文转义的更多详细信息,请参阅 https://github.com/OWASP/CheatSheetSeries/blob/master/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.md。此外,作为最佳实践,请始终验证不受信任的输入,以确保其符合预期的格式,并尽可能使用集中式数据验证例程。
Veracode 特别抱怨 和element.appendChild()
newCrumb.href = `baseUrl${untrustedData}`;
我的问题是我如何清理window.location.pathNames
,是否有更好的可信方法来获取当前pathNames,或者这只是Veracode的误报?
答: 暂无答案
评论
const breadcrumbs = window.location.pathname.split('/').map(string => string.replace(/[^A-Za-z0-9]/g, '')).map(path => { const newCrumb = document.createElement('a'); newCrumb.href = `/consumer/${path}`; newCrumb.innerText = path; }).join(" => ")
baseUrl${untrustedData}
window.open(untrustedData)
element.innerText