Skip to content

Latest commit

 

History

History
305 lines (145 loc) · 10.8 KB

web开发安全.md

File metadata and controls

305 lines (145 loc) · 10.8 KB

web开发安全


主流web漏洞

img

csrf 攻击

CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。但它与XSS非常不同,XSS利用站点内的信任用户,而CSRF则通过伪装成受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。

浅谈CSRF攻击方式

img

xss 攻击

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

  • 在 HTML 中内嵌的文本中,恶意内容以 script 标签形成注入。
  • 在内联的 JavaScript 中,拼接的数据突破了原本的限制(字符串,变量,方法名等)。
  • 在标签属性中,恶意内容包含引号,从而突破属性值的限制,注入其他属性或者标签。
  • 在标签的 href、src 等属性中,包含 javascript: 等可执行代码。
  • 在 onload、onerror、onclick 等事件中,注入不受控制代码。
  • 在 style 属性和标签中,包含类似 background-image:url("javascript:..."); 的代码(新版本浏览器已经可以防范)。
  • 在 style 属性和标签中,包含类似 expression(...) 的 CSS 表达式代码(新版本浏览器已经可以防范)。

XSS 分类

类型 存储区* 插入点*
存储型 XSS 后端数据库 HTML
反射型 XSS URL HTML
DOM 型 XSS 后端数据库/前端存储/URL 前端 JavaScript

SQL 注入

URL跳转漏洞

什么是DoS、DDoS、DRDoS攻击?如何防御?

消息中间件

目前在使用的消息中间件是RocketMQ和kafka

  • Rocket 特点

RocketMQ是一个分布式消息和流处理平台,具有低延迟,高性能和高可靠性,亿万级容量和灵活的可扩展性。它由四部分组成:名称服务器,代理服务器,生产者和消费者。它们中的每一个都可以水平扩展,而不会出现单点故障。

  • Kafka 特点

支持消息的发布和订阅,这个和RocketMq类似;支持数据实时处理;能保证消息的可靠性投递;支持消息的持久化存储,并通过多副本分布式的存储方案来保证消息的容错;高吞吐率,单 Broker 可以轻松处理数千个分区以及每秒百万级的消息量。

  • Rocket和Kafka的区别
比较项 RocketMq Kafka
顺序消息 确保分区内的消息的顺序 确保严格的消息顺序,并能优雅的扩展
定时消息 不支持 支持
批量消息 支持,异步生产 支持,使用同步的模式以避免消息丢失
广播消息 不支持 支持
消息过滤 支持, 可以使用Kafka流来筛选消息 支持,基于SQL92的属性筛选表达式
服务器端触发的重试 不支持 支持
消息存储 高性能存储 高性能和低延迟文件存储
消息可追溯 支持 支持,时间戳和偏移量
消息优先级 不支持 不支持
管理和操作工具 支持,通过终端命令可以进行配置 开箱即用, 用户只需要注意一些配置
  • 具体指导

中台应用间的业务消息都是通过RocketMQ来进行,一般性的应用消息通过RocketMQ来进行,RocketMQ对业务消息提供了更高的可用性、管理方便、使用上可以按Topic进行筛选等特点。

但结合业务特点,比较计量数据, 需要进行高速大批量进行写入和消费,消费方固定,但对实时顺序性等要求没有那么高的可以考虑kafka

NoSQL数据库

  • 目前中台在使用的NoSQL数据库主要有
  1. HBase

  2. MongoDB

  3. ElasticSearch

  4. Redis

  • HBase

Hbase,是一个高可靠、高性能、可伸缩的分布式数据库。Hbase参考了谷歌的BigTable建模,使用HDFS作为底层存储。使用Zookeeper作为协同服务组件。

可以提供数据的实时随机读写的NoSQL数据库,他的特点如下:

  1. Hbase的表没有固定的字段定义

  2. Hbase的表中每行存储的都是一些key-value对

  3. Hbase的表中有列族的划分,用户可以指定将哪些kv插入哪个列族

  4. Hbase的表在物理存储上,是按照列族来分割的,不同列族的数据一定存储在不同的文件中

  5. Hbase的表中的每一行都固定有一个行键,而且每一行的行键在表中不能重复

  6. Hbase中的数据,包含行键,包含key,包含value,都是byte[ ]类型,hbase不负责为用户维护数据类型

  7. HBASE对事务的支持很差

HBASE相比于其他nosql数据库(mongodb、redis、cassendra、hazelcast)的特点:

  1. Hbase的表数据存储在HDFS文件系统中
  2. 存储容量可以线性扩展; 数据存储的安全性可靠性极高!

