当前位置: 首页 > news >正文

AWS WAF实战、优势对比和缺陷解决

文章目录

    • 挑战和目标
    • AWS WAF的优势
    • AWS WAF的不足
    • 我是怎么做的?
    • 什么是比较好的AWS WAF设计?

笔者为了解决公司Web站点防御性问题,较为深入的研究AWS WAF的相关规则。面对上千万的冲突,笔者不得设计出一种能漂亮处理冲突数据WAF规则。
AWS WAF

AWS WAF开发人员在线指南

挑战和目标

笔者意图引进WAF,但运维同学折腾了几个月都没有开启WAF成功,面临有以下挑战和目标:

  • 解决大量与现有业务的冲突
  • 尽可能的Block掉攻击流量
  • 风险操作统一管理(统一给一个标签出来)方便我们监控

笔者只能接管WAF的配置权限,设计WAF规则,并最终解决了相关落地问题。

AWS WAF的优势

  1. 高度可配置 相对阿里来说
  2. 纯JSON语言 DSL(领域内语言)

AWS WAF的不足

  1. 缺乏可视化编辑能力
    非常容易漏,即一个请求没有经过深度检测就被放过的可能
    这里举个例子,如果我们检查一个请求具有客户端特征,如果我们选择了Accept就意味着这个请求将被特赦,无法再对其进行任何检查。
    所以Accept动作是一个非常风险的设计动作。特别是当你的WAF已经设计比较复杂的时候。

  2. 对于官方的托管规则存在以下问题:
    三个问题其实是一个问题,如何关闭特定托管子项,AWS的托管规则子项仅存在这种选择: Count,Accept,Block。想关都不关不掉。

    a. 无法重复两次使用同一种托管规则
    b. 无法删除被打上的标签
    c. 无法关闭托管规则的子项:真乃一荣俱荣,一损俱损
    如果无法关闭特定标签,后面就无法直接使用特定的命名空间进行判断.
    因为拖管规则命名空间被一些需要根据业务关闭而又无法关闭的标签给污染了,导致后面每次使用该命名空间要么都要判断排除,要么就不能使用该命名空间,而需要独立使用子项(可能包含了数十种子项).
    总之就是自虐.
    当然我们做了解决:通过自定义的Filter规则,来替代AWS的特定拖管规则,在Filter规则里对特定不符合业务的子托管规则进行剔除操作.

  3. 在线编辑功能,只能两层(横向)
    超出的部分就只能在线编辑,JSON的提示真是非人语言

我是怎么做的?

  1. 解决可视化问题
    制作了可视化工具,能解析AWS 的WAF JSON.
    特别是对Accept/Block/Count的目标和各规则之间关系进行了解析和展示.
  2. 关闭特定托管规则子项
    过自定义的Filter规则,来替代AWS的特定拖管规则,在Filter规则里对特定不符合业务的子托管规则进行剔除操作.
  3. 在线编辑只能两层
    只能强行用复制粘贴方法了.在一个规则里测试好,再复制出来.
    幸亏我22层规则是纵向的,横向的只有2-3层的样子.

什么是比较好的AWS WAF设计?

我认为做到以下几点可称为好的AWS WAF设计:

  1. 流量过滤器
  2. 干掉纯IP流量
    如果你的服务器不需要支持纯IP连接的话.纯IP真是万恶之源.
  3. 给优先用户一些标签
    给登录用户一个标签,给公司出去流量一个标签
  4. 对托管规则做一个适合业务的裁剪(通过上面提到Filter规则)
  5. 集中管理
    也就是各层判断根据判断结果打标签,一概不做Block.
    等所有标签决策投票完毕后,有任何问题的,继续走:Will_Ban层
    由决策层统一做判断:
    比如是我们的保护路径或者登录用户我们就纳入Manual层,做记录,放行
    其他自然流入最底的Tail_End进行Block.

最终笔者将以上5点扩展为具体规则,编写一个22层的WAF来解决了相关问题。

相关文章:

AWS WAF实战、优势对比和缺陷解决

文章目录 挑战和目标AWS WAF的优势AWS WAF的不足我是怎么做的?什么是比较好的AWS WAF设计? 笔者为了解决公司Web站点防御性问题,较为深入的研究AWS WAF的相关规则。面对上千万的冲突,笔者不得设计出一种能漂亮处理冲突数据WAF规则。 AWS WAF开发人员在…...

13,【设计模式】代理

代理 代理支持任意参数的简单代理实现 代理 代理的本质是函数指针 代理分为单播,多播,动态多播(ue4中提出的) 单播:在网络通信中,单播是一种一对一的通信方式 多播:在网络通信中,…...

基于IDEA使用maven创建hibernate项目

1、创建maven项目 2、导入hibernate需要的jar包 <!--hibernate核心依赖--><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-core</artifactId><version>5.4.1.Final</version></dependency><!--…...

