DVWA(全级别通关教程详解)

news2025/2/26 1:27:52

文章目录

      • Brute Force
        • Low
        • Medium
      • Command Injection
        • Low
        • Medium
        • High
      • CSRF
        • Low
        • Medium
        • High
      • File Inclusion
        • Low
        • Medium
        • High
      • File Upload
        • Low
        • Medium
        • High
      • SQL Injection (手工)
        • Low
        • Medium
        • High
      • SQL Injection(工具)
        • Low
        • Medium
        • High
      • SQL Injection (Blind)
        • Low
          • 布尔盲注
          • 时间盲注
      • XSS(DOM)
        • Low
        • Medium
        • High
      • XSS(Reflected)
        • Low
        • Medium
        • High
      • xss(Stored)
        • Low
        • Medium
        • High

Brute Force

Low

  • 随意输入

在这里插入图片描述

  • 打开bp进行抓包,右键点击然后发送给Intruder
    在这里插入图片描述
  • 点击清除
    在这里插入图片描述
  • 选中你所要爆破的内容 ,然后点击添加
    在这里插入图片描述
  • 开始攻击
    在这里插入图片描述
    如图我们可以看到攻击完成,那么怎么确定哪一个是正确的用户名密码,纵观全局我们会发现有一个特殊的长度数字,没错就是这个,那么在此我们便找出了我们所需要的东西,发送验证一下。
    在这里插入图片描述
    如上图长度和别的不一样的即为密码。
    用同样的方法爆破用户名
    在这里插入图片描述

Medium

Command Injection

Low

  • 输入127.0.0.1在这里插入图片描述
  • 解决乱码问题
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 输入自己想知道的信息的命令,eg:
127.0.0.1&ipconfig
127.0.0.1&systeminfo
127.0.0.1&dir

Medium

  • 查看源码
    在这里插入图片描述
    我们发现这一关把 && 和 ;进行了转义。
  • 我们使用别的方法进行绕过
    第一种:我们使用一个&
    在这里插入图片描述
    另一种办法:我们可以采用;把两个&符号分开,这样不也能绕过吗,看下面。
    在这里插入图片描述

High

  • 查看源码
    在这里插入图片描述
    发现好多字符被转义了,但是我们依然有方法可以绕过它

上面的被转义的符号你真的看清楚了吗,哪些之间有空格,哪些没有你确定自己看清楚了吗
在这里插入图片描述

CSRF

Low

  • 我们输入两次新密码提交之后,观察url,发现是get请求
    在这里插入图片描述
  • 验证密码是否修改成功
    在这里插入图片描述
  • 如上图,密码修改成功
  • 我们将之前页面的url复制,然后在 同一浏览器(利用cookie) 中打开新的页面,粘贴,并将password_new和password_conf的值进行修改,如下图,然后访问
    在这里插入图片描述
  • 验证密码是否修改成功
    在这里插入图片描述
    成功修改!!!

而在真实地攻击环境中,我们通常是给受害者发送一个链接,而在正常的情况下我们通常不会点击一个很长的看起来就不正常的链接,这个时候我们就需要好好学习社会工程学,学会利用人们的心理来达到我们的目的,诱使他们点击我们构造的链接通常情况下会把长链接构造成一个短链接,这个时候我们可以利用网上很多在线工具)

比如:站长工具:短链接生成器(就会自动帮我们生成一个短链接)在这里插入图片描述

我们也可以通过构造一个页面。
修改密码的链接重定向到一个自己写的一个错误页面,用户点击之后以为出错了,实际已经执行了恶意代码。在这里插入图片描述
在这里插入图片描述
点击进入链接,出现上图错误页面,但其实已经执行了语句。
在这里插入图片描述
在这里插入图片描述
如上图所示验证成功。

  • 代码审计
<?php

