39_WAF的概念、功能,ModSecurity部署配置、LAMP环境部署、Ubuntu搭建DVWA靶机测试、测试WAF防御、OWASP规则集的部署

一、WAF的概念

WAF( Web Application Firewall ),即Web应用防火墙

  • 通过执行一系列HTTP/HTTPS(应用层的协议)的安全策略为Web应用提供保护的一种网络安全产品。
  • 增加攻击者的难度和成本,但不是100%安全。
  • 工作在应用层。

WAF的优势

二、WAF的功能

  • SQL Injection (SQLi):阻止SQL注入
  • Cross Site Scripting (XSS):阻止跨站脚本攻击
  • Local File Inclusion (LFI):阻止利用本地文件包含漏洞进行攻击
  • Remote File Inclusione(RFI):阻止利用远程文件包含漏洞进行攻击
  • Remote Code Execution (RCE):阻止利用远程命令执行漏洞进行攻击
  • PHP Code Injectiod:阻止PHP代码注入
  • Metadata/Error Leakages:阻止源代码/错误信息泄露
  • HTTP Protocol Violations:阻止违反HTTP协议的恶意访问
  • HTTPoxy:阻止利用远程代理感染漏洞进行攻击
  • Shellshock:阻止利用Shellshock漏洞进行攻击
  • Session Fixation:阻止利用Session会话ID不变的漏洞进行攻击
  • Scanner Detection:阻止黑客扫描网站
  • Project Honey Pot Blacklist:蜜罐项目黑名单
  • GeoIP Country Blocking:根据判断IP地址归属地来进行IP阻断

三、WAF的分类

1.硬件设备类

以硬件的形式部署在链路中,支持多种部署方式,当串联到链路中时可以拦截恶意流量,在旁路监听时只记录攻击,不拦截。独立部署。

绿盟、安恒、铱迅、天融信、深信服、启明星辰、知道创宇、F5 BIG-IP

部署位置

2.软件产品类

以软件的形式安装在服务器上,可以直接检测服务器是否存在webshell,是否有文件被创建等。 一般与服务器部署在一起。(缺点是占用服务器的资源,优点是便宜适合小公司)

D盾,云锁,网防G01,安全狗,护卫神,智创,悬镜,UPUPW,安骑士。

不同waf的拦截页面

https://zhuanlan.zhihu.com/p/335602174?utm_id=0

3.基于云的WAF

通过配置NS或CNAME记录,使得对网站的请求报文优先经过WAF主机,经过WAF主机过滤后,将被认为无害的请求报文再发送给实际网站服务器进行请求,可以认为是自带防护功能的CDN。

安全宝、创宇盾、玄武盾、腾讯云(T-Sec Web 应用防火墙)、百度云(应用防火墙 WAF)、西部数码、阿里云盾、奇安信网站卫士。

优势:价格低廉,不用部署

云WAF示意图:

https://www.tmooc.cn→DNS服务器,根据域名查询得到Web服务器的IP地址。浏览器连接并访问Web服务器。

https://www.tmooc.cn→DNS服务器,根据域名查询得到WAF的IP地址。浏览器将请求发送给WAF,经过WAF检查和过滤后,请求才会到Web服务器。响应也是一样,数据通过WAF响应回浏览器。

       云waf解析流程: 部署了云waf的网站,DNS服务器解析的时候解析的是云waf的地址,这样就会经过云waf再到web服务器。

        所以现在很多的web服务器怕被绕过,就禁止IP访问,一定要通过域名访问,

四、ModSecurity

1 ModSecurity的概念

  • ModSecurity是一个开源的、跨平台的Web应用防火墙(WAF),被称为WAF界的“瑞士军刀”。软件产品。
  • 它可以通过检查Web服务接收到的数据,以及发送出去的数据来对网站进行安全防护。
  • 中文社区:http://www.modsecurity.cn/

选它来测试,以下原因,江湖地位、免费、开源、跨平台,很多同类产品都参考了它的设计

2 ModSecurity的工作过程

•解析HTTP请求内容

•将解析后的内容与规则匹配

•根据规则进行处理