使用Termux在安卓手机上搭建Hexo博客网站,并发布到公网访问

文章目录 1. 安装 Hexo2. 安装cpolar内网穿透3. 公网远程访问4. 固定公网地址 Hexo 是一个用 Nodejs 编写的快速、简洁且高效的博客框架。Hexo 使用 Markdown 解析文章&#xff0c;在几秒内&#xff0c;即可利用靓丽的主题生成静态网页。 下面介绍在Termux中安装个人hexo博客并…...

宝塔 杀死 java服务 netstat -tlnp | grep :7003 kill 2205698

7003 是端口 netstat -tlnp | grep :7003 kill 2205698...

Python3 数据类型转换

Python3 数据类型转换 有时候&#xff0c;我们需要对数据内置的类型进行转换&#xff0c;数据类型的转换&#xff0c;一般情况下你只需要将数据类型作为函数名即可。 Python 数据类型转换可以分为两种&#xff1a; 隐式类型转换 - 自动完成显式类型转换 - 需要使用类型函数来…...

Cookie 和 Session 的工作流程

目录 一、Cookie是什么&#xff1f; 二、Session是什么? 三、Cookie的工作流程 四、Session的工作流程 五、Session和Cookie的区别和联系 一、Cookie是什么&#xff1f; Cookie是一种在网站和用户之间交换信息的机制。它是由Web服务器发送给用户浏览器的小型文本文件&#xff…...

AutoSAR配置与实践(基础篇)3.6 BSW的WatchDog功能

3.6 BSW的WatchDog功能 一、WatchDog功能介绍1.1 WatchDog 模块组成1.2 内外部看门狗区别和原理1.3 常见看门狗校验方式一、WatchDog功能介绍 1.1 WatchDog 模块组成 WatchDog 即看门狗功能。这个看门狗不是真正看家的狗,而是软件的一个模块,但是因为功能类似故以此起名。主…...

运维高级第6次作业

1.安装docker服务&#xff0c;配置镜像加速器 Docker安装与镜像加速器配置_ZRSAI的博客-CSDN博客 2.下载系统镜像&#xff08;Ubuntu、 centos&#xff09; 执行该命令后&#xff0c;Docker会自动从Docker Hub镜像库中下载Ubuntu镜像&#xff0c;并将其保存到本地计算机上: [ro…...

MongoDB使用GridFS存储大数据(Java)

MongoDB 是一个灵活的 NoSQL 数据库&#xff0c;能够存储大量的数据。但是&#xff0c;当涉及到特别大的数据项&#xff0c;比如大文件、视频或大型图片时&#xff0c;MongoDB 提供了一个特殊的方法来存储这些数据&#xff1a;GridFS。 简介&#xff1a; 1. 什么是 GridFS&am…...

内网穿透实战应用-windwos10系统搭建我的世界服务器,内网穿透实现联机游戏Minecraft

文章目录 1. Java环境搭建2.安装我的世界Minecraft服务3. 启动我的世界服务4.局域网测试连接我的世界服务器5. 安装cpolar内网穿透6. 创建隧道映射内网端口7. 测试公网远程联机8. 配置固定TCP端口地址8.1 保留一个固定tcp地址8.2 配置固定tcp地址 9. 使用固定公网地址远程联机 …...

pytorch基于ray和accelerate实现多GPU数据并行的模型加速训练

在pytorch的DDP原生代码使用的基础上&#xff0c;ray和accelerate两个库对于pytorch并行训练的代码使用做了更加友好的封装。 以下为极简的代码示例。 ray ray.py #codingutf-8 import os import sys import time import numpy as np import torch from torch import nn im…...

[蓝帽杯 2022 初赛]domainhacker

打开流量包&#xff0c;追踪TCP流&#xff0c;看到一串url编码 放到瑞士军刀里面解密 最下面这一串会觉得像base64编码 删掉前面两个字符就可以base64解码 依次类推&#xff0c;提取到第13个流&#xff0c;得到一串编码其中里面有密码 导出http对象 发现最后有个1.rar文件 不出…...

在 Pytorch 中使用 TensorBoard

机器学习的训练过程中会产生各类数据&#xff0c;包括 “标量scalar”、“图像image”、“统计图diagram”、“视频video”、“音频audio”、“文本text”、“嵌入Embedding” 等等。为了更好地追踪和分析这些数据&#xff0c;许多可视化工具应运而生&#xff0c;比如之前介绍的…...

Grafana Dashboard 备份方案

文章目录 Grafana Dashboard 备份方案引言工具简介支持的组件要求配置备份安装使用 pypi 安装grafana备份工具配置环境变量使用Grafana Backup Tool 进行备份恢复备份 Grafana Dashboard恢复 Grafana Dashboard结论Grafana Dashboard 备份方案 引言 每个使用 Grafana 的同学都…...

