WAF的功能、检测、指纹及绕过

news2024/9/22 11:34:39

吉祥知识星球icon-default.png?t=N7T8http://mp.weixin.qq.com/s?__biz=MzkwNjY1Mzc0Nw==&mid=2247485367&idx=1&sn=837891059c360ad60db7e9ac980a3321&chksm=c0e47eebf793f7fdb8fcd7eed8ce29160cf79ba303b59858ba3a6660c6dac536774afb2a6330&scene=21#wechat_redirect

《网安面试指南》icon-default.png?t=N7T8http://mp.weixin.qq.com/s?__biz=MzkwNjY1Mzc0Nw==&mid=2247484339&idx=1&sn=356300f169de74e7a778b04bfbbbd0ab&chksm=c0e47aeff793f3f9a5f7abcfa57695e8944e52bca2de2c7a3eb1aecb3c1e6b9cb6abe509d51f&scene=21#wechat_redirect

《Java代码审计》icon-default.png?t=N7T8http://mp.weixin.qq.com/s?__biz=MzkwNjY1Mzc0Nw==&mid=2247484219&idx=1&sn=73564e316a4c9794019f15dd6b3ba9f6&chksm=c0e47a67f793f371e9f6a4fbc06e7929cb1480b7320fae34c32563307df3a28aca49d1a4addd&scene=21#wechat_redirect

《Web安全》icon-default.png?t=N7T8http://mp.weixin.qq.com/s?__biz=MzkwNjY1Mzc0Nw==&mid=2247484238&idx=1&sn=ca66551c31e37b8d726f151265fc9211&chksm=c0e47a12f793f3049fefde6e9ebe9ec4e2c7626b8594511bd314783719c216bd9929962a71e6&scene=21#wechat_redirect

《应急响应》icon-default.png?t=N7T8http://mp.weixin.qq.com/s?__biz=MzkwNjY1Mzc0Nw==&mid=2247484262&idx=1&sn=8500d284ffa923638199071032877536&chksm=c0e47a3af793f32c1c20dcb55c28942b59cbae12ce7169c63d6229d66238fb39a8094a2c13a1&scene=21#wechat_redirect

《护网资料库》icon-default.png?t=N7T8http://mp.weixin.qq.com/s?__biz=MzkwNjY1Mzc0Nw==&mid=2247484307&idx=1&sn=9e8e24e703e877301d43fcef94e36d0e&chksm=c0e47acff793f3d9a868af859fae561999930ebbe01fcea8a1a5eb99fe84d54655c4e661be53&scene=21#wechat_redirect

概述

WAF(web应用防火墙)是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一款产品。

文章目录一、WAF的工作原理二、WAF的常见功能三、WAF种类四、WAF的判断五、WAF的绕过六、WAF指纹七、部分WAF指纹
 

一、WAF的工作原理

WAF工作在web服务器之前,对基于HTTP/HTTPS协议的通信进行检测和识别。在用户请求到达web服务器前对用户请求进行扫描和过滤,分析并校验每个用户请求的网络包,确保每个用户的请求安全且有效,对无效或有攻击行为的请求进行阻断或隔离。

WAF的解决步骤大概可分为四部分:预备处理、标准检测、解决控制模块、系统日志记录。

1.预备处理

  先分辨是不是HTTP/HTTPS请求,然后查询该URL请求是不是在权限以内,加入该URL请求在权限目录内,交到后端响应;没有则进行标准检验。

2.标准检验

  不同的WAF有自有的检验规则,通过WAF标准去检验数据文件,查看是否有故意攻击行为。

3.解决控制模块

  对于不一样的检验结果,会做出不一样的防御姿势。不同的WAF产品自定义的阻拦页面不一样,所以我们可以根据阻拦页面判断网站使用的是哪一种WAF,进而展开绕过。

4.系统日志记录

  WAF在整个工作过程中,会将系统日志记录下来,便于分析。

二、WAF的常见功能

1、检测异常协议,拒绝不符合HTTP/HTTPS标准的请求。

  针对HTTP和HTTPS的请求进行异常检测,阻断不符合请求的访问,并且严格的限制HTTP协议中没有完全限制的规则。

2、对可疑IP进行检查

3、禁止某些IP的访问

  WAF可以指定规则,添加IP黑名单和白名单,限制IP的访问策略。