•日志记录

        modsecurity的详细工作过程:共五个阶段记录,前两个阶段处理请求头、请求体,后两个阶段处理响应头、响应体,最后一个阶段记录信息,然后删掉、等待最后重新轮回。

3 ModSecurity规则

ModSecurity规则结构

SecRule VARIABLES OPERATOR [ACTIONS]

SecRule:ModSecurity主要的指令,用于创建安全规则

VARIABLES:变量,规定了安全规则针对的对象(上哪找?)

OPERATOR:操作符,定义安全规则的匹配条件(怎么找?)

ACTIONS:响应动作,定义数据包被规则命中后的响应动作(做什么?)

常见变量VARIABLES(对象)

ARGS:所有请求参数

FILES:所有文件名称

REQUEST_HEADERS:请求数据头部

常见操作符OPERATOR(条件)

@rx:正则表达式

@streq:字符串相同

@ipmatch:IP相同

@contains:包含字符串

常见响应动作ACTIONS(处理)

deny:停止规则处理并拦截此次访问

pass:规则匹配成功后,仍继续使用下一个规则进行处理(通过

id:定义规则编号( id必须进行配置,且必须是数字)

severity:定义事件严重程度

phase:配置规则的处理阶段 (1~5)

t:调用转换函数

block:用于阻止访问,但不指定阻止的具体执行方式

常见转换函数

lowercase:所有字符转换为小写

removeNulls:从输入数据中删除所有空字节

removeWhitespace:从输入数据中删除所有空白字符

trim:删除输入字符串左侧与右侧的所有空格


4. ModSecurity规则示例

•防XSS攻击

SecRule ARGS|REQUEST_HEADERS "@rx<script>" "id:001,msg:'XSS Attack',severity:ERROR, deny, status:404"

5.ModSecurity部署配置

•部署环境

OS平台:Ubuntu 16(可自行搭建个Ubuntu 16完成前三个步骤,或需要我这个虚拟机的可以私聊我给你发)

服务器:Apache2

首先,解压Ubuntu 16,VM打开(跳出弹框就获取所有权),

        打开快照管理后会看到有很多快照,接下来我从第三个快照开始从新搭建一遍

从已安装apt更新源快照开始操作,点击第三个快照,转到,我已移动该虚拟机,

1.更新apt源(因为我这个普通用户,$符,所以命令前我都加sudo)

sudo apt-get update

2.安装apache2
sudo  apt-get  -y  install  apache2  apache2-dev
3.遇到错误(没遇到则忽略)

使用sudo时报错:

E: 无法获得锁 /var/lib/dpkg/lock-frontend - open (11: 资源暂时不可用)

E: 无法获取 dpkg 前端锁 (/var/lib/dpkg/lock-frontend),是否有其他进程正占用它?

解决:

sudo rm /var/lib/dpkg/lock-frontend

如果还出来错,删除那个文件即可,比如:

E: 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用)

E: 无法锁定管理目录(/var/lib/dpkg/),是否有其他进程正占用它?

解决:

sudo rm /var/lib/dpkg/lock

然后就可以使用了

4.安装modsecurity
sudo  apt-get  -y  install  libxml2  libxml2-dev  libxml2-utils  libaprutil1  libaprutil1-dev   libapache2-modsecurity

5.安装mysql-5.7
sudo  apt-get  -y  install  mysql-server  mysql-client  libmysqlclient-dev

需要在mysql的安装界面中输入密码 root 和确认密码root。

6.安装PHP7
sudo  apt-get  -y  install  php7-*
7.查看ModSecurity版本号
sudo  dpkg  -s  libapache2-modsecurity  |  grep  Version

 

LAMP环境安装完成,以下是配置ModSecurity和apache。(还要经过一系列设置让它启动起来)

8.开启ModSecurity功能

8.1 切换到modsecurity目录

cd  /etc/modsecurity/ 

8.2 重命名 modsecurity.conf-recommended 文件名为 modsecurity.conf

sudo  mv  modsecurity.conf-recommended  modsecurity.conf 

 

8.3 编辑modsecurity.conf文件,开始规则引擎

第七行原本的意思是仅仅检测不起作用

显示行号的技巧:set nu

sudo  vi  modsecurity.conf

SecRuleEngine On

文件的第七行,修改为On