opencv-疲劳检测-眨眼检测

#导入工具包 from scipy.spatial import distance as dist from collections import OrderedDict import numpy as np import argparse import time import dlib import cv2FACIAL_LANDMARKS_68_IDXS OrderedDict([("mouth", (48, 68)),("right_eyebrow",…...

2023-08-24力扣每日一题

链接&#xff1a; 1267. 统计参与通信的服务器 题意&#xff1a; 同行同列可以发生通信&#xff0c;求能发生通信的机器数量 解&#xff1a; 标记每行/每列的机器个数即可 实际代码&#xff1a; #include<bits/stdc.h> using namespace std; class Solution { pub…...

蚂蚁数科持续发力PaaS领域,SOFAStack布局全栈软件供应链安全产品

8月18日&#xff0c;记者了解到&#xff0c;蚂蚁数科再度加码云原生PaaS领域&#xff0c;SOFAStack率先完成全栈软件供应链安全产品及解决方案的布局&#xff0c;包括静态代码扫描Pinpoint、软件成分分析SCA、交互式安全测试IAST、运行时防护RASP、安全洞察Appinsight等&#x…...

Java后端开发面试题——消息中间篇

RabbitMQ-如何保证消息不丢失 交换机持久化&#xff1a; Bean public DirectExchange simpleExchange(){// 三个参数&#xff1a;交换机名称、是否持久化、当没有queue与其绑定时是否自动删除 return new DirectExchange("simple.direct", true, false); }队列持久化…...

C++ Windows API IsDebuggerPresent的作用

IsDebuggerPresent 是 Windows API 中的一个函数&#xff0c;它用于检测当前运行的程序是否正在被调试。当程序被如 Visual Studio 这样的调试器附加时&#xff0c;此函数会返回 TRUE&#xff1b;否则&#xff0c;它会返回 FALSE。 这个函数经常被用在一些安全相关的场景或是防…...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中&#xff0c;可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行&#xff0c;可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令&#xff0c;并忽略错误 rm somefile…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器

一.自适应梯度算法Adagrad概述 Adagrad&#xff08;Adaptive Gradient Algorithm&#xff09;是一种自适应学习率的优化算法&#xff0c;由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率&#xff0c;适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法

深入浅出&#xff1a;JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中&#xff0c;随机数的生成看似简单&#xff0c;却隐藏着许多玄机。无论是生成密码、加密密钥&#xff0c;还是创建安全令牌&#xff0c;随机数的质量直接关系到系统的安全性。Jav…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好&#xff0c;总是藏在那些你咬牙坚持的日子里。 硬件&#xff1a;OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写&#xff0c;"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O(n) 时间复杂度…...

管理学院权限管理系统开发总结

文章目录 &#x1f393; 管理学院权限管理系统开发总结 - 现代化Web应用实践之路&#x1f4dd; 项目概述&#x1f3d7;️ 技术架构设计后端技术栈前端技术栈 &#x1f4a1; 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 &#x1f5c4;️ 数据库设…...

Chrome 浏览器前端与客户端双向通信实战

Chrome 前端&#xff08;即页面 JS / Web UI&#xff09;与客户端&#xff08;C 后端&#xff09;的交互机制&#xff0c;是 Chromium 架构中非常核心的一环。下面我将按常见场景&#xff0c;从通道、流程、技术栈几个角度做一套完整的分析&#xff0c;特别适合你这种在分析和改…...

提升移动端网页调试效率:WebDebugX 与常见工具组合实践

在日常移动端开发中&#xff0c;网页调试始终是一个高频但又极具挑战的环节。尤其在面对 iOS 与 Android 的混合技术栈、各种设备差异化行为时&#xff0c;开发者迫切需要一套高效、可靠且跨平台的调试方案。过去&#xff0c;我们或多或少使用过 Chrome DevTools、Remote Debug…...

认识CMake并使用CMake构建自己的第一个项目

1.CMake的作用和优势 跨平台支持&#xff1a;CMake支持多种操作系统和编译器&#xff0c;使用同一份构建配置可以在不同的环境中使用 简化配置&#xff1a;通过CMakeLists.txt文件&#xff0c;用户可以定义项目结构、依赖项、编译选项等&#xff0c;无需手动编写复杂的构建脚本…...

沙箱虚拟化技术虚拟机容器之间的关系详解

问题 沙箱、虚拟化、容器三者分开一一介绍的话我知道他们各自都是什么东西&#xff0c;但是如果把三者放在一起&#xff0c;它们之间到底什么关系&#xff1f;又有什么联系呢&#xff1f;我不是很明白&#xff01;&#xff01;&#xff01; 就比如说&#xff1a; 沙箱&#…...