web安全漏洞

news2024/11/15 4:00:47

1.什么是Web漏洞

  WEB漏洞通常是指网站程序上的漏洞,可能是由于代码编写者在编写代码时考虑不周全等原因而造成的漏洞。如果网站存在WEB漏洞并被黑客攻击者利用,攻击者可以轻易控制整个网站,并可进一步提前获取网站服务器权限,控制整个服务器。

2. 常见的web安全漏洞

2.1 SQL注入漏洞

2.1.1 SQL注入典型案例事件

1、SONY索尼事件

  2011年4月,著名的匿名者组织Anonymous注入SONY一个网站,一星期后才被发现7千万的用户个人信息,其中包括姓名、地址、E-mail、出生日期、用户名、密码以及购买记录的数据信息,随后的一些其他服务器也被相继攻破。

2、CSDN数据泄露门

  2011年底,国内各大网站被爆出“密码泄露门”,最先公布的是著名技术网站CSDN600万账户和密码泄露事件,网站由于存在SQL注入漏洞被利用并下载用户数据库,同时令人不解的是,网站对用户的信息储存竟然是明文。

 

2.1.2 什么是SQL注入

  SQL注入攻击(SQL Injection),简称注入攻击、SQL注入,被广泛用于非法获取网站控制权,是发生在应用程序的数据库层上的安全漏洞。在设计程序中,忽略了对输入字符串中夹带的SQL指令的检查,被数据库误认为是正常的SQL指令而运行,从而使数据库受到攻击。可能导致数据被窃取、更改、删除,以及进一步导致网站被嵌入恶意代码、被植入后门程序等危害。

  SQL注入是一种代码注入技术,可能会破坏数据库。SQL注入是通过网页输入将恶意代码放置在SQL语句中。

目前SQL注入大致分为普通注入和盲注。

  1. 普通注入:根据后台数据库提示有价值的错误信息进行注入

  2. 盲注:有经验的管理员在给出错误页面时,没有提供详细的错误信息。测试者需要运用脚本通过仅有的判断信息(比如时间差)对表中的每一个字段进行探测,从而实现注入的技术(盲注的难度较大,但注入测试中经常会遇到) 。

2.1.3 SQL注入的位置

SQL注入主要就是与数据库打交道,所以程序中与涉及到与数据库交换数据的地方都有可能出现SQL注入的问题,具体有哪些呢?

  1. 表单提交,主要是POST请求,也包括GET请求;

  2. URL参数提交,主要为GET请求参数;

  3. Cookie参数提交;

  4. HTTP请求头部的一些可修改的值,比如Referer、User_Agent等;

2.1.4 SQL注入的思路

攻击者通过构造不同的SQL语句来实现对数据库的操作,这里有两个关键条件

  1. 参数用户可控(如?id=1 就是根据不同的id能查看不同的内容)

  2. 用户的参数带入数据库查询(这里就是用来判断是否有SQL注入)

注入的判断方法常用的有:

   1.使用英文的单引号’  :主要用来查看是否报错,以及错误信息是否是语法错误,还能看出使用的数据库类型 

   2.使用and、or操作

    • 对于数字型的:若?id =1 and 1=1(正常)  ?id=1 and 1=2(异常),则可能存在SQL注入
    • 对于其他类型:若?name =xxx’ and 1=1(正常)  ?name=xxx’ and 1=2(异常),则可能存在SQL注入
    • 对于搜索型的:若?name =xxx%’ and 1=1(正常)  ?name=xxx%’ and 1=2(异常),则可能存在SQL注入

  3.加减法:对于数字型

    • 加减法:?id=1+1或者?id=3-1  如果两个页面的数据与?id=2一样,证明可能存在SQL异常

  4.对于登录框,常用注释方法,常用的注释有#、-- 、/*...*/三种

    (1) 知道用户名,如我们填写的用户名:admin’# 密码:123456 构造的语句就是:

      select  *  from user where username = 'admin'# '  and  password = '123456'

    (2) 不知道用户名,如我们填写的用户名:’or 1=1# 密码:123456 构造的语句就是:

      select  *  from user where username = '' or 1=1#’  and  password = '123456'

