前端-基于客户端DOM的存储型XSS代码注入

前端项目在安全漏洞扫描的时候,爆出了基于客户端DOM的存储型代码注入的问题,经查是因为使用了浏览器缓存比如localstorage、sessionstorage、cookie时候,存入和读取过程中值可能被篡改,引起xss安全问题


这里拿localstorage作为示例,当攻击者直接在控制台修改你的localstorage值后,你在读取该值并进行运行的时候就会有被攻击的风险,解决方案就是对值进行一个加密,当然加密的复杂度越高,你的程序也就越安全。
在这里简单的进行一个base64加解密,作为demo示例。

由于base64在编码过程中遇到复杂的数据类型比如对象或者数组时会报错,所以同时也要进行decodeURIComponent/encodeURIComponent操作。

缓存里的值也应该是字符串类型,所以还涉及JSON.stringify/JSON.parse方法。

加密方法
function encrypt(data, key, iv) {
    
    
    return window.btoa(encodeURIComponent(data))
  }


解密方法
function decrypt(data, key, iv) {
    
    
    return decodeURIComponent(window.atob(data))
  }

存值方法

let data = {a:1,b:[]}

localStorage.setItem('a', encrypt(JSON.stringify(data)))
取值方法
var a = JSON.parse(decrypt(localStorage.a)

猜你喜欢

转载自blog.csdn.net/qq_35517283/article/details/131724460