Web安全 | 青训营笔记

192 阅读4分钟

这是我参与 [第五届青训营] 伴学笔记创作活动的第9天

web安全问题一直存在也将持续存在,任意的安全问题都将危害用户或是造成公司利益损失

跨站脚本攻击XSS

攻击方式

​ 攻击者通过某种方式将恶意脚本注入网站,用户访问页面时恶意脚本执行,会造成用户隐私泄露或机器遭到攻击——其难以从UI感知,会通过cookie/token窃取用户信息,甚至绘制UI欺骗用户提交信息

​ XSS通过以下方式注入:

  • 盲目信任用户提交的内容

  • 盲目将用户提交的字符串转化为DOM

    这样会使攻击者可以提交HTML标签,并被绘制在在页面上;常见的方式有通过数据库存储注入、通过URL注入。高手还可以根据浏览器渲染DOM的特性蒙蔽过滤工具

防御方式

​ 不要相信用户提交的数据。明确主流前端框架如React、Vue等都有默认防御XSS——用Node写服务端代码,可以用DOMPurify包进行过滤

​ 用户上传的字符串要转义后才能生成DOM,上传的SVG文件(文件中可以写标签)也要进行扫描

跨站伪造请求CSRF

攻击方式

​ 在用户不知情下利用用户权限(cookie 、token)构造HTTP请求,窃取或修改用户信息。往往通过邮箱发送恶意链接,用户点开链接接或是用img标签的url属性进行请求——还有 token 校验的方式, token 必须与具体用户绑定且有过期时间

防御方式

​ CSRF请求是异常来源,可以限制请求来源从而限制伪造请求——可利用 Refer 或者 同源策略 Origin ,不过 gethead 请求方式不会发送 Origin 字段

​ 另外还有 Samesite Cookie策略限制Cookie域名与页面域名相同, 避免用户信息被携带,从根源上解决CSRF

注入

攻击方式

  • ​ SQL:通过用户的请求将特定SQL参数注入到数据库,服务端执行时特定语句将会对数据库非法读取、修改、删除等操作

  • ​ CLI:命令注入,注入系统命令破坏服务器文件,或是读取修改服务器文件

  • ​ SSRF:服务端伪造请求,可以利用服务器的内网权限暴露内网信息或破坏内部系统

    防御方式

​ 找到项目中使用SQL的地方,对SQL语句进行预编译使SQL注入失效;所有命令不要给sudo和root权限;建立允许白名单,不允许rm等命令执行;对URL的参数类型进行协议、域名、ip等限制,不允许攻击者访问内网

服务拒绝DOS

攻击方式

​ 攻击者大量消耗服务器资源,使服务器来不及响应,系统崩溃。

  • ​ 基于正则表达式ReDos:利用正则的贪婪模式,通过容易发生回溯行为的字符串增加服务器响应时间
    • image-20230208172127480.png
  • ​ DDos:短时间内用大量僵尸设备请求,在TCP层攻击者请求但不响应服务端,使TCP连接无法释放,消耗服务器资源
    • image-20230208172143935.png

防御方式

​ 避免正则的贪婪模式,对代码进行扫描并进行正则性能测试;或是直接避免用户提供的正则

​ 对于DDos,进行流量治理避免请求过多;或者增加抗量:快速扩容的方案或关闭非重要服务

传输层——中间人攻击

攻击方式

​ 攻击者作为浏览器与服务端的桥梁,向用户伪造为服务端、向服务端伪造为用户,从而窃取用户信息、修改用户请求或服务器返回的响应——中间人可以是不正规的浏览器、路由器设备等——会在没有身份验证,明文传输且不知道信息被篡改的情况下发生

image-20230208172239294.png

防御方式

​ HTTPS的TLS功能

  • ​ 可靠性:进行加密避免明文传输
  • ​ 完整性:使用MAC校验规则确保信息未被篡改
  • ​ 不可抵赖性:使用数字签名,确保双方身份可信任

总结

​ Web安全问题大致如上,我们可以使用过滤工具、限制策略、命令预处理、权限限制、性能检测、资源动态调整、安全协议等等方式来防御一些攻击。开发者需要熟练掌握防御方法与工具,更重要的是时刻保持严谨,保持学习,以防御日新月异的安全攻击