注入思路:

  1.判断注入点

    如果存在如下方式,那么可能就会存在SQL注入漏洞

    (1) ?id=1 正常

    (2) ?id=1 and 1=1 正常且与(1)一致

    (3) ?id=1 and 1=2 不正常

  2.查询数据库类型

    (1) ?id=1 and length(user())>0

    (2) ?id=1 and version()>0

    (3) ?id=1 and (select count(*) from information_schema.TABLES)>0

  3.判断字段数

    使用order by number(其中number表示第几列)

    (1) ?id=1 and 1=1 order by 1

    (2) ?id=1 and 1=1 order by 2

    (3) ?id=1 and 1=1 order by 3

   如果order by 3时不正常了,证明表中只有2列,即只有两个字段

  4.判断回显点(回显点是页面展示与数据库交换数据的地方,这样可以用来展示我们测试的内容),使用union(条件就是只要两个查询的字段数一致就可以)

    (1) ?id=1 and 1=2 union select 1

    (2) ?id=1 and 1=2 union select 1,2

  如果在前端页面显示了2,则表示回显点是2,那么就会在2处显示我们的内容(如果在页面显示了相应的数字的话,该处就是回显点,就可以将2更换成我们想要猜测的相关内容)。access数据库的话必须加表名,表名我们可以自己猜,admin,user等来试试:union select 1,2 from table_name

  5.查询相关内容

   (1) 查询当前数据库名称:?id=1 and 1=2 union select 1,databases()

    (2) 查询数据库的版本:?id=1 and 1=2 union select 1,version()

    (3) 查询当前数据库的表:?id=1 and 1=2 union select 1,table_name from information_schema.tables where table_schema=database() limit 0,1 查看数据库下的表,可使用limit 0,1;limit 1,1的方式不断猜测下去(因为回显点只展示一个值,所以只能一个一个猜测)我们可以使用group_concat()函数将所有展示出来,但是这个要先确定展示的内容有没有长度的限制,如果有就需要使用limit

   (4) 查询当前数据库的表:?id=1 and 1=2 union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()

   (5) 查询表下的字段:?id=1 and 1=2 union select 1,column_name from information_schema.columns where table_schema=database() and table_name='admin' limit 0,1  同样也可以使用group_concat(column_name)来展示

   (6) 查看表内容:?id=1 and 1=2 union select 1,username from admin  limit 0,1 查询表admin中第一行的username

   (7) 查看表内容:?id=1 and 1=2 union select 1,password from admin  limit 0,1 查询表admin中第一行的password,需要注意的是information_schema这个系统表是MySQL5.0以后的。

2.1.5 SQL注入常用技巧