9.在apache中启用modsecurity模块

        也就是说他两是一种有数据的交互所以呢在apache的目录下边有一个是专门针对modsecurity的,也可以认为modsecurity目前是apache的一个安全模块。所以修改它增加相应的设置。

9.1 打开security2.conf 文件

sudo  vi  /etc/apache2/mods-available/security2.conf

9.2在<IfModule></IfModule>中加入以下内容,保存退出


include /usr/share/modsecurity-crs/*.conf
include /usr/share/modsecurity-crs/activated_rules/*.conf

         作用:include文件包含,activated_rules活动规则,*.conf规则文件,写的规则文件都得在这个/usr/share/modsecurity-crs/activated_rules/目录下,都得以*.conf方式命名。

下面我们开始编写规则文件。

10.新建文件my_rule.conf进行测试,拒绝本机访问web

10.1 新建文件my_rule.conf

sudo  vi  /usr/share/modsecurity-crs/activated_rules/my_rule.conf

10.2写入以下内容,保存退出(意思是不允许物理机192.168.10.1访问,编号为1,阶段一,日志,日志审计,拒绝,状态码返回浏览器403)

SecRule REMOTE_ADDR "@ipMatch 192.168.10.1" "id:1,phase:1,log,auditlog,deny,status:403"

 

11.重启apache使配置生效
sudo  systemctl restart  apache2 
12.本机访问测试
 可以访问

 

13.通过真机访问

真机ping可以通过

14.查看日志

sudo less /var/log/apache2/modsec_audit.log

q 退出

注意的问题:

有时我们设置了黑名单,也重启了apache服务,但是处于黑名单IP的浏览器仍然可以访问到页面。原因是浏览器有缓存,要想看到结果,我们清除一下浏览器的缓存。

自行测试:修改规则,允许真机访问,不允许kali和Ubuntu本机访问!

SecRule REMOTE_ADDR "@ipMatch 192.168.10.132,192.168.10.129,127.0.0.1" "id:1,phase:1,log,auditlog,deny,status:403"

1.修改规则

2.重启apache服务

**3.需要时,清除浏览器缓存,再访问 **

有时间可以完成以上练习,初步感受modsecurity(WAF)的作用.

        仅仅封IP地址那跟普通防火墙差不多,还不能够体现waf的优势,接下来继续

6.Ubuntu搭建测试DVWA靶机

1.下载DVWA源码文件,并解压

1.1 切换目录

cd  /var/www/html/ 

1.2 下载DVWA源码文件

sudo  wget  https://github.com/ethicalhack3r/DVWA/archive/master.zip 

如果下载失败,多尝试几次就可以了(因为访问github慢,但这个源码小,有几率成功的),再不行就复制进去或者上魔法

靶场下载地址:蓝奏云
https://wwtt.lanzn.com/b00uyckd9a
密码:2x71

注意在/var/www/html下   .表示当前文件夹

sudo cp /home/tedu/DVWA-master.zip  .

1.3 解压缩

sudo  unzip  DVWA-master.zip

1.4 对目录重命名

sudo  mv  DVWA-master/  DVWA

2.重命名配置文件

2.1切换到config目录

cd  /var/www/html/DVWA/config 

2.2 重命名配置文件(复制了一个新的配置文件)

sudo  cp  config.inc.php.dist  config.inc.php
3.修改php配置文件,支持远程文件包含

3.1 编辑php配置文件

sudo  vi  /etc/php/7.0/apache2/php.ini

3.2 允许远程文件包含

输入 :/allow_url_include,回车,定位到当前行,将值设置为设置为On(默认情况下不支持远程文件包含)

allow_url_include = On

输入:wq 保存退出

4.重启apache(三秒内没报错那就OK)
sudo  systemctl  restart  apache2

 

5.创建数据库及管理用户

5.1进入mysql (这条命令不要复制,要自己输入)

sudo mysql -uroot -proot  

5.2 创建dvwa数据库

mysql> create database dvwa;

5.3 创建dvwa用户用来管理dvwa库,密码为dvwa@123(这种比用root账号安全的多)

 作用:授权all(增删改查)权限针对于dvwa这个库的所有表,并且dvwa一定是本地连接,

mysql> grant all on dvwa.* to  'dvwa'@'localhost'  identified by 'dvwa@123';

 

5.4 退出mysql

**mysql> exit;
6.修改DVWA配置文件

6.1 打开配置文件

sudo  vi  /var/www/html/DVWA/config/config.inc.php

6.2 修改的内容如下:

$_DVWA[ ‘db_database’ ] = ‘dvwa’; //数据库名

$_DVWA[ ‘db_user’ ] = ‘dvwa’; //用户名

$_DVWA[ ‘db_password’ ] = ‘dvwa@123’; //密码

$_DVWA[ 'recaptcha_public_key' ] = '6LdJJlUUAAAAAH1Q6cTpZRQ2Ah8VpyzhnffD0mBb’; //填充key

$_DVWA[ 'recaptcha_private_key' ] = '6LdJJlUUAAAAAM2a3HrgzLczqdYp4g05EqDs-W4K’;

$_DVWA[ 'default_security_level' ] = 'low';

7.赋予相应的文件权限

直接将DVWA网站源文件的属主和属组修改为www-data即可

sudo  chown  www-data:www-data  -R  /var/www/html/DVWA/

 因为属主和属组都是root不太好

改之后,网站的属主和属组就应该是它本身,防权止别人使用sudo提

8.重启服务
 sudo  systemctl  restart  apache2  mysql

 

9.进入dwva界面配置

9.1 浏览器地址栏输入:

http://192.168.10.132/DVWA/setup.php

9.2 在页面中

点击“Create/Reset Database”按钮,安装成功后,页面底部有一个login链接

10.登录

用户名:admin 密码:password ,进入主界面,然后点击下面的部署表就行,自动跳回登录界面再继续登录就可

注意:在windows和Ubuntu中部署DVWA有一定区别的。

简单区分不同操作系统的方法

        注意,在Windows里边无论你的目录大小写它是不区分的,LINUX系统里边如果目录是大写那就一定是大写,这也是最简单区分不同操作系统的方法,看网站受不受影响。

二、ModSecurity案例

1.XSS防御 ,例如 不允许参数中出现<script>

1.1 dvwa设置安全级别为low,选择“XSS(Reflected)”

然后输入<script>alert(1);</script>,弹框

1.2 打开 my_rule.conf

 sudo  vi  /usr/share/modsecurity-crs/activated_rules/my_rule.conf

 展示出来的是刚刚写的封IP的规则,删掉不需要了,换下面的(按两次DD键就全快速删除了)

1.3 写入以下内容

SecRule ARGS "@contains <script>" "id:2,deny,status:403"

解释:SecRule(创建规则) ARGS(规则作用于参数包括get、post) "@contains <script>" "id:2,deny(禁止),status(状态码):403"

1.4重启apache2服务

 sudo  systemctl restart  apache2 

         之后在物理机测试一下,输入<script>alert(1);</script>,然后就是被禁止了。说明被waf防护了,没有调用后端代码,

1.5 防止大小写绕过

        但是,<Script>alert(1);</Script>,某一个字母改成大写呢?就可以绕过WAF了,所以规则也是有漏洞的,没有做太严格的限制,可以改下成下面

SecRule ARGS "@contains <script>" "id:2,deny,status:403,t:lowercase"

过程解析:

  1. ?name=<Script>alert(1)</Script>
  2. WAF收到name这个参数,将其值转换为小写<script>alert(1)</script>
  3. 然后执行运算符,<script>alert(1)</script>包含<script>吗?规则命中,执行deny。

1.6重启apache2服务

sudo  systemctl restart  apache2  

2.**文件上传漏洞的防御 **

可以看到原本是有文件上传漏洞的

1.1 dvwa设置安全级别为low,选择“File Upload”

选择一个php文件,并上传,上传成功

1.2 打开 my_rule.conf

tedu@ubuntu: ~$ sudo vi /usr/share/modsecurity-crs/activated_rules/my_rule.conf

1.3 写入以下内容

SecRule FILES "(?:\.php|\.jsp|\.asp|\.aspx)$" "phase:2,block,log,id:3,t:lowercase"

SecRule FILES(针对文件参数) "(?:\.php|\.jsp|\.asp|\.aspx)$" "phase:2,block(既不允许向前也不向后让你等着有个统一的处理),log,id:3,t:lowercase(防止大小写绕过)"

1.4重启apache2服务

tedu@ubuntu: ~$ sudo systemctl restart apache2

经测试,原先能上传,现在不允许

.php: php语言开发的web应用

.jsp: java语言开发的web应用

.asp/.aspx: 微软的c#语言开发的应用

3.xss拦截后,拦截后跳转到自定义拦截页面

因为拦截的页面后自定义的是默认带有信息泄露,得换一个页面,这个是modsec提供的,f复制进去

SecRule ARGS "@contains <script>" "id:2,deny,status:403,t:lowercase,redirect:http://www.modsecurity.cn/practice/intercept.html"

4.所有拦截后跳转到自定义拦截页面(block)

4.1使用SecDefaultAction(设置默认动作的),需要写在其他规则之前才能生效

SecDefaultAction "**phase:2**,log,auditlog,deny,status:302,redirect:http://www.modsecurity.cn/practice/intercept.html"

没有写phase:2 这一项,apache启动会失败。

4.2 需要将拦截动作改成“block”,只有使用了“block”的拦截动作,才会执行SecDefaultAction定义的阻断性动作

SecRule ARGS "@contains <script>" "phase:1,id:1,block,t:lowercase"

4.3 文件上传本来写的就是block,不用修改。

最后的配置文件内容:

SecDefaultAction "phase:2,log,auditlog,deny,status:302,redirect:http://www.modsecurity.cn/practice/intercept.html"
SecRule ARGS "@contains <script>"  "id:1,block,t:lowercase"
SecRule FILES "(?:\.php|\.asp|\.aspx)$" "id:2,block,t:lowercase"

可以删了之前的,用这个全部复制进去,再试试效果 

 

三、ModSecurity开启日志审计

1.编辑配置文件

sudo vi /etc/modsecurity/modsecurity.conf

tedu@tedu:~$

2.修改内容

SecAuditEngine **On **#183行

SecAuditLog /var/log/apache2/modsec_audit.log #193行

3.查看日志内容

sudo cat  /var/log/apache2/modsec_audit.log

完成上述测试后发现写规则还是挺费时间麻烦的,owasp这个组织写好了现成的规则,可以直接用

四、OWASP规则集的部署

1.下载规则集(下载不成功,就复制)

tedu@ubuntu: ~$ sudo wget https://github.com/root25/MODSEC/raw/master/modsecurity-crs_2.2.5.tar.gz

蓝奏云下载地址:https://wwtt.lanzn.com/b00uydem8d
密码:8jlx

2.规则集介绍

ModSecurity OWASP 规则集说明_modsecurity 集成owasp规则-CSDN博客

 自己写的就很简单的,看下图对比别人写好的(显得自己写的很小儿科),经过多次测试的,直接套用别人完善的最能起到防御的作用

3.使用下载的规则集

# 1.切换到活动规则目录
cd /usr/share/modsecurity-crs/activated_rules
# 2.选择一条规则文件复制到该目录下,注意后面有个点复制全
sudo cp /home/tedu/modsecurity-crs_2.2.5/base_rules/modsecurity_crs_41_xss_attacks.conf .sudo cp /home/tedu/modsecurity-crs_2.2.5/base_rules/*41* .
sudo cp /home/tedu/modsecurity-crs_2.2.5/base_rules/*40* .# 3.重启apache
sudo  systemctl restart  apache2   
#4.验证对XSS的防御

 用了别人的那自己的删掉就好了,我们自己写是很难写出来的,写不出这么完善,这个是针对XSS的严密的防护,接下来继续

 

**作业1:**将基础规则集全部部署,看行不行。

修改modsecurity_crs_21_protocol_anomalies.conf,将该文件中,id为960017的规则注释或删除就可以了

SecRule REQUEST_HEADERS:Host "+$" "phase:2,rev:'2.2.5',t:none,block,msg:'Host header is a numeric IP address', severity:'2',id:'960017',tag:'PROTOCOL_VIOLATION/IP_HOST',tag:'WASCTC/WASC-21',tag:'OWASP_TOP_10/A7',tag:'PCI/6.5.10',tag:'http://technet.microsoft.com/en-us/magazine/2005.01.hackerbasher.aspx',setvar:'tx.msg=%{rule.msg}',setvar:tx.anomaly_score=+%{tx.notice_anomaly_score},setvar:tx.policy_score=+%{tx.notice_anomaly_score},setvar:tx.%{rule.id}-POLICY/IP_HOST-%{matched_var_name}=%{matched_var}"

**作业2:**什么是XFF?什么是参数污染?

**作业3:**可以在ubuntu1604部署joomla,然后尝试针对joomla的规则

不同的WAF,网上有着不同的绕过机制。我们需要多尝试!例如:可以绕一下安全狗、D盾、WTS、ModSecurity。

如果考虑使用Sqlmap绕WAF,通过tamper脚本。sqlmap有自带的tamper脚本,我们也可以从网上搜索更多的tamper脚本。

sqlmap 使用tamper脚本绕过WAF

适用于测试学习,还有,假如公司不想掏钱又想价格低廉的,来一个waf,可以用上,

做渗透的时候遇到哪个waf就去查如何绕那个waf

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/405221.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

halcon的HObject被释放

经过简述 某项目由我统一管理HObject(区域和图像)的释放。发现某区域被系统外部所释放。可能有两种情况&#xff1a;a&#xff0c;区域交给我后&#xff0c;释放了。b&#xff0c;获取我的区域后释放了。 最终证明是第二种情况&#xff0c;证明如下&#xff1a; a&#xff0c;…

Python数据分析:Pandas与NumPy结合,实现高效数值计算,提升数据分析效率的最佳实践

目前小编的借调任务已经完成&#xff0c;借调到其他组完成了自己的工作&#xff0c;有需要的同学可以看下相关的文章&#xff1a;Python&#xff08;Flask&#xff09; React && Golang&#xff08;Gin&#xff09; Vue(Element)&#xff0c;然后小编认为可以回到原来的…

深入探讨 Nginx:安装、配置及优化指南

一、Nginx 概述及编译安装 1、概述 Nginx是一个高性能的开源HTTP和反向代理服务器&#xff0c;同时也是一个IMAP/POP3邮件代理服务器。它最初由Igor Sysoev于2002年开发&#xff0c;并于2004年首次发布。Nginx以其高并发性、低资源消耗和灵活的配置能力而受到广泛关注&#x…

[鹏城杯 2022]简单的php

题目源代码 <?phpshow_source(__FILE__); $code $_GET[code]; if(strlen($code) > 80 or preg_match(/[A-Za-z0-9]|\|"||\ |,|\.|-|\||\/|\\|<|>|\$|\?|\^|&|\|/is,$code)){die( Hello); }else if(; preg_replace(/[^\s\(\)]?\((?R)?\)/, , $code…

网安新声 | 从微软“狂躁许可”漏洞事件看安全新挑战与应对策略

网安加社区【网安新声】栏目&#xff0c;汇聚网络安全领域的权威专家与资深学者&#xff0c;紧跟当下热点安全事件、剖析前沿技术动态及政策导向&#xff0c;以专业视野和前瞻洞察&#xff0c;引领行业共同探讨并应对新挑战的策略与可行路径。 近期&#xff0c;微软披露了一个最…

JSON, YAML, XML, CSV交互可视化

1、jsoncrack https://jsoncrack.com/editor

双亲委派机制的优势与劣势

三次双亲委派机制的破坏

反向代理:定义与核心作用

反向代理&#xff1a;定义与核心作用 一、反向代理的定义二、反向代理的核心作用 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 反向代理&#xff0c;作为网络架构中的重要组件&#xff0c;扮演着关键角色。本文将简洁介绍反向代理的定义及…

整体思想以及取模

前言&#xff1a;一开始由于失误&#xff0c;误以为分数相加取模不能&#xff0c;但是其实是可以取模的 这个题目如果按照一般方法&#xff0c;到达每个节点再进行概率统计&#xff0c;但是不知道为什么只过了百分之十五的测试集 题目地址 附上没过关的代码 #include<bits…

【区块链+商贸零售】预付宝:商家数字经济服务平台 | FISCO BCOS应用案例

预付宝商家数字经济服务平台是人民链在金融领域落地的 一个区块链应用&#xff0c;致力于营造诚信消费环境&#xff0c;专治诸如健 身房老板卷款跑路、充值后餐馆倒闭钱拿不回来等令消费 者头疼不已的行业乱象&#xff0c;让消费者可以放心地预付费。 平台应用FISCO BCOS区块链…

设计模式学习[3]---单一职责原则+开放封闭原则

文章目录 前言1. 单一职责1.1 原理阐述1.2 处理方式 2. 开放-封闭原则2.1 原理阐释2.2 举例说明 总结 前言 小项目写多了&#xff0c;比如一些什么管理系统之类的&#xff0c;在接触大型项目的时候往往会将之前的一些面向过程的写法代入。 比如UI以及逻辑处理都放在一个类里面…

Flutter【01】状态管理

声明式编程 Flutter 应用是 声明式 的&#xff0c;这也就意味着 Flutter 构建的用户界面就是应用的当前状态。 当你的 Flutter 应用的状态发生改变时&#xff08;例如&#xff0c;用户在设置界面中点击了一个开关选项&#xff09;你改变了状态&#xff0c;这将会触发用户界面…

25届科大讯飞飞星计划 AI研究算法工程师 面经

目录 一面/技术面 2024/08/15 &#x1f4cb; 总结&#xff1a; 本来应该是在7月底面试的&#xff0c;但因为有事就拖到了现在&#xff0c;或许是飞星计划里最晚面试的一批&#xff1f;面试官很和蔼&#xff0c;问的问题不算难&#xff0c;总体体验还算不错。 一面/技术面 2024/…

洛谷B3981题解

题目描述 &#xff08;你不需要看懂这张图片&#xff1b;但如果你看懂了&#xff0c;会觉得它很有趣。&#xff09; JavaScript 是一种功能强大且灵活的编程语言&#xff0c;也是现代 Web 开发的三大支柱之一 (另外两个是 HTML 和 CSS)。灵活的 JavaScript 包含“自动类型转换…

Python 数据分析之Numpy学习(一)

Python 数据分析之Numpy学习&#xff08;一&#xff09; 一、Numpy的引入 1.1 矩阵/向量的按位运算 需求&#xff1a;矩阵的按位相加 [0,1,4] [0,1,8] [0,2,12] 1.1.1 利用python实现矩阵/向量的按位运算 # 1.通过列表实现 list1 [0, 1, 4] list2 [0, 1, 8]# 列表使用…

【Linux网络】select函数

欢迎来到 破晓的历程的 博客 ⛺️不负时光&#xff0c;不负己✈️ 文章目录 select函数介绍select函数参数介绍select函数返回值select的工作流程TCP服务器【多路复用版】 select函数介绍 在Linux网络编程中&#xff0c;select 函数是一种非常有用的IO多路复用技术&#xff0…

基于Java和GeoTools的Shapefile矢量数据缩略图生成实践

目录 前言 一、关于GeoTools的图片生成 1、关于GtRenderer 2、关于 图像生成架构 3、流式计算绘制 二、全球空间预览生成实战 1、pom.xml中关于图像生成依赖 2、样式设置及地图资源绑定 3、图片生成绘制 4、图片生成测试 三、成果验证 1、全球范围生成 2、我国的范…

redis随笔记

缓存穿透。key不存在。恶意攻击、代码问题。加布隆过滤器&#xff0c;或者为空就返回。 缓存失效&#xff08;击穿&#xff09;。key刚好过期。缓存时间随机数。 缓存雪崩。缓存层宕机&#xff0c;一下子袭击数据库。缓存高可用、限流熔断、提前演练。 布隆过滤器就是一个key…

Python版《超级玛丽+源码》-Python制作超级玛丽游戏

小时候最喜欢玩的小游戏就是超级玛丽了&#xff0c;有刺激有又技巧&#xff0c;通关真的很难&#xff0c;救下小公主还被抓走了&#xff0c;唉&#xff0c;心累&#xff0c;最后还是硬着头皮继续闯&#xff0c;终于要通关了&#xff0c;之后再玩还是没有那么容易&#xff0c;哈…