• web安全(初识)


     

    目录

    前言

    一、攻击篇

    1、跨站脚本攻击(Cross Site Script Attack)--- XSS

    2、跨站请求伪造(Cross-site request forgery)---CSRF

    3、注入攻击(Injection)

    (1)、SQL Injection(最常见的注入攻击方式)

    (2)、其他注入方式

    4、拒绝服务(Denial of Service) --- Dos

    (1)、ReDos:基于正则表达式的DOS

    (2)、DDoS(Distributed)

    5、中间人

    二、防御篇

    1、防御XSS

    内容安全策略(Content Security Policy)--- CSP

    2、CSRF的防御

    请求头部

    token

    anti-pattern

    SameSite Cookie(避免用户信息被携带)

    3、Injection的防御

    4、DOS的防御

    (1)、Redex Dos

    (2)、DDOS

    5、中间人的防御(传输层)

    前言

    web 开发的安全问题一直都是重中之重的一环,当然安全问题在其他领域同样如此,在web 开发领域安全问题一旦出现问题,对用户可能是个人财产或隐私的造成损失、对公司可能造成巨额财产及客户的流失、同时也 关系到开发者工作的去留等一系列问题。分为两个方面:攻击和防御.

    一、攻击篇

    加入你是一个hacker

    1、跨站脚本攻击(Cross Site Script Attack)--- XSS

    常见攻击方式

    • 开发者盲目信任用户的提交内容,将用户填写的字符串直接转换为DOM操作

    XSS的一些特点

    • 通常难以从以UI上感知(XSS攻击一般在暗地执行脚本)

    • 窃取用户信息(cookie/token)

    • 绘制UI(例如弹窗),诱骗用户点击/填写表单

    XSS 分类(性质)

    • 恶意脚本被存在数据库中

    • 访问页面 => 读数据 === 被攻击

    • 危害最大,对全部用户可见

    2、跨站请求伪造(Cross-site request forgery)---CSRF

    特点:

    • 在用户不知情的前提下

    • 利用用户权限(cookie)

    • 构造指定HTTP请求,窃取或者修改用户敏感性息

    3、注入攻击(Injection)

    (1)、SQL Injection(最常见的注入攻击方式)

    方式:

    1. HTTP请求SQL 参数被恶意注入

    2. 求其发送至服务端将SQL参数解析构建SQL语句并运行SQL代码

    3. 获取数据、修改数据、删除数据等一系列操作

    (2)、其他注入方式

    • CLI :命令行

    • OS command :系统命令

    • Server-Side Request forgery(SSRF) 服务端伪造请求(虽然不属于注入但是原理类似)

    4、拒绝服务(Denial of Service) --- Dos

    描述:通过某种方式(构造特定请求),导致服务器资源被显著小号,来不及相应更多请求,导致请求挤压,进而雪崩效应。

    (1)、ReDos:基于正则表达式的DOS

    方式: 通过正则表达式的贪婪匹配,如果服务端在利用正则去匹配的时候,攻击者通过提交特定的信息,时服务待在进行正则匹配的时候需要通过不断回溯进行匹配。

    结果: 响应时间增加、接口吞吐量下降。

    (2)、DDoS(Distributed)

    描述: 短时间按内,来自大量僵尸设备的请求流量,服务器不能及时完成全部请求,导致请求堆积,进而雪崩效应,无法相应新请求。

    特征: 简单粗暴、以量大达成目的

    攻击特点:

    • 直接访问IP

    • 任意API

    • 消耗大量带宽

    5、中间人

    描述:处于服务端与浏览器之间,接收来自浏览器或者服务器传过来的信息,可以对信息进行窃取、修改请求并返回等操作,处理后发送个服务器或者浏览器

    原因:

    • 明文传输

    • 信息篡改不可知

    • 对方身份为未验证

    中间人身份可以是:恶意的webview、路由器、ISP

    二、防御篇

    1、防御XSS

    措施

    • 永远不信任用户的提交内容

      • 不要将用户提交内容直接转换为DOM

    XSS --- 现成工具

    • 前端

      • 主流框架默认防御XSS

      • google-closure-library

    • 服务端(Node)

      • DOMPurify

    需要注意的几种需求

    1. String--->DOM:渲染前进行扫描

    2. 需要添加svg图片时进行扫描,因为svg里是可以添加script标签的

    3. 避免用户自定义跳转行为,如无法避免应进行校验

    4. 允许用户自定义样式需额外注意

    内容安全策略(Content Security Policy)--- CSP

    功能

    • 判断那些源(域名)被认为是安全的

    • 来自安全源的脚本可以执行,否则直接抛错

    • 对内联script标签直接报错

    2、CSRF的防御

    请求头部

    • if 伪造请求 === 异常来源

    • then 限制请求来源 ----- > 限制伪造请求

    • Origin

      • 同源请求中,GET+HEAD 不发送

    • Referer

    token

    先有页面,后有请求

    • if (请求来自合法页面)

    • then (服务求接收过页面请求)

    • then (服务器可以表示)

    anti-pattern

    GET !== GET + POST

    get请求和post请求按照其使用场景严格区分,避免因使用逻辑问题所造成的用户信息泄露

    SameSite Cookie(避免用户信息被携带)


    场景CSRF攻击利用用户权限进行攻击,然而请求访问并不携带Cookie ,是用户的页面只能由用户本人所使用,避免了跨站伪造请求的行为

    限制内容

    • Cookie domain

      domain表示的是cookie所在的域,默认为请求的地址

    • 页面域名

    3、Injection的防御

    方法:

    • 找到项目中查询SQL的地方

    • 使用prepared statement

    注意事项:

    • 最小权限原则

    • 简历允许名单 + 过滤

    • 对URL类型参数尽心协议、域名、ip等限制

    4、DOS的防御

    (1)、Redex Dos

    方法:

    • Code Review(避免使用贪婪匹配的方式)

    • 代码扫描 + 正则性能测试

    • 禁止使用用户提供的正则

    (2)、DDOS

    方法:

    • 流量治理

      • 负载均衡

      • API网关

      • CDN

    • 快速自动扩容

    • 非核心服务降级

    5、中间人的防御(传输层)

    对于利用中间人进行防御从HTTPS出发

    HTTPS部分特性

    • 可靠性:使用加密避免铭文传输

      • TLS的四次握手

    • 完整性:使用MAC验证,防止篡改

      • 传输: 加密信息 + 加密信息的hash值

      • 接收:重新计算并比对依次为校验信息是否被篡改

    • 不可抵赖性: 数字签名

  • 相关阅读:
    【Java SE】方法的使用
    Mybatis按年月日时分秒查询,MySQL年月日时分秒查询
    Redisson 实现分布式锁
    计算机毕业设计ssm社区流浪动物救助系统2r32k系统+程序+源码+lw+远程部署
    基于springboot+vue的餐饮管理系统实现与设计(源码+数据库+文档)
    赋能千行百业,AI究竟走到哪一步了?
    gRpc入门和springboot整合
    Python运维学习Day01-文件基本操作
    挂耳耳机十大品牌排行榜哪个好,目前排行靠前的五款耳机推荐
    Android10 手势导航
  • 原文地址:https://blog.csdn.net/Flying____fish/article/details/126206185