4、DDOS防护

  WAF主要通过指纹识别来对DDOS进行防护,,通过监测应用层数据对齐进行控制或者访问控制。云WAF主要利用DNS解析对网站进行DDOS防护;软件WAF主要通过监听端口或者web容器扩展的方式进行请求的检测和阻断。硬件WAF一般部署在web服务器前端,用来检测异常数据,和流量,所以在DDOS防护方面优于软件WAF。

5、防止信息泄露,保护信息安全

6、对cookies进行保护

  主要是通过加密set-cookie中的键值来保护cookie不被盗取,利用。

7、添加检测机制

  WAF可以通过在数据访问时添加csrf token,防止攻击,某些waf,会配置HSTS(由互联网工程任务组发布的互联网安全策略机制),默认使用HTTPS进行通信。

8、管理HTTP头

  X-XSS-Protection:可以在检测到反射的跨站点脚本(XSS)攻击时阻止页面加载。这些保护在很大程度上是不必要的,但是某些旧版浏览器不支持CSP(内容安全策略 (CSP) 是一个额外的安全层,用于检测并削弱某些特定类型的攻击),所以他可以为这些不支持CSP的进行保护。

X-Frame-Options:是用来给浏览器 指示允许一个页面 可否在 , , 或者 中展现的标记。站点可以通过确保网站没有被嵌入到别人的站点里面,从而避免 clickjacking 攻击。

三、WAF种类

1、软件型WAF

  软件型WAF是以软件的形式直接安装在服务器上的,所以他可以直接检查和他共处在服务器上的文件,软件等。可检查服务器上是否有webshell文件,是否有文件、账号等被创建。

  软件WAF对HTTP协议是自己进行解析的,所以可能存在与web服务器对HTTP请求的理解不一致导致被绕过。常见的软件WAF:安全狗、安全卫士等,造价相对便宜。

2、硬件型WAF

  以硬件的形式部署在链路中,部署方式比较多样,串联在链路上时可以拦截恶意流量,在旁路监听模式下只记录攻击但是不进行拦截。硬件WAF是通过攻击规则库对异常流量进行识别的,所以可能存在误杀;而且它对HTTP协议是自行进行解析,所以可能存在与web服务器对HTTP请求的理解不一致导致被绕过。

  硬件WAF一般情况下部署在交换机上。  

3、云WAF

  一般以反向代理的形式工作,通过配置NS记录或者CNAME记录,使对网站的请求报文优先经过WAF主机,经过WAF主机过滤后,将认为无害的请求报文再发送给实际网站服务器进行请求,可以说是带防护功能的CDN(内容分发网络)。

  云WAF的防护规则都处于云端,由云端负责规则的更新和维护。

  云WAF是通过将用户的DNS解析到云节点实现防护的,但是如果黑客有服务器的真是IP地址,就可以轻松绕过云WAF。

4、网站系统内置的WAF

  网站系统内置的WAF也可以说是网站系统内置的过滤,直接镶嵌在代码中,自由度比较高。一般有以下几种情况:

  ①输入参数强制类型转换

  ②输入参数合法性检查

  ③关键函数执行(sql执行、页面显示、命令执行等)前,对经过代码流程的函数进行检测。

  ④对输入的数据进行替换过滤后再继续执行代码流程(转义/替换掉特殊字符等)。

四、WAF判断

大部分检测脚本或者工具都是根据cookie信息、返回头、返回内容来判断WAF类别的。

1、使用sqlmap进行判断

  sqlmap中自带了识别waf的模块可以识别出网站的waf种类,如果安装的waf没有什么特征,识别出来的就是:Generic。

python sqlmap.py -u “http://www.xxxx.com?id=1” --identify-waf
 

2、使用手工进行判断

  使用手工进行判断的时候,判断原则是输出的内容网站是否拦截过滤。

在URL地址后面加上测试语句即可:如:union select 1,2,3%23,把测试语句放到一个不存在的参数名中,如果触发了WAF的防护,说明网站存在WAF,反之,不存在。构造aaa=select 1,2,3%23

被拦截的表现为:页面无法访问、响应码不同、返回与正常请求网页时不同的结果等。

3、Wafw00f

工具下载地址

https://github.com/EnableSecurity/wafw00f

使用方法

python wafw00f.py http://www.xxx.com/

4、xenoitx

工具下载地址

https://github.com/ajinabraham/OWASP-Xenotix-XSS-Exploit-Framework

五、WAF的绕过

WAF常见的绕过方式大致分为四大类:

