第三十五天(JS&Ajax技术)

发布于:2025-08-16 ⋅ 阅读:(16) ⋅ 点赞:(0)

JavaScript被广泛用于Web应用开发,常用来为网页添加各式各样的动态功能,为用户提供更流畅美观的浏览效果。嵌入动态文本于HTML页面;对浏览器事件做出响应,读写HTML元素,在数据被提交到服务器之前验证数据;检测访客的浏览器信息;控制用户凭据,包括创建和修改等。

#Ajax技术

概念:Asynchronous JavaScript And XML:异步的 JavaScript 和 XML

AJAX作用:

1、数据交换:通过AJAX可给服务器发送请求,并获取服务器响应的数据

2、后台发送:浏览器的请求是后台js发送给服务器的,js会创建单独的线程发送异步请求,这个线程不会影响浏览器的线程运行。

3、局部刷新:浏览器接收到结果以后进行页面局部刷新

JS-AJAX知识点:

1、变量,函数,运算,事件等

2、引用库,Ajax,JQuery,Axios等s

#安全结合:

1、发现更多的有利用价值的信息(URL、域名、路径等等)

测试站、后台路径、未公开的路径、api地址等等

2、发现敏感信息(硬编码的帐号、pass、API密钥、注释等等)

硬编码帐号可登录、测试帐号可被登录、密钥泄露、注释中开发信息等等

3、发现危险的代码(eval、dangerouslySetInnerHTML等等)

URL跳转,XSS跨站、模版注入(SSTI)等

4、了解网站的逻辑校验功能

前端检测,加密逆向,数据走向等

#学习文档:

ajax 工作原理:

  1. 网页中发生一个事件(页面加载、按钮点击)
  2. 由 JavaScript 创建 XMLHttpRequest 对象
  3. XMLHttpRequest 对象向 web 服务器发送请求
  4. 服务器处理该请求
  5. 服务器将响应发送回网页
  6. 由 JavaScript 读取响应
  7. 由 JavaScript 执行正确的动作(比如更新页面)

1、原生JS教程

JavaScript 教程

用get请求去请求服务器中的1.txt文件 采用异步 ;当请求完成且相应已就绪 和 返回状态码 返回两百时,将响应的内容以字符串格式输出到控制台中

输出1.txt内容

2、jQuery库教程

jQuery 教程

远程调用 jQuery 库 使用方法:

使用本地jQuery 库方法

3、Axios库教程

立即开始 | Axios 文档

 远程获取axios库 方法

使用本地 axios 库 方法

更简单的代码写法 , 直接一句代码搞定

#文件上传

1、布置前端页面

2、JS获取提交数据

3、JS对上传格式判断

4、后端对上传数据处理

前端JS进行后缀过滤,后端PHP进行上传处理

原生开发:

js代码:

<script>
 function checkFile(filename) {
    //设置白名单 
   var exts = ['png', 'jpg', 'jpeg', 'gif'];
    //以点作为分隔符号,将文件分成文件名和后缀名 ,index+1获取后缀名
   var index = filename.lastIndexOf('.');
   var ext = filename.substr(index+1);
   for(var i = 0; i < exts.length; i++){
     if (ext==exts[i]){
       alert('文件格式正确!');
       break;
     }else{
       alert('文件格式错误');
       window.location.replace('file.html');
       break;
     }
   }
 }

php后端处理代码:

<?php
 
$name=$_FILES['file_upload']['name'];
$type=$_FILES['file_upload']['type'];
$size=$_FILES['file_upload']['size'];
$tmp_name=$_FILES['file_upload']['tmp_name'];
$error=$_FILES['file_upload']['error'];
 
echo $name."<br>";
echo $type."<br>";
echo $size."<br>";
echo $tmp_name."<br>";
echo $error."<br>";

测试:选择一张 png格式图片上传,文件格式提示正确,

可以进到后端,后端代码处理好后展示数据

上传一个错误格式文件 ,直接提示错误了,

点击确定后。跳转回上传页面

安全问题:

1、过滤代码能看到分析绕过

2、禁用JS或删除过滤代码绕过

绕过测试:

直接将源代码 下载下来,之后将文件后缀名改成.html 等修改完后双击打开,然后修改白名单的文件类型或者将 onchange 删掉

将png 格式改成php 格式

这里要修改一下地址,发送到处理的php上

打开修改后的文件,上传一个png格式 看看是否会报文件格式错误 成功报错

 上传一个php格式 文件 查看是否能正确上传

文件上传成功,绕过成功

#登录验证

0、布置前端页面

1、获取登录事件

2、配置Ajax请求

3、后端代码验证

4、成功回调判断

后端PHP进行帐号判断,前端JS进行登录处理

用 jQuery 进行登录验证

前端页面

<!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>

获取登录事件 和 配置Ajax请求

接收的参数值前面要加一个 "." ,否则接收不到值

<script>
  // 获取点击事件
  $('button').click(function () {
   $.ajax({
      method: 'POST',
     url:'login.php',
     dataType: 'json',
     data: {
        username:$('.user').val(),
       password:$('.pass').val(),
     },
     success: function (data) {
        console.log(data);
        if(data['infoCode']==1){
          alert("登录成功");
        }else{
          alert('登录失败')
        }
 
     }
   })
  });
</script>

测试数据是否可以正常发送:

后端对上传数据处理

这里验证传输过来的数据如果时 正确的就会在数组中些一个 infoCode : 1 进去 ,然后将数组改成json格式发送回去,前端页面接收到json格式数据时要加 dataType: 'json', ,这个是将json格式数据转成JavaScript 对象

<?php
 
$user=@$_POST['username'];
$pass=@$_POST['password'];
//真实情况需要在数据库获取
$success=array('msg'=>'ok');
if($user=='xiaodi' && $pass=='xiao'){
    $success['infoCode']=1;
}else{
    $success['infoCode']=0;
}
echo json_encode($success);

测试:

输入错误账号密码

输入正确账号密码

用axios 库 进行登录 验证

安全问题:

1、过滤代码能看到分析绕过

2、禁用JS或修改返回分析绕过

 这里验证的是infoCode 值是否为1,是1就可以登录成功;那么让浏览器中接收的的infoCode 值等于1不就可以实现任意账号密码登录了

操作:

打开burp 开始拦截,然后输入任意账号密码,点击登录;

burp中 点击这个,这是是将返回包也发到burp上去 这里就是要修改返回的数据中的infoCode 值

这里修改infoCode 值 ,将它改成1,然后放出去,再回到浏览器中看是否登录成功

提示登录成功,直接绕过

这里要点击允许,不然无法跳转页面

更改后可以跳转成功了

#测试案例

JS代码分析验证逻辑


网站公告

今日签到

点亮在社区的每一天
去签到