当前位置:首页 » 《资源分享》 » 正文

第二十八天 html+php+js开发文件上传 &&登陆页面 &&商品购买页面 &&第三方库 jquery ajax数据上传技术 && js 前端验证绕过

1 人参与  2024年12月04日 18:02  分类 : 《资源分享》  评论

点击全文阅读


前言

我们学习这个开发只要是有个思路,去了解js前端验证的产生原理 以及安全问题。

文件上传的开发

原生JS教程参考

原生JS教程

https://www.w3school.com.cn/js/index.asp

了解一下什么是  js   js的基本使用
这边我们还是应用上期的登录页面   源码在文末  

先创建二文件   uplaod.php  / html

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>文件上传页面</title>    <style>        body {            font-family: Arial, sans-serif;            background-color: #f2f2f2;            padding: 20px;        }        h1 {            text-align: center;            margin-top: 50px;        }        form {            background-color: #fff;            border-radius: 10px;            padding: 20px;            margin-top: 30px;            max-width: 600px;            margin: 0 auto;        }        input[type="file"] {            margin-top: 20px;            margin-bottom: 20px;        }        button {            background-color: #4CAF50;            color: #fff;            padding: 10px 20px;            border: none;            border-radius: 5px;            cursor: pointer;        }        button:hover {            background-color: #3e8e41;        }    </style></head><body><h1>文件上传</h1><form action="upload.php" method="POST" enctype="multipart/form-data">      <!---action表示把这个内容呈现给谁--->>    <label for="file">选择文件:</label>    <br>    <input type="file" id="file" name="file" onchange="CheckFileExt(this.value)"> //这边有个不同的就是这里我们应用了一个  onchange(onchange下边有这个事件怎么触发的)  定义了一个获取 文件名的函数(这个函数的定义我们在后边会提到  先不要担心    this.value就是获取我们传输的文件名)     <!-- onchange 函数表示对值变化的读取 -->    <br>    <button type="submit">上传文件</button>    </body>    </html>    

为什么要触发事件   因为只有触发事件才能 进行js的操作   最简单的理解  就是我们点击一个按钮  按钮弹出别的字来  这个就是事件的触发。这边的定义的意思就是我们选择文件然后触发事件函数check

下边我们定义一个button来执行事件 

接下来就让我们定义一下触发函数

把触发函数的功能定义起来    (这边这个实验  其实就是利用前端js进行验证   后端php来传输  然后我们在做一个相反的实验  来看看 哪个验证更安全和相应验证的绕过(这里主要讲js))、

这边定义错了   就是我们不用array    直接定义  exts=[   ] 这样就行 

下边是这两个函数的应用lastIndexOf方法是Java字符串类(String)中的一个重要方法,用于返回指定字符或字符串在当前字符串中最后一次出现的位置。如果未找到该字符或字符串,则返回-1。

然后就是定义  后台传输文件了   那有人问了  你妹的  怎么建立前后端联系啊   这边上边的html里  有个   action='upload.php'    就是把这个文件呈现到后台的php

好了演示一下

像这种单一的验证是最好  绕过的

演示一下

ctrl  U   +ctrl A  +ctrl  C    复制一下源码   新建一个txt  写进去

然后直接提交已经  直接绕过前端js   //但是这是个跨域请求   这边我们本地玩一玩就行  因为跨域请求基本上是行不通的  (跨域限制) 

登录页面的书写

这个就是  利用.ajax技术  (这个函数在  jquery 库里)  这个的玩法就是   前端js做传输   后端php进行验证   

这边咱们先写个 前端在写个后端   进行对比一下  创建2个  login.php/html

//登录的html代码<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>后台登录</title>    <style>        body {            background-color: #f1f1f1;        }        .login {            width: 400px;            margin: 100px auto;            background-color: #fff;            border-radius: 5px;            box-shadow: 0 0 10px rgba(0,0,0,0.3);            padding: 30px;        }        .login h2 {            text-align: center;            font-size: 2em;            margin-bottom: 30px;        }        .login label {            display: block;            margin-bottom: 20px;            font-size: 1.2em;        }        .login input[type="text"], .login input[type="password"] {            width: 100%;            padding: 10px;            border: 1px solid #ccc;            border-radius: 5px;            font-size: 1.2em;            margin-bottom: 20px;        }        .login input[type="submit"] {            background-color: #2ecc71;            color: #fff;            border: none;            padding: 10px 20px;            border-radius: 5px;            font-size: 1.2em;            cursor: pointer;        }        .login input[type="submit"]:hover {            background-color: #27ae60;        }    </style></head><body><div class="login">    <h2>后台登录</h2>           <label for="username">用户名:</label>        <input type="text" name="username" id="username"  class="user">        <label for="password">密码:</label>        <input type="password" name="password" id="password" class="pass" >        <button>  登录  </button>    </div></body></html>

这边和php传输不同   这个使用的是class  模块进行传输   而php则需要name后的参数的支持

那我们就去前端html接收一下   success

运行一下

因为我们写的这个代码验证是在前端的所以可以绕过  1、就是跨域进行删除

2、其实就是未授权访问   因为这个的后台网站没有进行验证 

3、修改返回包进行绕过    直接打开 burp右键进行 抓取响应(你妹的那里来到响应啊  其实就是php发给 js的一个通行证   )

第二种就是前端假的验证    后端双重验证    就是把最重要的跳到后台的代码写到 后端if(user=正确)&&pass=正确的里边   这样这个跳转就不是前端一端独大  演示一下

那我们直接试试把

进不来后台   这种就得使用弱口令   或者其他逻辑问题了

开发购买网站

演示一下

然后安全的问题就是  因为验证是在前端 所以我们可以无限购买  演示一下  先打开  我们的phpstudy

那这个逻辑不就和上边的哪个一样了嘛   直接抓返回包

直接购买成功了   

总结:

为什么学习这个js开发   就是为了了解一些  机制    然后好用机制本身的逻辑进行  绕过修改   就是这个可以结合前端的信息收集   假如你收集到了 这个js 验证的(怎么判断就是从前端有没有  squery库的函数利用)web 然后就可以在允许的情况下进行渗透了  当然了解代码的逻辑也对我们的ctf比赛有很大的帮助

有些burp  使用的了的BurpSuite 安装+激活+使用详细上手教程 web安全测试工具_哔哩哔哩_bilibili

这个博主写了个一键启动的burp 蓝奏云优享版

然后就是这个源码  蓝奏云优享版


点击全文阅读


本文链接:http://m.zhangshiyu.com/post/196639.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1