*如果要使用HBase,对于数据的RowKey怎么设计需要慎重考虑,RowKey的设计会极大的影响后续的业务便利性,而且一段设计定型了,后续也很难更改。*

  • MongoDB

  • ElasticSearch

ES特性:是一个分布式、可扩展、实时的搜索与数据分析引擎

  1. 全文搜索

  2. 结构化数据的实时统计

  3. 数据分析

  4. 复杂的人类语言处理

  5. 地理位置和对象间关联关系

ES特点(有点):

  1. 速度快:当数据量到达千万级以上的时候,关系型数据库单表无论是通过增加索引、分库分表来优化,最终能够优化的效果往往不如人意(且分库分表复杂度较高),而ES可以轻松hold住千万、亿级数据量。
  2. 不只是全文检索:在传统关系型数据库中,我们很多使用需要采用模糊查询的方式来获取想要的数据,LIKE '%检索项%', SQL不会走索引的(不符合最左前缀原则),将执行全表扫描,性能很差。 但在ES中实现上述的查询则很简单,可以实时的查询到想要的结果。
  • Redis

Redis是一个高性能的(key/value)分布式内存数据库,基于内存运行并支持持久化的NoSQL数据库。value的数据类型支持主要有 String、List、Hash、Set、ZSet 这5种。

Redis的应用场景主要有:

  1. String

    1. 取最新N个数据的操作如:可以将最新的10条评论的ID放在Redis的List集合里面
    2. 模拟类似于HttpSession这种需要设定过期时间的功能
    1. 缓存: Redis提供了键过期功能,也提供了灵活的键淘汰策略
    2. 计数器:什么是计数器,如电商网站商品的浏览量、视频网站视频的播放数等
    1. 分布式锁 : 可以利用Redis的setnx功能来编写分布式的锁,如果设置返回1说明获取锁成功,否则获取锁失败
    2. 分布式Session
    1. 限流
  2. Hash

    1. 存储用户信息
    2. 用户主页访问量
    1. 组合查询
  3. List:微博关注人时间轴列表、简单队列

    1. Redis提供的有序集合数据类构能实现各种复杂的排行榜应用
  4. Set

    1. 赞、踩
    2. 标签
    1. 好友关系
  5. Zset:排行榜

  • 定时任务使用场景
  1. 定时备份数据

  2. 业务(订单)超时自动取消

  3. 业务(订单)失败后的定时重试

  4. 按时间段统计信息

  5. 业务定期(优惠券要过期)给用户发送提醒消息等。

定时任务

  • 定时任务的基本概念

执行器:负责执行任务。

调度器:根据配置(cron表达式)详情,告知执行器去执行任务

任务:自己的业务实现,比如优惠券要过期给用户发送一个提醒。

  • 使用xxl-job任务需要注意的地方
  1. 定时任务是靠机器按crob表达式进行调度的,都是有一定的的延迟,如果有一个业务要求12:00分生效,理想情况下也会有几秒的延迟,不可能12:00准时生效。

  2. xxl-job只是一个触发入口,具体的实现时需要业务来处理的。

  3. 对耗时严重的任务,建议仅仅通过xxl-job进行触发,触发后以异步方式执行,不要占用xxl-job的链接资源。

  4. 对大批量的任务,最好结合MQ队列一起来处理。

xxl-job接入指南 :https://qianxun.yuque.com/ddad5m/ykumxg/kgb6h9

缓存中间件

开发过程中经常性的需要对数据进行缓存,常用的缓存技术手段基本有下面几个

  1. 无外部依赖的,jdk自身提供的 HashMap/ConcurrentHashMap

  2. 单机缓存管理,简单引入jar包的guava

  3. 分布式缓存管理,使用redis,memcache等

这里重点强调下使用分布式缓存的选型,为了提高大家的编码效率,编码一致性,缓存的统一处理框架推荐使用JetCache:

https://github.com/alibaba/jetcache

https://github.com/alibaba/jetcache/wiki/Home_CN

性能设计

  1. 性能指标分解

系统性能指标

子系统性能指标

  1. 性能监控

是否需要性能方面的监控,如过需要,请给出明确的监控指标项。

  1. 限流和降级

限流和降级是否需要,策略,及使用的技术方案。

  1. 性能相关设计策略与性能需求的映射关系

  2. 架构设计阶段提前做好快速定位性能问题或故障的预案。SkyWalking作为默认需要接入的。

​ 对请求的各个环节、链路进行分析,找到可能出现瓶颈的地方,是前端需要优化,还是后端服务需要优化,还是存储需要优化。