xss a标签href 输出问题解决过程中的一些随记
最近网站在安全检测中一直出现xss问题,查看反馈报告发现两类问题
1.jQuery版本过低导致
这个可以通过升级jQuery版本来解决:本次我的是从3.x.x 升级到3.5.0以上
但是在jQuery版本过老的情况下,不建议跨度太大的升级,否则会导致一系列的不兼容以及方法失效等问题
这样可以采用模糊jQuery版本的方法,比如更改jQuery文件名称,并修改jQuery源文件中的版本号信息
比如:1.2.0 可以改为 01.02.00 这样可以避免被检查到真实的jQuery版本
注意:在修改jQuery链接时,要把之前的地址从页面中删除,因为注释掉仍然会被检测到(在此问题上我头大了好久,大概是憨憨行为)
2.感觉像是a标签中href属性中容易被篡改插入js代码导致的问题
搜索了很多解决方案,但感觉不是很靠谱。原因是项目是一个老项目,经过很多交接过程,到我这里已经有很多问题不可预知,因此不适合改动大的处理办法。
于是在查找了一些方法后,最终还是准备尝试通过过滤href中的链接是否符合开头为 http 或 https 来尝试解决这个问题
主要方法如下:
//页面加载初始化 过滤a标签 href属性中的xss function filterXSS_tag_a_Init() { console.log(‘init‘); let a = document.getElementsByTagName(‘a‘); console.log(a.length); for (var i = 0; i < a.length; i++) { filterXSS_tag_a_click(a[i]); a[i].setAttribute(‘onclick‘, ‘filterXSS_tag_a_click(this)‘); } } //在a标签点击时 过滤a标签 href属性中的xss function filterXSS_tag_a_click(obj) { if (obj.href.indexOf(‘http‘) != 0 && obj.href.indexOf(‘https‘) != 0) { console.log(‘无效的链接‘); obj.href = ‘#‘; obj.innerText = ‘#‘; } }
js中给a标签添加onclick事件:setAttribute(‘onclick‘, ‘filterXSS_tag_a_click(this)‘);
不选择使用jQuery的原因也是因为代码过于老,引入新的东西会有可能对之前的功能造成影响
以上两个方法 一个在页面初加载时,先对页面内所有a标签先进行一次过滤,并为所有a标签添加onclick事件
另一个在标签的onclick事件中被调用,防止中间被篡改。
其实好像可以在加载时只为a标签添加onclick,并在点击时进行过滤就ok了。
原文:https://www.cnblogs.com/catherinehu/p/14177617.html