[ WEB开发的安全之旅 上 | 青训营笔记]

124 阅读4分钟

这是我参与「第五届青训营」笔记创作活动的第二十一天

Web 开发安全

  • 安全问题很常见

  • 看待Web安全的两个角度

Web 开发安全 - 攻击篇

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

通过某种方式将恶意脚本注入到网站中,当用户访问网站时,则会被恶意攻击,可能造成的后果有,用户隐私泄露,用户电脑被当成矿机来挖矿等等

容易遭受XSS的原因:

  • 盲目信任用户的提交内容
  • 直接把内容转化为Dom

可以看到这里无论是向数据库写数据还是从数据库读数据,都没做过滤,这样攻击者就可以很方便地进行XSS攻击了

根据XSS攻击的特点,可以被分为以下几类:

  1. 存储型的XSS攻击,恶意脚本会被存在数据库中,这种XSS的危害是最大的,因为可以攻击所有用户

  2. 反射型XSS攻击,不涉及数据库,是从URL上攻击

  3. 基于Dom的XSS攻击 完全不需要服务器参与,全在浏览器端发生

  • 反射型XSS攻击 和 基于Dom的XSS攻击很相似,最大的不同在注入恶意脚本的地方不同
  1. 基于Mutation的XSS攻击 利用浏览器特性进行攻击 也是最难防御的一种
Cross-site request forgery(CSRF) 跨站伪造请求
  • 最常见的是构造Get请求,当然构造其它类型的请求也都是可以的,比如POST等等
SQL Injection (SQL 注入攻击)
其它注入的类型
Denial of Service (Dos)
  • ReDos

  • Distributed Dos (DDos)

​ 这种攻击不会限制在域名的访问,而是直接访问IP,不会区分接口,主要的目的是消耗带宽

​ 常见的洪水攻击

基于传输层的攻击方式

Web 开发安全 - 防御篇

防御XSS

如果用户需要 要求 必须动态生成DOM,那我们需要注意以下几个点:

  1. 如果要把String 直接生成 Dom,比如说调用了一个DomParser的API,我们就一定要注意对String进行转译

  2. 上传SVG,如果允许用户上传SVG文件,那我们也一定要对SVG文件进行扫描,因为按照规范,svg中可以插入Script标签,也就是说svg图片被加载,script标签被执行,也就完成了一次XSS攻击

  3. Blob动态生成script

  4. 尽量不要做让用户自定义跳转的行为,如果做也一定要做好过滤,因为如果允许它自定义跳转链接的话,实际上是可以传输JS代码的

  5. 自定义样式,一定要对这种能设置url,比如说背景图片,字体文件的地方格外留意

Same-origin Policy(SoP) 同源策略

同源策略要求 协议 域名 端口都对的上, http://example.comhttps://example.com是协议不同,https://example.comhttps://sub.exmaple.com是域名不同

对Http请求,一般来说同源是可以的,非同源|跨域往往是不可以的(或者可以说更多是看请求的类型和服务器的配置)

Content Security Policy(CSP) 内容安全策略
  • 服务器的响应头部
    1. 例子中的第一个是 -> 这个页面中的任何Script标签,我们只允许同源的才能执行,非同源的则不允许执行
    2. 例子中的第二个是除了同源 还额外允许了 https://domain.com
  • 服务器meta也可以实现类似的功能,和服务器的类似,就不详细介绍了
  • 从域名的角度限制了哪些脚本可以运行,使很多恶意脚本就难以攻击了

防御CSRF

有的时候,Referer这个字段会被更广泛地利用

具体原理,button下包着一个iframe, iframe里是原网站,在样式这里组织了button的行为,所以点击button的行为,会交给iframe来发起,也就变成同源了

简单例子⬇️:

防御方法:通过设置一个HTTP响应头部就可以解决(在服务器端设置): X-Frame-Options: DENY/SAMEORIGIN,DENY: 当前这个页面不能被作为Iframe进行加载;SAMEORIGIN: 只有在同源的情况下,这个页面才能被作为Iframe进行加载。通过这种方法就可以规避攻击者使用Iframe进行CSRF的攻击