Web开发的安全之旅 | 青训营笔记

73 阅读3分钟

这是我参与「第四届青训营」笔记创作活动的第4天

web安全

web安全职责:保护服务器及其数据的安全、保护服务器和用户之间传递的信息的安全、保护web应用客户端及其环境安全。

Web安全主要有如下几大分类

  • XSS
  • CSRF(跨站请求伪造)
  • SQL注入
  • 命令行注入
  • DDos注入
  • 流量劫持

攻击篇

XSS(跨站脚本攻击Cross-Site Scripting)

跨站脚本攻击(Cross-Site Scripting,XSS) 是指通过存在安全漏洞的Web 网站注册用户的浏览器内运行非法的 HTML标签或 JavaScript 进行的一种攻击。动态创建的 HTML部分有可能隐藏着安全漏洞。就这样,攻击者编写脚本设下陷阱,用户在自己的浏览器上运行时,一不小心就会受到被动攻击。

XSS的分类

  • 反射型XSS:它是非持久型,参数型的跨站脚本。
  • 存储型XSS:它是将脚本代码写进数据库可以永久保存数据,危害最大。
  • DOM型XSS:与反射性相似,但是DOM是树形结构,利用DOM标签。

xss的特点

  • XSS是通过浏览器对网站页面插入恶意交互脚本获取其他用户浏览器当前渲染的账户信息。
  • XSS利用网页对用户提交信息的盲目信任像服务器传输脚本木马攻击。
  • XSS通常伪装成网站类似UI如弹窗表单,诱骗用户点击/填写表单,切去token/cookie等用户隐私,而且通常暗地执行脚本,难以从UI上察觉。

CSRF攻击(跨站点请求伪造)

跨站点请求伪造(Cross-Site Request Forgeries,CSRF)攻击是指攻击者通过设置好的陷阱,强制对已完成认证的用户进行非预期的个人信息或设定信息等某些状态更新,属于被动攻击。

是不是听着和XSS差不多? 但两者是有区别的,CSRF是通过利用了用户的数据伪造了请求,从而修改了用户的数据。而XSS是通过设置脚本来攻击的。

特点:

  • 在用户不知情的前提下
  • 利用用户权限(cookie)
  • 构造指定HTTP请求,窃取或修改用户敏感信息

DoS

DoS是Denial of Service的简称,即拒绝服务。最常见的DoS攻击有计算机网络宽带攻击和连通性攻击。

这种攻击方式是通过构造特定请求,来让服务端无法处理激增的大量请求,导致正常的请求无法被处理甚至宕机。

DDoS攻击

分布式拒绝服务(DDoS)攻击是通过大规模互联网流量淹没目标服务器或其周边基础设施,以破坏目标服务器、服务或网络正常流量的恶意行为。

防御篇

XSS防御

永远不信任用户的提交内容,更不要把用户的提交内容直接转成DOM。

目前的主流框架都默认防御这种攻击。不过如果真有这种需求的话,就需要对对应的文件进行扫描了。也不要让用户自定义跳转链接。

解决方法:

  • 后端入库前不要相信前端任何数据,统一将所有字符转义
  • 后端将数据输出给前段时统一进行转义
  • 前端进行渲染时,将从后端请求过来的数据统一转义处理

CSRF防御

  • 正确使用get(只用于查看,列举,展示等不需要改变资源属性的时候) post(用于form表单提交,改变一个资源的属性或做一些其他事情,如数据库增删改)和cookie
  • 非GET请求中,为每个用户生产一个cookie token
  • POST请求的时候使用验证码
  • 渲染表单的时候,为每个表单加一个 csrfToken,然后在后端做 csrfToken验证
  • 校验请求来源
  • 设置cookie samesite