猜数据库类型

  1. 使用英文的引号’,查看错误信息

    从上面我们可以知道,如果程序的开发没有过滤使用英文的引号’的错误信息的话,我们可以从错误提示中获取到具体使用到的数据库。

  (1) 如MySQL中的错误信息如下:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''' at line 1

  (2) postegres中的错误信息如下:

unterminated quoted string at or near "'"

  (3) mssql中的错误信息如下:

Microsoft JET Database Engine

  (4) Oracle中的错误信息如下:

ORA-01756:quoted string not properly terminated

ORA-00933:SQLcommand not properly ended

  2.通过数据库特有的特征

  (1) mssql数据库特有的表sysobjects

    ?id=1 and (select count(*) from sysobjects)>0 正常

  (2) access数据库

    ?id=1 and (select count(*) from sysobjects)>0

    ?id=1 and (select count(*) from msysobjects)>0

两个都异常就是access数据库,因为access数据库无sysobjects表,虽然有msysobjects表,但是没有访问权限,所以也会异常

  (3) MySQL特有函数

    ?id=1 and length(user())>0

    ?id=1 and version()>0

    ?id=1 and (select count(*) from information_schema.TABLES)>0

  (4) Oracle特有用户表sys.user_tables

    ?id=1 and (select count(*) from sys.user_tables)>0

    “;”是子句查询标识符,Oracle不支持多行查询,因此如果返回错误,则说明很可能是Oracle数据库。

  猜表名

    (1) ?id=1 and exists(select * from 表名)

  猜列名

    (1) ?id=1 and exists(select 字段 from 表名)

  猜列内容长度

    (1) ?id=1 and (select top 1 len(字段)  from 表名) = 1

    (2) ?id=1 and (select length(字段)  from 表名 limit 1) = 1

    其中,要根据上面判断的数据库类型使用不同的方式。

  猜列具体内容

    (1) ?id=1 and (select top 1 asc(mid(字段,1,1))  from 表名) = 97

    (2) ?id=1 and (select ASCII(mid(字段,1,1))  from 表名 limit 1) = 97

其中,也需要根据上面判断的数据库类型来使用不同的函数,ASCII为MySQL中将字符转换成ASCII码,mid为字符串的截断函数,第一个参数为字段名称,第二个参数为开始的列数,第三个为截取的长度。

2.1.6 SQL注入常见的防范方法

  (1)所有的查询语句都使用数据库提供的参数化查询接口,参数化的语句使用参数而不是将用户输入变量嵌入到SQL语句中。当前几乎所有的数据库系统都提供了参数化SQL语句执行接口,使用此接口可以非常有效的防止SQL注入攻击。

  (2)对进入数据库的特殊字符(’”<>&*;等)进行转义处理,或编码转换。

  (3)确认每种数据的类型,比如数字型的数据就必须是数字,数据库中的存储字段必须对应为int型。

  (4)数据长度应该严格规定,能在一定程度上防止比较长的SQL注入语句无法正确执行。

  (5)网站每个数据层的编码统一,建议全部使用UTF-8编码,上下层编码不一致有可能导致一些过滤模型被绕过。

  (6)严格限制网站用户的数据库的操作权限,给此用户提供仅仅能够满足其工作的权限,从而最大限度的减少注入攻击对数据库的危害。

  (7)避免网站显示SQL错误信息,比如类型错误、字段不匹配等,防止攻击者利用这些错误信息进行一些判断。

  (8)在网站发布之前建议使用一些专业的SQL注入检测工具进行检测,及时修补这些SQL注入漏洞。

  遗留:各种不同数据库类型的攻击实战、SQL注入工具的使用

 

2.2 跨站脚本漏洞XSS

2.2.1 XSS定义

  跨站脚本攻击(Cross-site scripting,通常简称为XSS,因为和层叠样式表的扩展名CSS重名了,故取名为XSS)。通常指的是利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java、 VBScript、ActiveX、 Flash 或者甚至是普通的HTML。

简单的说,SQL注入是将用户输入的数据当作SQL语句,放到数据库中去执行,而XSS是将用户输入的数据当作HTML或者JavaScript脚本,放到页面上去执行。

实际上,“跨站脚本攻击”这个名字本身也另有来历,仅仅是因为当时第一次演示这个漏洞的黑客是通过“跨站”的方式植入脚本进行攻击的。 由于现代浏览器的“同源策略”已经让运行在浏览器中的javascript代码很难对外站进行访问了, 所以这个漏洞的名称可能存在一定的误导性,让很多初学者看了很多次都不能理解这个漏洞的原理。

2.2.2 XSS原理

  XSS攻击主要是依靠一切可能的手段,将浏览器中可以执行的脚本(javascript)植入到页面代码中,从而对用户客户端实施攻击;从本质上讲,就是想尽一切手段在别人的代码环境中执行自己的代码。

那么这里就有两个关键的条件:

  1. 如何把代码植入到对方的系统中去?也就是说用户要能在页面控制输入;

  2. 植入进去的代码能不能被对方的系统执行?也就是说原本要执行的代码拼接了用户输入的数据。

2.2.3 XSS危害

2.2.3.1 什么是恶意脚本

  实际上,能在受害者的浏览器中运行的JavaScript并不是都是有害的,因为JavaScript是在一个严格受限的环境中运行的(对用户文件和操作系统有严格的访问限制),然而当我们考虑如下几个方面时,我们就会对恶意脚本有一个清晰的认识。

  • JavaScript可以访问一些用户的敏感信息,比如cookies。

  • JavaScript可以通过XMLHttpRequest和其他的一些机制向任意终端发送包含任意内容的HTTP请求。

  • JavaScript可以通过DOM操作方法任意修改当前页面的HTML内容。

如果把上面这几点集合起来,那可以造成很严重的安全攻击了。

2.2.3.2 XSS危害

  那么如果攻击者拥有了可以执行任意JavaScript脚本的能力后,究竟会有哪些危害呢?

  • 盗取Cookie:攻击者可以通过document.cookie获取与网站相关的Cookie信息。并且可以把Cookie信息发回攻击者自己的服务器,然后分析出敏感信息,比如session id。

  • 记录按键信息:攻击者可以通过addEventListener注册键盘侦听事件,然后把用户所有的按键信息发回他自己的服务器。这就有可能会记录下密码、信用卡号等敏感信息。

  • 钓鱼:攻击者可以通过DOM操作在页面中插入一个伪造的登陆表单,并把form元素的action属性指向他自己的服务器,诱使用户提交敏感信息。

  • 篡改页面:攻击者可以通过DOM操作方法直接篡改页面内容

  • 控制数据:包括读取、篡改、添加、删除企业敏感数据的能力

  • 将XSS配合SQL、CSRF等漏洞,控制受害者机器向其它网站发起攻击

  总的来说,就是攻击者利用XSS攻击成功后,攻击者可能得到(包括但不限于)更高的权限,那么攻击者就可以使用这些权限做任何他想做的事。

2.2.4 XSS分类

2.2.4.1 非持久型跨站

  非持久型XSS (也叫做反射型XSS),是指用户发出请求时,xss代码出现在url中,作为输入提交到服务器端,服务器端解析后响应,xss代码随响应内容一起传回给浏览器,最后浏览器解析执行xss代码。这个过程像一次反射,故叫反射型xss。

  反射型XSS主要是对一个页面的URL中的某个参数做文章,把精心构造的恶意脚本包装到URL参数中, 再将这个URL散布到网上,骗取用户访问这个URL,从而对其进行攻击。

  散布的方式通常伴有一些美女图片、游戏外挂或是其他的一些强诱惑力的内容,而其真实目的则是为了骗取用户访问这个URL。

  此类 XSS 通常出现在网站的搜索栏、用户登录口等地方,常用来窃取客户端 Cookies 或进行钓鱼欺骗。

其大致流程如下:

(1) 攻击者构造了一个包含恶意字符串的URL并把它发给受害者。

(2) 诱使受害者发起这个URL请求。

(3) 网站在响应中引入这个恶意字符串。

(4) 受害者浏览器执行响应中的恶意脚本,将受害者的cookies信息发给攻击者服务器。

那么反射型XSS是如何实施的呢?

  从上面我们可以看出,实际上反射型XSS需要受害者向服务器发送一个包含恶意代码的请求,这样看起来没有人会这样做,但实际上至少有两种常见的方法可以让受害者发起一次针对自己的反射型XSS攻击。

(1) 如果用户是具体的个人,攻击者可以发送恶意URL给受害者(如:通过email或者即时消息)然后诱使受害者访问该URL。

(2) 如果用户是一个群体,攻击者可以发布一个恶意的URL链接(如:在他的网站上或社交网络上)然后等待访问者点击该URL。

2.2.4.2 持久型跨站

  这是危害最直接的跨站类型,跨站代码存储于服务端(比如数据库中)。常见情况是某用户在论坛发贴,如果论坛没有过滤用户输入的Javascript代码数据,就会导致其他浏览此贴的用户的浏览器会执行发贴人所嵌入的Javascript代码。

其大致流程如下:

(1) 攻击者利用网站的一个表单(如发帖框),将恶意字符串插入到网站数据库中。

(2) 受害者想访问贴吧内容,所以向网站请求页面。

(3) 网站在响应中将已经引入恶意字符串数据发给受害者。

(4) 受害者浏览器执行响应中的恶意脚本,并把受害者的cookies发给攻击者服务器。

2.2.5 XSS验证

XSS验证常用的语句:

<script>alert(‘1’)</script>
<script>document.cookie</script>
<iframe src=http://baidu.com>
<meta http-equiv="refresh" content="5;url=http://www.baidu.com">

2.2.6. XSS防范

(1)与SQL注入防护的建议一样,假定所有输入都是可疑的,必须对所有输入中的script、iframe等字样进行严格的检查。这里的输入不仅仅是用户可以直接交互的输入接口,也包括HTTP请求中的Cookie中的变量,HTTP请求头部中的变量等。

(2)不仅要验证数据的类型,还要验证其格式、长度、范围和内容。

(3)不要仅仅在客户端做数据的验证与过滤,关键的过滤步骤在服务端进行。

(4)对输出的数据也要检查,数据库里的值有可能会在一个大网站的多处都有输出,即使在输入做了编码等操作,在各处的输出点时也要进行安全检查。

(5)在发布应用程序之前测试所有已知的威胁。

 

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

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

相关文章

外资的“噩梦”,特斯拉不惧挑战,租赁印度办公楼,入驻当地市场

根据8月9日《印度时报》的报道&#xff0c;特斯拉近期在印度正式成立了名为“特斯拉印度汽车与能源公司”的子公司。 据可靠消息人士透露&#xff0c;特斯拉已在印度浦那维曼纳加尔地区的Panchshil商业园总部租下了面积为5850平方英尺的办公空间&#xff0c;该商业园被认为是印…

Cobalt Strike(cs)下载及使用

下载地址 https://pan.baidu.com/s/1OzsPz8vzEunZW35Oqdq2aw?pwdraf2 提取码&#xff1a;raf2 使用 1、启动服务 2、客户端连接服务&#xff0c;可以是linux\windows 3.新建监听器 4、生成反弹shell 5、在目标机器上执行生成的exe文件&#xff0c;靶机可以ping同攻击机&…

网页版Java(Spring/Spring Boot/Spring MVC)五子棋项目(四)对战模块

网页版Java&#xff08;Spring/Spring Boot/Spring MVC&#xff09;五子棋项目&#xff08;四&#xff09;对战模块 一、约定前后端交互接口1. 建立连接接口2. 针对落子的请求和响应 二、实现前端页面三、实现后端1. 当用户进入房间&#xff0c;更新用户状态 OnlineUserManager…

BDA初级分析——先导课

思考题&#xff1a;假设你是三只松鼠营销团队的一员 美团or抖音&#xff1f;你会如何选择&#xff1f; 一、什么是数据分析 数据分析是根据业务问题&#xff0c;对数据进行收集、清洗、处理和建模的过程&#xff0c;用于识别有助于业务的信息&#xff0c;获取关键业务结论并辅…

A2C原理和代码实现

参考王树森《深度强化学习》课程和书籍 1、A2C原理&#xff1a; Observe a transition&#xff1a; ( s t , a t , r t , s t 1 ) (s_t,{a_t},r_t,s_{t1}) (st​,at​,rt​,st1​) TD target: y t r t γ ⋅ v ( s t 1 ; w ) . y_{t} r_{t}\gamma\cdot v(s_{t1};\mathbf…

Rocketmq 5.0 任意时间定时消息(RIP-43) 原理详解 源码解析

1. 背景 1.1 概念和应用场景 延迟消息&#xff08;定时消息&#xff09;即消息到达消息队列服务端后不会马上投递&#xff0c;而是到达某个时间才投递给消费者。它在在当前的互联网环境中有非常大的需求。 例如电商/网约车等业务中都会出现的订单场景&#xff0c;客户下单后…

用C语言构建一个数字识别深度神经网络

接上一篇: 用C语言构建一个数字识别卷积神经网络 1. 深度神经网络 按照深度学习的理论&#xff0c;随着神经网络层数的增加&#xff0c;网络拟合复杂问题的能力也会增强&#xff0c;对事物特征的挖掘也会更加深入&#xff0e;这里尝试构建一个&#xff15;层深度的神经网络&am…

靶形数独

题目描述 小城和小华都是热爱数学的好学生&#xff0c;最近&#xff0c;他们不约而同地迷上了数独游戏&#xff0c;好胜的他们想用数独来一比高低。但普通的数独对他们来说都过于简单了&#xff0c;于是他们向 Z 博士请教&#xff0c;Z 博士拿出了他最近发明的“靶形数独”&am…

使用AI工具Lama Cleaner一键去除水印、人物、背景等图片里的内容

使用AI工具Lama Cleaner一键去除水印、人物、背景等图片里的内容 前言前提条件相关介绍Lama Cleaner环境要求安装Lama Cleaner启动Lama CleanerCPU方式启动GPU方式启动 使用Lama Cleaner测试结果NO.1 检测框NO.2 水印NO.3 广州塔NO.4 人物背景 参考 前言 由于本人水平有限&…

springcloud3 bus+springconfig 实现配置文件的动态刷新(了解)

一 springcloud Bus的作用 1.1 springcloud的作用 spring cloud bus是用来将分布式系统的节点与轻量级消息系统链接起来的框架。 它整合了java的事件处理机制和消息中间件的功能。其中目前支持RabbitMQ和kafka 简介&#xff1a; bus实现多个服务的配置文件动态刷新。 1.2 …

【算法|数组】快慢指针

算法|数组——快慢指针 引入 给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你…

QT QLCDNumber 使用详解

本文详细的介绍了QLCDNumber控件的各种操作&#xff0c;例如&#xff1a;新建界面、源文件、设置显示位数、设置进制、设置外观、设置小数点、设置溢出、显示事件、其它文章等等操作。 实际开发中&#xff0c;一个界面上可能包含十几个控件&#xff0c;手动调整它们的位置既费时…

一些日常问题的简单总结

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 maven生命周期二方包maven的配置 Java内存管理堆jvm内存调优GC流程G1垃圾回收器 CPU负载及使用率docker二进制安装及配置nexusnginx做反向代理 k8spod生命周期探针l…

linux remoteproc驱动中elf解析函数实现分析

linux remoteproc驱动中elf解析函数实现分析 1 ELF文件组织结构2 ELF_GEN_FIELD_GET_SET3 elf 各种header解析接口以及其实现3.1 elf header3.1.1 elf header解析接口3.1.2 elf header各个解析函数为&#xff1a;3.1.2.1 ELF_GEN_FIELD_GET_SET(hdr, e_entry, u64)3.1.2.2 ELF_…

[OnWork.Tools]系列 07-Web浏览器

简介 简易的web浏览器,适合临时使用 组件安装 第一次使用时可能需要安装相关组件 点击确定 会打开官方地址 WebView2 - Microsoft Edge Developer 点击立即下载 跳转到新的地址 WebView2 - Microsoft Edge Developer 有外网的选择第一个,无网络的在有网络的电脑打开后选择…

SpringCloud实用篇4——MQ RabbitMQ SpringAMQP

目录 1 初识MQ1.1 同步和异步通讯1.1.1 同步通讯1.1.2 异步通讯 1.2 技术对比 2.快速入门2.1 安装RabbitMQ2.1.1 单机部署2.1.2集群部署 2.2 RabbitMQ消息模型2.3.导入Demo工程2.4 入门案例2.4.1 publisher实现2.4.2 consumer实现 3 SpringAMQP3.1 Basic Queue 简单队列模型3.1…

【源码分析】Nacos如何是现在CP模式下基于Raft协议的节点注册逻辑

而对于持久节点&#xff0c;有一个Raft协议的实现 我们知道Raft算法作为一个CP协议&#xff0c;它通过的是Leader节点来向各个节点进行数据的同步。 所以会先判断当前节点是否是Leader节点&#xff0c;如果不是则将请求转发到Leader节点进行处理。 而如果就是Leader节点&am…

二、Linux中权限、shell命令及运行原理

shell命令及运行原理 我们使用Linux时&#xff0c;并不是直接访问操作系统&#xff0c;为什么不是直接访问操作系统呢&#xff1f; 如果用户直接访问操作系统&#xff0c;不仅使用难度大&#xff0c;而且不安全&#xff0c;容易把系统文件损坏。 那么我们通常是如何访问操作系统…

全网最牛,接口自动化测试实现详细总结,23年测试进阶之路...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 为什么要做接口自…

Java String类【超详细】

文章目录 1. 字符串构造2. String对象的比较2.1 比较是否引用同一个对象2. 2boolean equals(Object anObject) 方法&#xff1a;按照字典序比较2.3 int compareTo(String s) 方法: 按照字典序进行比较2.4 int compareToIgnoreCase(String str) 方法&#xff1a;与compareTo方式…