if( isset( $_GET[ 'Change' ] ) ) {
    // Get input
    $pass_new  = $_GET[ 'password_new' ];
    $pass_conf = $_GET[ 'password_conf' ];

    // Do the passwords match?
    if( $pass_new == $pass_conf ) {
        // They do!
        $pass_new = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $pass_new ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));
        $pass_new = md5( $pass_new );

        // Update the database
        $insert = "UPDATE `users` SET password = '$pass_new' WHERE user = '" . dvwaCurrentUser() . "';";
        $result = mysqli_query($GLOBALS["___mysqli_ston"],  $insert ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );

        // Feedback for the user
        echo "<pre>Password Changed.</pre>";
    }
    else {
        // Issue with passwords matching
        echo "<pre>Passwords did not match.</pre>";
    }

    ((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
}

?> 

在这里插入图片描述

Medium

  • 依旧先将url复制,并修改进行访问
    在这里插入图片描述
    在这里插入图片描述
    我们会发现修改失败。
  • 原因如下
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 我们发现一个有referer,一个没有。这时候查看源代码,原来是对referer做了限制,那么我们把地址栏抓到的数据包发送给重发器,把在页面数据包中的referer复制过来,然后查看结果。
    在这里插入图片描述
    成功!!!

High

基于token的身份验证方法 使用基于 Token 的身份验证方法,在服务端不需要存储用户的登录记录。大概的流程是这样的:
1.客户端使用用户名跟密码请求登录;
2.服务端收到请求,去验证用户名与密码;
3.验证成功后,服务端会签发一个 Token,再把这个 Token 发送给客户端;
4.客户端收到 Token以后可以把它存储起来,比如放在 Cookie 里或者 Local Storage 里;
5.客户端每次向服务端请求资源的时候需要带着服务端签发的;
6. 服务端收到请求,然后去验证客户端请求里面带着的 Token,如果验证成功,就向客户端返回请求的数据。

File Inclusion

Low

  • 查看源码,发现没有任何限制
    在这里插入图片描述

  • 如果出现如下提示
    在这里插入图片描述

  • 修改配置文件,将allow_url_include 开启为on
    在这里插入图片描述

  • 如果还不行,看远程包含是否开启

在这里插入图片描述
在这里插入图片描述

  • 尝试构建ur,例如我们可以查看php配置文件内容
    http://127.0.0.1/DVWA/vulnerabilities/fi/?page=D:\Xunlei_Downloads\phpstudy_pro\WWW\DVWA\php.ini
  • 看到如下信息即可
    在这里插入图片描述

Medium

  • 查看源码发现对http等进行了一些过滤
    在这里插入图片描述
  • 通过双写避开
    在这里插入图片描述

High

  • 查看源码
    在这里插入图片描述
    fnmatch() 函数:根据指定的模式来匹配文件名或字符串。
  • 构建url
    在这里插入图片描述

File Upload

Low

  • 查看源码
    在这里插入图片描述

源码中暴露的问题:

​ 正常的长传文件,没有做任何过滤,并且输出了上传文件的路径信息

文件上传文件后,文件直接保存,保存路径为hackable/uploads/,文件上传成功后,返回succesfully。

  • 上传一句话木马测试
    在这里插入图片描述

在这里插入图片描述
上传成功!!!

  • 根据路径去找这个文件
    在这里插入图片描述
    发现确实存在
  • 使用中国蚁剑连接
    在这里插入图片描述
    在这里插入图片描述
    连上了
    攻击者可以为所欲为了,尤其是那种操作权限开放的,人家直接修改你的数据库或者直接删库。

Medium

  • 查看源码
    在这里插入图片描述
    Medium级别的代码对上传文件的类型、大小做了限制,要求文件类型必须是jpeg或者png,大小不能超过100000B。
    ​只进行了Content-Type类型校验,试一试正常上传.png文件,抓包修改文件后缀名为.php
  • 抓包
    在这里插入图片描述
  • 再修改filename为shell.php
  • 放包
    在这里插入图片描述

High

  • 查看源码
<?php

if( isset( $_POST[ 'Upload' ] ) ) {
    // Where are we going to be writing to?
    $target_path  = DVWA_WEB_PAGE_TO_ROOT . "hackable/uploads/";
    $target_path .= basename( $_FILES[ 'uploaded' ][ 'name' ] );

    // File information
    $uploaded_name = $_FILES[ 'uploaded' ][ 'name' ];
    $uploaded_ext  = substr( $uploaded_name, strrpos( $uploaded_name, '.' ) + 1);
    $uploaded_size = $_FILES[ 'uploaded' ][ 'size' ];
    $uploaded_tmp  = $_FILES[ 'uploaded' ][ 'tmp_name' ];

    // Is it an image?
    if( ( strtolower( $uploaded_ext ) == "jpg" || strtolower( $uploaded_ext ) == "jpeg" || strtolower( $uploaded_ext ) == "png" ) &&
        ( $uploaded_size < 100000 ) &&
        getimagesize( $uploaded_tmp ) ) {

        // Can we move the file to the upload folder?
        if( !move_uploaded_file( $uploaded_tmp, $target_path ) ) {
            // No
            echo '<pre>Your image was not uploaded.</pre>';
        }
        else {
            // Yes!
            echo "<pre>{$target_path} succesfully uploaded!</pre>";
        }
    }
    else {
        // Invalid file
        echo '<pre>Your image was not uploaded. We can only accept JPEG or PNG images.</pre>';
    }
}

?> 

getimagesize(string filename)函数会通过读取文件头,返回图片的长、宽等信息,如果没有相关的图片文件头,函数会报错。可以看到,High级别的代码读取文件名中最后一个”.”后的字符串,期望通过文件名来限制文件类型,因此要求上传文件名形式必须是”.jpg”、”.jpeg” 、”*.png”之一。同时,getimagesize函数更是限制了上传文件的文件头必须为图像类型。

  • 我们可以通过生成图片马的方式上传文件
    在命令行下用copy命令将图片mm.jpg和之前的一句话木马shell.php合并在一起
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 上传3.jpg
    在这里插入图片描述
    在这里插入图片描述

此时由于图片马中的php代码并没有被解析,所以不能直接使用蚁剑进行连接,这里可以通过命令执行漏洞将文件名改为php

  • 在 command injection的命令输入框中输入以下命令
    127.0.0.1|move …/…/hackable/uploads/3.jpg …/…/hackable/uploads/shell.php
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 打开中国蚁剑
    在这里插入图片描述
    在这里插入图片描述
    成功!!!!

SQL Injection (手工)

Low

  • 首先输入1,查看返回结果。
    在这里插入图片描述
  • 查看是否有注入,输入1’,报错如下:
    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 ‘‘1’’’ at line 1
    发现 存在字符型注入漏洞,尝试字符型注入,如下:
1' or '1' = '1

在这里插入图片描述

  • 使用 order by 查看一共有多少列

ORDER BY 语句用于对结果集进行排序。
而order by x 可以从1开始,1 表示的第一个字段,2表示的第二个字段
如此类推就可以了,但是当不存在那个字段的时候,就会产生这样的错误。 unknown column name x,这样,字段数就是x-1。
(为了方便我们直接把SQL语句中后续语句全部注释掉不执行,在判断语句后加 #,全部注释掉就可以不用考虑单双引号闭合的问题)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
一共有两列

  • 查看哪些数据可以回显

那union查询有哪些特性呢?
1.Union必须由两条或者两条以上的SELECT语句组成,语句之间使用Union链接。
2.Union中的每个查询必须包含相同的列、表达式或者聚合函数,他们出现的顺序可以不一致(这里指查询字段相同,表不一定一样)
3.列的数据类型必须兼容,兼容的含义是必须是数据库可以隐含的转换他们的类型
4、只有当前一条语句不成立时才会执行后一条

在这里插入图片描述
可以知道,1和2两个位置都可以回显。
利用2位置,查看当前的数据库为dvwa
在这里插入图片描述

  • 猜测表名:
1union select 1,group_concat(table_name) from information_schema.tables where table_schema = ‘dvwa’#

在这里插入图片描述
此时可能会出现Illegal mix of collations for operation 'UNION’问题
在这里插入图片描述是编码问题,去数据库修改

  • 获取字段名
1union select 1 , group_concat(column_name) from information_schema.columns where table_name = ‘users’ #

在这里插入图片描述

  • 获取用户名和密码
1union select user,password from users#

在这里插入图片描述

Medium

在这里插入图片描述
我们发现不能进行语句输入

  • 打开Burp Suite进行抓包
    在这里插入图片描述
  • 右键选择发送给Repeater
    在这里插入图片描述
  • 我们可以通过修改最下面的语句进行注入
    在这里插入图片描述
  • 例如重构语句进行注入类型的判断
    在这里插入图片描述
    没有语法显示错误,且返回正常
    在这里插入图片描述
    没有语法显示错误,且返回错误,
    则判断为数字型注入
  • 其实在数据包中会找到我们提交的ID如下图(这里的ID的位置就是我们可以利用的注入位置),其他就同Low的操作一样了。
    在这里插入图片描述
  • 代码审计
    在这里插入图片描述

High

  • 点击
    在这里插入图片描述
    之后会出现一个新的界面

  • 在新的界面输入内容,点击submit
    在这里插入图片描述
    返回结果输出在原来的界面上,其他同Low。

  • 代码审计
    在这里插入图片描述

SQL Injection(工具)

sqlmap常用命令

Low

  • 输入1,然后使用Burp suite抓包,然后再放包
    在这里插入图片描述
  • 抓包之后,输入python sqlmap.py -u "(url地址)"如下图图所示

在这里插入图片描述
但最后出现了302重定向会返回登录页面,证明这个页面需要cookie,那么我们接下来就复制数据包中的cookie

  • 点击代理,然后在HTTP历史记录中找到该条记录的cookie,复制
    在这里插入图片描述
    在这里插入图片描述
  • 在后面用 --cookie" "如下图
    在这里插入图片描述
  • 接下来你需要一直点击y,也可以直接在上面的语句后面加一个 --batch默认回答y
  • 如下图,我们可以看到注入点的信息
    在这里插入图片描述
  • 查看数据库相关信息,添加语句–dbs(查看所有数据库的名称)
    在这里插入图片描述
  • 添加 --current-db即可查看该数据库名称
    在这里插入图片描述
  • 添加 -D dvwa --tables(列出dvwa数据库中全部表名)
    在这里插入图片描述
  • 添加 -D dvwa T users --colunms(列出users表中的字段信息)
    在这里插入图片描述
    在这里插入图片描述
  • 添加 -D dvwa -T users -C user,password,user_id --dump(一般数据库中的信息都会加密,这个命令可以直接显示解密后的情况,并且会自动保存到本地)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    完成!!!!

Medium

  • burp suite抓包
    在这里插入图片描述
  • 我们把数据包复制到创建的文件中

记住,记住,记住,千万记住(重要的事情说好几遍)一定要把这个文件放在sqlmap下面,不要问我为什么,因为新建文件的原理就是让工具读取文件,你已经进入sqlmap里面了,所以为了方便你当然得把文件建在sqlmap里面啊。

在这里插入图片描述

  • 命令 python sqlmap.py -r 1.txt --batch

在这里插入图片描述
在这里插入图片描述
结果如上图所示,之后步骤同low。

High

  • 第三关跟之前的主要区别在于,是跨页面,同样抓包
    在这里插入图片描述
  • 把两个页面连接起来,输入命令 --second-url""后面这个地址是第一个页面的地址(前面的1.txt文件记得改成新抓的包)。
    在这里插入图片描述
    在这里插入图片描述
    结果如上图所示之后的步骤同low。

SQL Injection (Blind)

Low

布尔盲注

在这里插入图片描述

  • 根据上表判断注入类型
    在这里插入图片描述
    返回正常,则判断为字符型注入
  • 猜解数据库名字长度
1' and length(database())=1#   

在这里插入图片描述

1’ and length(database())=1#
1’ and length(database())=2#
1’ andlength(database())=3#
1’ and length(database())=4#
直至猜测长度为4时才返回正常结果
在这里插入图片描述

此时我们知道数据库的长度为4

  • 猜测数据库名
1' and ascii(substr(database(),1,1)>97#

思路因为主要是猜,猜测具体名字就是用无数遍的二分法等算法猜

时间盲注

在这里插入图片描述
结果不会延迟说明不是数字型
在这里插入图片描述
结果延迟说明是字符型
接下来的步骤就同布尔型注入了

XSS(DOM)

Low

  • 查看源码
    在这里插入图片描述DOM xss low 服务器端没有任何php代码,执行命令的只有客户端的js代码。
  • 点击English
    在这里插入图片描述
    我们发现url地址栏上出现了English
  • 尝试注入js代码
    在这里插入图片描述

Medium

  • 查看源码
    在这里插入图片描述
    发现对script进行了过滤
  • 检查前端html语句。
    在这里插入图片描述
    value的值是从这个当中选出来的,那么我们可以通过构造闭合来执行我们的语句。
    把English替换成 ></option></select><img src=1 onerror=alert(/xss/)>

那么这个语句是怎么闭合的呢?
学过html语言的我们都知道都是双标签,也就是说会识别两个标签之间的语句,那么我们就人为把它闭合起来,在执行过程中,一旦存在一对标签,那么就会执行这里面的语句,无法构成成对标签的不会执行里面的语句,而是单标签,也就是说他要把执行的语句涵盖在里面
在这里插入图片描述

High

  • 查看源码在这里插入图片描述
    查看源码发现设置了白名单,只有白名单中的内容才会被执行。
  • 构造闭合

但这个闭合和之前的可不太一样。 我们在english后面加了注释符,很多人问了注释符不就代表后面的语句不会执行了吗,那闭合又有什么用呢。
哎,这就是DOM与其他的最大的区别了因为DOM是不会和后端的服务期进行交互的,它只是利用DOM解析树,而DOM解析树依旧会解析注释符后面的语句,只要解析了就可以成功执行。
在这里要注意的是,输入语句后,很多同学会疑惑为什么没反应,别慌,你没有错,这个时候你只需要刷新一下就好了。(但如果刷新不行,可能真的是你的语句有问题)

在这里插入图片描述
在这里插入图片描述

XSS(Reflected)

Low

  • 随便输入一下,查看页面显示内容
    在这里插入图片描述
  • 查看源码,发现没有任何限制
    在这里插入图片描述
  • 在输入框中输入payload
<script>alert('xss')</script>

在这里插入图片描述

  • 输入如下payload,拿到cookie
<script>alert(document.cookie)</script>

在这里插入图片描述

Medium

  • 查看源码
    在这里插入图片描述
    由于str_replace函数把<scrip>标签替换为空,所以我们想办法绕过
  • 构造payload
    Payload1:<scr<script>ipt>alert(1)</script>
    Payload2:<SCript>alert(1)</script>
    以上两钟方法均可绕过
    在这里插入图片描述

在这里插入图片描述

High

  • 查看源码
    在这里插入图片描述
    已经对<script>标签进行了严格的过滤
    Payload:<img src=1 onerror=alert(/xss/)>
    在这里插入图片描述
    通过上述执行我们会发现,每次注入payload是一次性的,关闭页面再次进入我们会发现不会再执行,这与后面的存储型xss最大的区别。

xss(Stored)

Low

法一

  • 写入payload,发现name栏有长度限制。
    在这里插入图片描述
  • 打开开发者工具,对其进行修改
    在这里插入图片描述
    在这里插入图片描述
    这个已经存储在数据库中了,每次刷新后都会弹出框,可重置数据库
    法二
    也可以直接通过在message一栏输入
    在这里插入图片描述
    在这里插入图片描述
    法三

在这里插入图片描述

  • 提交然后抓包修改name的值
    在这里插入图片描述
    放包之后就可以看到如下页面了
    在这里插入图片描述

对name的值那个修改(这里肯定会有人问为什么是name,因为message里面的东西是要存储的解析器并不会解析message里面的内容,而是要解析name里面的内容便于查询,类似于标识符的概念,用户进行后续操作时都是对name以name为唯一识别进行操作)//以上只是我个人对于这个问题的理解,只是便于理解(也不知道有没有写清楚,如果不懂的同学可以去查询其他的资料)

Medium

这一级别与反射型xss的中级是一样的通过大小写或者双写,只不过是通过抓包修改数据包。

High

这一级别与反射型xss的高级是一样的通过修改标签,只不过是通过抓包修改数据包。

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

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

相关文章

若依RuoYi框架log图标与文字怎么改?

文章目录1.若依修改主界面图标2.若依修改主界面文字3.若依修改页面上方图标4.若依修改页面上方文字5.若依登录页面文字修改6.免费图片转换网站1.若依修改主界面图标 图片路径: /src/assets/logo/logo.png直接将想要替换的png格式图片将其替换即可&#xff0c;图片大小建议为60*…

Vue的生命周期的详解

Vue的生命周期 Vue的生命周期是每个使用Vue框架的前端人员都需要掌握的知识&#xff0c;以此作为记录。 Vue的生命周期就是vue实例从创建到销毁的全过程&#xff0c;也就是new Vue() 开始就是vue生命周期的开始。Vue 实例有⼀个完整的⽣命周期&#xff0c;也就是从开始创建、初…

vue中input标签上传本地文件或图片后获取完整路径,如E:\medicineOfCH\stageImage\xxx.jpg

前言&#xff1a; 好久没有写vue了。今天遇到一个需求&#xff1a;使用input框来上传图片类型&#xff0c;并且在选择之后立刻回显出来。使用< input type“file”/>在选定图片后再< img src“xxx”/>。今天在实现这个需求的时候主要是出现了三个问题&#xff1a;…

分享 6 个 Vue3 开发必备的 VSCode 插件

今天分享 6 个 Vue3 开发必备的 VSCode 插件&#xff0c;可以直接用过 VSCode 的插件中心直接安装使用。 如果有觉得有帮助&#xff0c;还请点赞&#x1f44d;支持一下~ 1. Volar &#x1f525; 下载数 153 万 相信使用 VSCode 开发 Vue2 的同学一定对 Vetur 插件不会陌生&…

40个web前端实战项目,练完即可就业,从入门到进阶,基础到框架,html_css【附视频+源码】

当下前端开发可以说是一个比较火的职业&#xff0c;所以学习的人比较多&#xff0c;不管是培训还是自学都是希望通过前端可以找到一份好的工作&#xff0c;但是很多自学的朋友在自学过程中有些盲目&#xff0c;不仅大大降低了学习的效率&#xff0c;而且也会打击自己的学习热情…

使用nvm安装node

常用命令 NVM的常用命令如下&#xff1a;nvm list available&#xff1a;查看可在线安装的NodeJS版本nvm ls&#xff1a;列出所有已经在NVM中安装的NodeJS版本。nvm current&#xff1a;显示当前正在使用的Node版本。nvm install xx.xx.xx&#xff1a;在NVM中在线安装指定版本的…

nvm安装步骤及使用方法

一、nvm说明 nvm 主要是用来管理 nodejs 和 npm 版本的工具&#xff0c;可以用来切换不同版本的 nodejs。 二、nvm下载 https://github.com/coreybutler/nvm-windows/releases 三、nvm安装 1.解压缩后点击exe文件进行安装 2、点击next&#xff0c;选择nvm安装路径&#xf…

Vue:vue3中封装Axios请求

解决、 提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、创建文件夹存放封装好的js二、封装代码三、配置四、在需要的组件中使用总结前言 这篇文章直接能够在项目中使用&#xff0c;没有解释什么东西&#…

安装运行vue-element-admin的报错问题-解决办法

一、原本的安装方法-出错 官网安装链接如下&#xff1a; https://panjiachen.gitee.io/vue-element-admin-site/zh/guide/#%E5%AE%89%E8%A3%85 我遇到的报错主要在以下阶段&#xff1a; 按上方安装链接里git clone后npm install无法安装npm install完成后无法启动&#xff0…

vue中的proxy代理的使用(解决跨域问题)

声明 1. 首先我们应该知道&#xff0c;前端axios在本地发送的请求如果你不把路径写全&#xff0c;它都是会默认加上自己项目所在的端口&#xff0c;就比如说&#xff1a; axios.get(/login) axios.get(/hello) 当我点击发送按钮之后&#xff0c;以上两行代码实际为&#xff1a;…

使用alist将云盘映射为WebDAV

使用alist将云盘映射为WebDAV1. 下载2. Windows系统安装与配置2.1 alist 启动与配置2.2 添加启动与关闭的脚本2.3 开机启动3. Linux系统安装与配置3.1 alist 启动与配置3.2 守护进程​4. 测试 WebDAValist是一款开软的将网盘及本地硬盘映射到网络端的软件&#xff0c;支持多种存…

【Web前端】怎样用记事本写一个简单的网页-html

前言 出于对网站的一些突然的兴趣&#xff0c;我开始了解网页是如何被设计出来的。 作者水平有限&#xff0c;如有问题&#xff0c;欢迎指出。 文章目录前言一. 对网页设计的基本了解1. 网站2. 网页编辑工具1&#xff09;语言2&#xff09;软件二. 第一个网页1. 实操——用记事…

watch跟computed的区别

大家好,我是大帅子,今天给大家讲一下watch跟computed的区别,下面我们直接开始吧 功能上&#xff1a;computed是计算属性&#xff0c;watch是监听一个值的变化&#xff0c;然后执行对应的回调。 是否调用缓存&#xff1a;computed中的函数所依赖的属性没有发生变化&#xff0c;…

【Web 安全】XSS 攻击详解

文章目录一、XSS 攻击概述二、XSS 攻击原理1. XSS的攻击载荷&#xff08;1&#xff09; script 标签&#xff08;2&#xff09; svg 标签&#xff08;3&#xff09; img 标签&#xff08;4&#xff09;body 标签&#xff08;5&#xff09; video 标签&#xff08;6&#xff09;…

VUE框架

1 概述 VUE是一款前端框架&#xff0c;免除了JavaScript中的DOM操作&#xff0c;简化书写 在JavaScript中有很多没有逻辑的繁琐的重复操作&#xff0c;如下 而VUE改善了这个问题&#xff0c;简化了DOM书写。 VUE是基于MVVM(Model-View-ViewModel)思想&#xff0c;实现数据的…

新一代状态管理工具 -- Pinia 上手指南

一&#xff1a;Pinia简介和五大优势 Pinia是vue生态里Vuex的替代者&#xff0c;一个全新的vue状态管理库。在Vue3成为正式版以后&#xff0c;尤雨溪强势推荐的项目就是Pinia。 那先来看看Pinia比Vuex好的地方&#xff0c;也就是Pinia的五大优势。 可以对Vue2和Vue3做到很好的支…

5个前端练手项目(html css js canvas)

前言&#xff1a; 首先祝大家端午节快乐。本篇文章有5个练手项目 对于刚学完前端三剑客的你们。应该是一个很好的实践 目录 &#x1f969;.跑马灯 1.1效果图&#xff1a; 1.2思路解析 1.3源码 &#x1f367;.彩虹爱心 2.1效果图 2.2思路解析 2.3源码 &#x1f32e;.闹钟…

vue中this.$set()的用法

1、this.$set()的作用 向响应式对象中添加一个属性&#xff0c;并确保这个新属性同样是响应式的&#xff0c;且触发视图更新。 this.$set()用于向响应式对象上添加新属性&#xff0c;因为 Vue 无法探测普通的新增属性。 简单来说&#xff1a;就是我们在methods中给数据添加了一…

尚品汇项目笔记

尚品汇项目笔记git代码地址前端Vue核心1、vue文件目录分析2、项目配置3、组件页面样式4、清除vue页面默认的样式5、pages文件夹6、footer组件显示与隐藏7、路由传参8、多次执行相同的push问题9、定义全局组件10、代码改变时实现页面自动刷新11、Home首页其它组件12、封装axios1…

微信小程序实现分享至朋友圈的功能

微信小程序实现分享至朋友圈的功能 微信小程序从基础库 2.11.3 开始&#xff0c;可将小程序页面分享到朋友圈。适用于内容型页面的分享&#xff0c;不适用于有较多交互的页面分享。 1 设置分享状态 小程序页面默认不可被分享到朋友圈&#xff0c;开发者需主动设置“分享到朋友…