xss&csrf

85 阅读2分钟

什么是xss

Cross-Site Scripting(跨站脚本攻击)简称xss,是一种代码注入攻击,攻击者通过在目标网站上注入恶意脚本,使之在用户的浏览器上运行,利用这些恶意脚本,攻击者可以获取用户的敏感信息,如Cookie、sessionID等,进而危害数据安全。

xss分类

  • 存储型XSS
    • 将恶意代码提交到目标网站的数据库中,用户打开网站时,服务器将恶意代码从数据库中取出,拼接在HTML中返回给浏览器
  • 反射型XSS
    • 攻击者构造出特殊的URL,其中包含恶意代码,用户打开时,服务器将恶意代码从URL中取出,拼接在HTML中返回给浏览器
  • DOM型XSS
    • 攻击者构造出特殊的URL,其中包含恶意代码,用户打开时,前端javascript取出URL中的恶意代码并执行

XSS的预防

  • 输入过滤
    • 前端进行过滤无意义,攻击者可直接构造请求绕开前端提交恶意代码
    • 后端写入数据库前对输入进行过滤,内容不确定会被输出到哪里,不同的位置所需的编码不同,会引入很大的不确定性和乱码问题
    • 转义应该在输出HTML时进行
  • 预防存储型和反射型xss攻击
    • 纯前端渲染
    • 转义HTML
  • 预防DOM型xss攻击
    • 在使用.innerHTML .outerHTML document.write()时不要把不可信的数据作为HTML插到页面中,而尽量使用.textContent .setAttribute()
  • 其他防范措施
    • 禁止记载外域代码,防止复杂的攻击逻辑
    • 禁止外域提交,网站被攻击后,用户的数据不会泄露到外域
    • 输入内容长度控制
    • 验证码
    • HTTP-only Cookie禁止js读取某些敏感cookie
    • 扫描工具自动检测XSS漏洞

什么是CSRF

CSRF(Cross-site request forgery)跨站请求伪造:攻击者诱导受害者进入第三方网站,子第三方网站中,向被攻击网站发送跨站请求,利用受害者在被攻击网站已经获取的注册凭证,绕过后台的用户验证,达到冒充用户对被攻击网站执行某项操作的目的。

几种常见的攻击类型

GET类型的CSRF、POST类型的CSRF、链接类型的CSRF

防护策略

  • 阻止不明外域的访问

    • 同源检测。利用origin Header 和 Referer Header判断
    • samesite cookie。兼容性较差

    image.png

  • 提交时要求附加本域才能获取的信息

    • CSRF Token。①服务器随机生成token,存储在session/redis中,每次请求带上,进行校验,但存在性能问题。②token是一个计算出来的结果,无需再去读取存储的token,只需再次计算进行校验
    • 双重Cookie验证。在请求的URL中拼接cookie参数。

    image.png

  • 其他防范措施

    • CSRFTester测试
    • CSRF监控