赞
踩
参考文章:
软件开发之常见前端安全漏洞:https://www.jianshu.com/p/bd4c6d749446?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation
常见前端漏洞:https://www.jianshu.com/p/60a17bef22ae
项目验收时,第三方机构进行了安全漏洞检查,发现了许多安全漏洞,参考相关文章后整理总结如下,望后续进行编码的过程中尽量避免类似问题:
window.location.href
跳转:对参数做HTML转义过滤,要过滤的字符包括:单引号、双引号、大于号、小于号、&符号
,防止脚本执行;使用 encodeURIComponent
转义。function htmlEncode(str) {
var entry = { "'": "'", '"': '"', '<': '<', '>': '>' };
str = str.replace(/(['")-><&\\\/\.])/g, function ($0) { return entry[$0] || $0; });
return str;
}
动态插入script标签
方式不推荐使用eval
方法,会有执行动态注入代码的风险:尽量不用,可使用替代方法function evil(fn) {
var Fn = Function; // 一个变量指向Function,防止有些前端编译工具报错
return new Fn('return ' + fn)();
}
// 接收消息时新增可信源校验,如下:
window.addEventListener('message', function (e) {
if (e.origin !== window.location.origin) {
return; // 不是可信源,则返回
}
// ……
});
// get请求且以json格式发送数据 - 危险 $.ajax({ type: 'GET', url: xxx, contentType: 'application/json', async: false, data: { a:xxx, b:xxx }, success: function(res) { // xxx }, error: function(res) { // xxx } })
可将请求方式修改为post,或将请求参数通过 JSON.stringify
转换:
$.ajax({
type: 'POST',
url: xxx,
contentType: 'application/json',
async: false,
data: JSON.stringify(data),
success: function(res) {
// xxx
}, error: function(res) {
// xxx
}
})
“password”、"username"等字眼会被认为以明文形式在系统或系统代码中存储密码或密码详细信息可能会以无法轻松修复的方式危及系统安全。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。