JavaScript 安全指南

Last Edited Time
Feb 16, 2022 02:22 AM
date
Jun 11, 2021
slug
javascript-secure-guide
status
Published
tags
必读系列
Secure Guide
个人笔记
summary
JavaScript页面类: - 原生DOM API的安全操作 - 流行框架/库的安全操作 - 页面重定向 - JSON解析/动态执行 - 跨域通讯 - 敏感/配置信息 - 第三方组件/资源 Node.js后台类: - ...
type
Post

相关资料

Reference

Tencent/secguide
1.1.1【必须】HTML标签操作,限定/过滤传入变量值 使用innerHTML=、outerHTML=、document.write()、document.writeln()时,如变量值外部可控,应对特殊字符(&, , ", ')做编码转义,或使用安全的DOM API替代,包括:innerText= 1.1.2【必须】HTML属性操作,限定/过滤传入变量值 使用 element.setAttribute(name, value);时,如第一个参数值 name 外部可控,应用白名单限定允许操作的属性范围。 使用 element.setAttribute(name, value);时,操作 a.href、 ifame.src、 form.action、 embed.src、 object.data、 link.href、 area.href、 input.formaction、 button.formaction属性时,如第二个参数值 value外部可控,应参考 JavaScript页面类规范1.3.1 部分,限定页面重定向或引入资源的目标地址。 1.2.1【必须】限定/过滤传入jQuery不安全函数的变量值 引入jQuery 1.x(等于或低于1.12)、jQuery2.x(等于或低于2.2),且使用$()时,应优先考虑替换为最新版本。如一定需要使用,应对传入参数值中的特殊字符(&, , ", ')做编码转义。 使用.attr()操作 a.href、 ifame.src、 form.action、 embed.src、 object.data、 link.href、 area.href、 input.formaction、 button.formaction属性时,应参考 JavaScript页面类规范1.3.1 部分,限定重定向的资源目标地址。 使用.attr(attributeName, value)时,如第一个参数值 attributeName 外部可控,应用白名单限定允许操作的属性范围。 使用$.getScript(url [, success ])时,如第一个参数值 url外部可控(如:从URL取值拼接,请求jsonp接口),应限定可控变量值的字符集范围为:[a-zA-Z0-9_-]+ 。 1.2.2【必须】限定/过滤传入Vue.js不安全函数的变量值 使用v-html时,不允许对用户提供的内容使用HTML插值。如业务需要,应先对不可信内容做富文本过滤。 1.3.1【必须】限定跳转目标地址 1.4.1【必须】使用安全的JSON解析方式 1.5.1【必须】使用安全的前端跨域通信方式 具有隔离登录态(如:p_skey)、涉及用户高敏感信息的业务(如:微信网页版、QQ空间、QQ邮箱、公众平台),禁止通过document.domain降域,实现前端跨域通讯,应使用postMessage替代。 1.5.2【必须】使用postMessage应限定Origin 2.1.1【必须】禁止明文硬编码AK/SK 禁止前端页面的JS明文硬编码AK/SK类密钥,应封装成后台接口,AK/SK保存在后端配置中心或密钥管理系统 2.2.1【必须】使用可信范围内的统计组件 2.2.2 【必须】禁止引入非可信来源的第三方JS 2.3.1【推荐】部署CSP,并启用严格模式 1.1.1【必须】按类型进行数据校验 所有程序外部输入的参数值,应进行数据校验。校验内容包括但不限于:数据长度、数据范围、数据类型与格式。校验不通过,应拒绝。 关联漏洞:纵深防护措施 - 安全性增强特性 1.2.1 【必须】使用child_process执行系统命令,应限定或校验命令和参数的内容 适用场景包括: child_process.exec, child_process.execSync, child_process.spawn, child_process.spawnSync, child_process.execFile, child_process.execFileSync 调用上述函数,应首先考虑限定范围,供用户选择。 使用 child_process.exec或 child_process.execSync时,如果可枚举输入的参数内容或者格式,则应限定白名单。如果无法枚举命令或参数,则必须过滤或者转义指定符号,包括:|;&$()><`!
Tencent/secguide