1、基于规则的绕过

<1>字符变换

  大小写变换:script=>sCRipt

  字符编码:

  编码方式比较多样,如URL编码、十六进制编码、Unicode编码、HTML编码、Base64编码、JSfuck编码等。

  等价函数:

  我们在进行基于时间的SQL注入时,通常会使用不同的时间函数:如sleep();benchmark()。

  等价变量:

 And = && Or = || 等于 = like  if(a,b,c) = case when(A) then B else C end substr(str,1,1) = substr (str) from 1 for 1 limit 1,1 = limit 1 offset 1 Union select 1,2 = union select * from ((select 1)A join (select 2)B; sleep() = benchmark() concat_ws() = group_concat() substr() = substring() @@user = user() @@datadir = datadir(
 

<2>字符干扰
  • 空字符NULL (x00)空格 回车 (x0d)换行 (x0a)垂直制表 (x0b)水平制表 (x09)换页 (x0c)
 

<3>特殊符号

  单引号;双引号;反引号

<4>利用服务本身特点

WAF针对不同的服务器,他的过滤规则会有些许差异:

windows: whoami = ((((Wh^o^am””i))))       #利用符号分割字符执行whoami Linux:whoami = w’h’o’a’m”i”         #单引号或双引号连接符,需要闭合Cat /etc/passwd = cat /?t*/??ss**   #?,*通配符
 
<5>其他

2、基于解析的绕过

<1>字符集解析不同

<2>协议覆盖不全POST 的 JSON 传参 / form-data / multipart/form-data

<3>协议解析不正确

<4>站点和 WAF 对 https 有部分不一致

<5>WAF 解析与 Web 服务解析不一致

  部分 ASP+IIS 会转换 %u0065 格式的字符

  Apache 会解析畸形 Method:

    .php –> /1.php.dvw.123 从后往前解析,碰到php才会解析

  Iis5.0-6.0解析漏洞

     xx.asp/xx.jpg ,xx.asp目录下的文件都解析成asp文件

     xx.asp;.jpg 默认被解析为asp文件

  Iis7.5解析漏洞(php.ini开启fix_pathinfo)

    xx.jpg 我们在上传文件时,一句话木马写成xx.jpg,访问时后面加上xx.jpg/xx.php,图片文件会以php格式执行

  nginx解析漏洞(php.ini开启fix_pathinfo)

    xx.jpg%00.php Nginx <8.03 空字节代码执行漏洞

  同一个参数多次出现, 取的位置不一样

3、基于资源的绕过

使用消耗大的载荷,耗尽WAF的计算资源,通过增加传递得参数数量,达到waf检测上限,超出的参数就可绕过waf了。比如waf检测文本内容为40字节,多出40的就不再检测,那我们可以把脚本文件写在40个字节文件之后。

  再比如我们通过缓冲区溢出绕过WAF:当我们上传到服务器的数据量大于waf可以检测的数据量时,可以通过发送大量的垃圾数据将 WAF 溢出,从而绕过waf。union select= and (select 1)=(select 0xA*111111111111) unIon selectand 1=1 = and 1=1 and 111111…11111111

4、基于架构的绕过

<1>站点在WAF后面,但是站点可以直连

<2>站点在云服务器中,同网段服务器没有WAF

5、HTTP Parameter Pollution (HPP)

HTTP参数污染允许攻击者制作请求以操纵或检索隐藏信息,具体如下:

ASP.NET//IIS-----传入参数:=par=v1&par=v2&par=v3-----解析为:=par=v1,v2,v3ASP/IIS-----传入参数:=par=v1&par=v2&par=v3-----解析为:=par=v1,v2,v3PHP/Apache-----传入参数:=par=v1&par=v2&par=v3-----解析为:=par=v3PHP/Zeus-----传入参数:=par=v1&par=v2&par=v3-----解析为:=par=v3JSP, Servlet/Apache Tomcat-----传入参数:=par=v1&par=v2&par=v3-----解析为:=par=v1
 

6、HTTP Parameter Fragmentation (HPF)

HHTP参数分段,具体如下:在一个SQL查询中有两个或多个用户参数,例如:​​​​​​​

Query("select * from table where a=".$_REQUEST ['a']." and b>".$_REQUEST ['b']);Query("select * from table where a=.$_REQUEST['a']." and b<".$_REQUEST ['b']." limit ".$_REQUEST['c']);etc.
 

在验证从Web应用程序级别的用户接收到的参数值的阶段,该应用程序只能使用Web服务器的变量运行,而WAF(取决于模式)可以直接使用原始HTTP数据运行。但是,不管访问数据的方法如何,都涉及为每个单独的参数使用某些正则表达式。即:

preg_match("/(uni)(on.+sel)(ect)/is", $_REQUEST ['a'])preg_match("/(uni)(on.+sel)(ect)/is", $_REQUEST ['b'])preg_match("/(uni)(on.+sel)(ect)/is", $_REQUEST ['c'])...preg_match("/(sel)(ect.+fr)(om)/is", $_REQUEST ['a'])preg_match("/(sel)(ect.+fr)(om)/is", $_REQUEST ['b'])preg_match("/(sel)(ect.+fr)(om)/is", $_REQUEST ['c'])...
 

因此,如果将SQL查询的逻辑划分为几个输入该SQL查询的参数,然后使用注释将这些片段连接起来,则可以绕过所描述的过滤器:​​​​​​​

/?a = 1 + union / *&b = * / select + 1,2/?a = 1 + union / *&b = * / select + 1,pass / *&c = * / from + users
 

所以实际的操作语句为​​​​​​​

select * from table where a=1 union select 1,2select * from table where a=1 union select 1,pass from users
 

六、WAF指纹

1、额外的 Cookie2、额外的 Header3、被拒绝请求时的返回内容4、被拒绝请求时的返回响应码5、IP

七、部分WAF指纹

1、WebKinght

如何在“事件响应处理”设置中未取消选中“直接响应”,“响应重定向”和“使用响应”状态’。WebKnight将不会丢弃请求,并将相关内容发送回客户端。

直接使用响应:如果检测到攻击,则将提供位于WebKnight目录中的文件deny.htm(在WebKnight 1.3及更高版本中为nohack.htm)

如果文件不存在,或者读取文件时发生错误,则将发送回默认文本“ WebKnight应用程序防火墙警报”。

如果使用响应重定向:IIS将以302状态(“对象已移动”)记录被阻止的请求,而直接使用“响应”时,IIS日志文件中将不会记录任何内容。

当重定向客户端并且该页面也被阻止时,将无限地重定向客户端(大多数浏览器都会给出有关“超过最大重定向次数”的错误)。具体可查看官方文档:(https://www.aqtronix.com/)

2、ModSecuroty

ModSecurity是一个开放源代码,跨平台的Web应用程序防火墙(WAF)模块。它被称为WAF的“瑞士军刀”,它使Web应用程序防御者能够了解HTTP(S)流量,并提供电源规则语言和API来实施高级保护。ModSecurity只能嵌入在Apache 2.x中,但是当将其部署为反向代理时,它可以用于保护任何Web服务器。 一个恶意的请求Mod_Security会在响应头返回“406 Not acceptable”的信息。

​​​​​​​ HTTP/1.0 406 Not Acceptable Cache-Control: No-Cache Pragma: No-Cache Connection: Keep-Alive Content-Length: 0

具体可查看官方文档:(https://www.modsecurity.org)

3、360防火墙​​​​​​​

响应头包含X-Powered-By-360WZB异常请求时返回493状态码页面源码可以找到对 wzws-waf-cgi 引用

4、云锁​​​​​​​

响应头包含yunsuo_session字段阻止响应页面

5、云盾​​​​​​​

响应头包含yundun关键字页面源代码有errors.aliyun.com引用

6、安全狗

响应头包含 waf 2.0

Safedog 等字样

 HTTP/1.1 200 OK Content-Length: 689 Content-Type: text/html Last-Modified: Thu, 27 Dec 2018 08:03:11 GMT Accept-Ranges: bytes ETag: "5e49439cba9dd41:0" Server: Microsoft-IIS/7.5 X-Powered-By: WAF/2.0 Date: Sun, 13 Dec 2020 20:33:49 GMT
 

7、腾讯云​​​​​​​

阻止响应页面包含waf.tencent-cloud.com 引用阻止响应代码 405 method not allow

8、安全宝

恶意请求时返回405恶意代码

响应头包含X-Powered-by-Anquanbao

 HTTP/1.1 406 Not Acceptable Connection: close Content-Length: 584 Content-Type: text/html Date: Tue, 15 Dec 2020 03:18:45 GMT Server: ASERVER/1.8.0-3 X-Powered-By-Anquanbao: MISS from pon-bj-xy-ib5

9、百度云加速

响应头包含 Yunjiasu-ngnix​​​​​​​

 HTTP/1.1 403 Forbidden Connection: close Content-Length: 16 Cache-Control: private, max-age=0, no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Cf-Ray: 601f31327b2d4887-TNA Cf-Request-Id: 07075d138f00004887d517b000000001 Content-Type: text/plain; charset=UTF-8 Date: Tue, 15 Dec 2020 09:38:31 GMT Expires: Thu, 01 Jan 1970 00:00:01 GMT Server: yunjiasu-nginx Set-Cookie: __cfduid=d24058fa10fcb3f938923e75816b1e31b1608025111; expires=Thu, 14-Jan-21 09:38:31 GMT; path=/; domain=.119.188.9.54; HttpOnly; SameSite=Lax X-Frame-Options: SAMEORIGIN

10、创宇盾

恶意请求时 页面url 365cyd.com 365cyd.net

11、Profense

def isprofense(self):         """         Checks for server headers containing "profense"         """         return self.matchheader(('server','profense'))

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

尝试用java spring boot+VUE3实现前后端分离部署

前言 这几天开学了&#xff0c;公司这边几个和学校对接的项目都挺忙的&#xff0c;然后我又开始有点闲的情况了。问大佬能不能继续看看若依的项目&#xff0c;大佬让我自己去学了。在看若依的项目的时候在想&#xff0c;python的FLASK后端实现和JAVA spring boot的实现差别大不…

Redis与SpringMVC的整合与最佳实践

整合Redis与Spring MVC&#xff08;现在通常是Spring Boot的一部分&#xff09;可以提高应用性能&#xff0c;特别是在处理大量数据缓存和会话状态管理方面。 下面是一些关于如何整合Redis与Spring MVC的最佳实践&#xff1a; 1. 引入依赖 首先&#xff0c;你需要在你的项目中…

Linux之grafana+onealert报警

grafana介绍 Grafana是一个开源的度量分析和可视化工具&#xff0c;可以通过将采集的数据分析&#xff0c;查询&#xff0c;然后进行可视化的展示,并能实现报警。 grafana安装与登录 在grafana服务器上安装grafana 下载地址&#xff1a;https://grafana.com/grafana/downloa…

包装类及常量池

1、基本数据类型byte、short、int、long、char、boolean的包装类用到了常量池&#xff0c;大小在127以内的从常量池获取&#xff1b; 2、基本数据类型中float、double没有实现常量池技术&#xff1b; 3、java中字符串实现常量池技术&#xff1b; public class Test {public …

电机设计及电机仿真“新工具”—仿真APP

电机仿真APP可以广泛应用于电机设计、制造、测试和维护领域&#xff0c;具有强大的计算能力&#xff0c;能够模拟电机的各种工作状态和参数变化。用户可通过调整仿真参数&#xff0c;快速得到电机的响应和性能参数&#xff0c;从而进行针对性的优化和改进。借助仿真APP&#xf…

动态规划法例题

第一个空&#xff0c;用手工计算&#xff0c;可以用贪心法 先选择价值最大的物品&#xff0c;有两个价值是6的物品&#xff0c;重量合计246 剩余4个空间&#xff0c;只能放重量为2的物品&#xff0c;一共是66315 第二个空&#xff0c;需要将所有物品都放进背包舱室&#xff…

黄力医生:血压高降不下来找准这三个方向真的降下来了

在心脑血管疾病的诊疗中&#xff0c;高血压作为一种常见的慢性病&#xff0c;其管理和控制对于预防心脑血管疾病的发生和发展至关重要。然而&#xff0c;许多患者面临血压居高不下、难以控制的困境。今天&#xff0c;我们有幸邀请到心脑血管科专家黄力医生&#xff0c;为大家深…

React中实现antd自定义图标,鼠标悬浮变色

借助 antd 的 tooltip 组件来实现 hover 时变色的效果 1.新建组件 自定义图标一般在iconfont上面获取&#xff0c;复制下来的svg代码&#xff0c;切记要删除 fill 属性后添加到组件中 import { Tooltip } from "antd"; import React from "react";const …

【JavaWeb】Cookie、Session

文章目录 Cookie、Session一、Cookie&#xff08;客户端&#xff09;1、Cookie 的 特点2、Cookie 的 工作原理3、Cookie 的 基本操作5、Cookie 的 域名与路径6、Cookie 的 存活时间7、Cookie 的 删除 二、Session&#xff08;服务端&#xff09;1、Session 的 特点2、Session 的…

Mysql性能优化之自适应索引

自适应索引 是什么 自适应哈希索引是 InnoDB 存储引擎为了提高特定类型查询性能而自动构建的一种内存中的哈希索引结构。它可以根据查询模式和数据访问频率自动调整&#xff0c;以优化数据库的性能。 与BTree的区别 与传统的 B-tree 索引不同&#xff0c;哈希索引使用哈希函…

基于Java的旅游服务管理系统的设计与实现(论文+源码)_kaic

摘 要 伴随着人们生活水平的提高&#xff0c;服务行业也得到了飞速发展。人们对旅游活动也越来越重视。很多旅游爱好者以及生活压力过大的人都会选择周末&#xff0c;节假日或自己休闲时外出旅游&#xff0c;换种环境来放松心情&#xff0c;缓解工作压力&#xff0c;尽享别样生…

GHA文章是AI文章吗?

对于想做外贸的客户来说&#xff0c;谷歌SEO成为了每个网站的必攻课题&#xff0c;而在SEO策略中&#xff0c;内容质量至关重要&#xff0c;而现在&#xff0c;ai产业的发达也让不少人看见出海的希望&#xff0c;因为内容可以让ai生成&#xff0c;那么&#xff0c;现在火爆seo圈…

Leetcode199二叉树的右视图(java实现)

今天我们分享的题目是199题&#xff0c;题目描述如下&#xff1a; 那么本道题的解题思路呢就是使用层序遍历&#xff0c;每次将每层中的最后一个元素加入到我们的集合中。 本道题目和之前的层序遍历二叉树的题目很像&#xff0c;但是需要注意的细节。那么我会在代码中指出。 代…

JSON处理库 -- Fastjson

文章目录 一、json格式1.1 用途1.2 语法1.3 常见格式 二、fastjson常用类2.1 JSONObject2.2 JSONArray 三、序列化和反序列化3.1 默认序列化与反序列化3.2 序列化的扩展3.3 自定义序列化SerializeFilter3.4 JSONField 注解3.5 复习Jackson 一、json格式 1.1 用途 一种轻量级的…

SpringBoot3集成Spring Authorization Server和Spring Cloud Gateway实现网关统一认证

1. 概述 在微服务开发过程中&#xff0c;通常都会使用Spring Cloud Gateway构建统一的API网关&#xff0c;在访问微服务之前都会先校验访问者是否有权限访问资源&#xff0c;实现方式有很多&#xff0c;这里主要介绍Spring Cloud Gateway集成OAuth2.1如何实现网关统一认证。 S…

公众号里的产品宣传册是如何制作的?

​随着微信的普及&#xff0c;越来越多的企业和个人开始关注公众号&#xff0c;希望通过这个平台宣传自己的产品和服务。然而&#xff0c;你是否想过&#xff0c;那些公众号里精美的产品宣传册是如何制作出来的呢&#xff1f;今天&#xff0c;就让我来带你了解公众号产品宣传册…

解决maven中阿里云镜像仓库无法下载源码的问题

解决 Sources not found for: org.springframework.kafka:spring-kafka:3.2.3 的问题 我们在写代码的时候&#xff0c;经常需要看源码&#xff0c;但是当我们在 idea 中下载源码的时候&#xff0c;提示我们&#xff1a; Sources not found for: org.springframework.kafka:sp…

EmguCV学习笔记 C# 7.2 特征点检测

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。 教程VB.net版本请访问…

两个月冲刺软考——求解关系模式达到了第几范式题型(例题+讲解,一看就会)

目录 1.假设一对多联系不转换为一个独立的关系模式的话&#xff0c;那么生成的关系模式应该是将“一”的那一方的主键加入到“多”的一方的关系模式中。 2.求解关系模式达到了第几范式题型 1.假设一对多联系不转换为一个独立的关系模式的话&#xff0c;那么生成的关系模式应该…

10 款企业级项目管理系统是你理想中的那一款吗

市面上主流的 10 款企业级项目管理系统推荐&#xff1a;PingCode、Worktile、泛微 e-office、致远OA、Gitee、Asana、Trello、Basecamp、Monday.com、Smartsheet。 在选择合适的企业内部项目管理系统时&#xff0c;许多企业面临着如何找到一个既能满足当前需求&#xff0c;又能…