欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

3 -【 API 开放平台安全设计 】- 5 抓包工具分析 HTTP 请求

程序员文章站 2023-12-27 13:53:03
...

1 什么是 HTTP 请求

底层为 Socket TCP 长连接技术。

HTTP 请求是客户端与服务器端超文本传输协议。

HTTP 协议中分为:请求头请求体响应头响应体

请求与响应是同步的。

2 抓包环境搭建

1 依赖

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.2.6.RELEASE</version>
    <relativePath/>
</parent>

<properties>
    <java.version>1.8</java.version>
</properties>

<dependencies>
    <!-- SpringBoot web 核心组件 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
    </dependency>
    <!-- servlet 依赖 -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <scope>provided</scope>
    </dependency>
    <!-- JSTL 标签库 -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
    </dependency>
    <dependency>
        <groupId>taglibs</groupId>
        <artifactId>standard</artifactId>
        <version>1.1.2</version>
    </dependency>
    <!-- tomcat 的支持 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
    </dependency>
    <!-- SpringBoot 外部tomcat支持 -->
    <dependency>
        <groupId>org.apache.tomcat.embed</groupId>
        <artifactId>tomcat-embed-jasper</artifactId>
        <scope>provided</scope>
    </dependency>
    <!-- SpringBoot 对lombok 支持 -->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
        <exclusions>
            <exclusion>
                <groupId>org.junit.vintage</groupId>
                <artifactId>junit-vintage-engine</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

2 配置文件

spring:
  mvc:
    view:
      prefix: /WEB-INF/jsp/
      suffix: .jsp

3 启动项

package com.snow;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;

@SpringBootApplication
@ServletComponentScan
public class App {

    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }

}

4 页面

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>登陆</title>
</head>
<body>

<form action="loginJSON" method="post">
    <span> 用户名称:</span><input type="text" value="" name="userName"><br>
    <span>用户密码:</span><input type="password" name="passWord" value=""><br>
    <input type="submit" value="提交"><br>
</form>

</body>
</html>

5 Controller

package com.snow.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletResponse;

/**
 * @author :yang-windows
 * @Title : springboot
 * @Package :com.snow.controller
 * @Description : 首页访问
 * @date :2020/4/17 1:21
 */
@Controller
public class IndexController {

    /**
     * 登陆页面
     *
     * @return
     */
    @RequestMapping("/loginPage")
    public String loginPage() {
        return "loginPage";
    }

    /**
     * 登陆返回json格式
     *
     * @param userName
     * @param passWord
     * @return
     */
    @PostMapping("/loginJSON")
    @ResponseBody
    public String login(String userName, String passWord) {
        System.out.println("userName:" + userName + ",passWord:" + passWord);
        return "userName:" + userName + ",passWord:" + passWord;
    }

    /**
     * 自定义重定向
     *
     * @param response
     */
    @RequestMapping("/customRedirection")
    public void customRedirection(HttpServletResponse response) {
        // 告诉给客户端重定向
        response.setStatus(302);
        response.setHeader("location", "loginPage");
        return;
    }

    /**
     * 重定向到登陆页面
     *
     * @return
     */
    @RequestMapping("/redirectloginPage")
    public String redirectLogin() {
        return "redirect:/loginPage";
    }

}

3 HTTP 重定向原理

重定向底层实现原理:

客户端向服务器端发送请求时,服务器端如果重定向的话,返回的状态码为 302 给客户端,在响应头中存放 location,对应的值就是重定向的地址,客户端如果收到 302 的状态码的话,那么直接浏览器本地进行访问。

/**
 * 自定义重定向
 *
 * @param response
 */
@RequestMapping("/customRedirection")
public void customRedirection(HttpServletResponse response) {
    // 告诉给客户端重定向
    response.setStatus(302);
    response.setHeader("location", "loginPage");
    return;
}
/**
 * 重定向到登陆页面
 *
 * @return
 */
@RequestMapping("/redirectloginPage")
public String redirectLogin() {
    return "redirect:/loginPage";
}

启动项目,浏览器访问:http://127.0.0.1:8080/redirectloginPage

抓包工具分析:

3 -【 API 开放平台安全设计 】- 5 抓包工具分析 HTTP 请求

3 -【 API 开放平台安全设计 】- 5 抓包工具分析 HTTP 请求

重定向与转发区别:

转发是发生在单个服务器内部的,而重定向是将 302 状态码和 location 里面的地址发送搭配浏览器,由浏览器本地访问 location 里面的地址。

4 抓包获取密码

启动项目,浏览器访问:http://127.0.0.1:8080/loginPage

输入用户名和密码:

3 -【 API 开放平台安全设计 】- 5 抓包工具分析 HTTP 请求

抓包工具抓取 HTTP 请求:

3 -【 API 开放平台安全设计 】- 5 抓包工具分析 HTTP 请求

5 常用抓包工具

5.1 Flidder

fiddler 是一个蛮好用的抓包工具,可以将网络传输发送与接受的数据包进行截获、重发、编辑、转存等操作。也可以用来检测网络安全。反正好处多多,举之不尽呀!当年学习的时候也蛮费劲,一些蛮实用隐藏的小功能用了之后就忘记了,每次去网站上找也很麻烦,所以搜集各大网络的资料,总结了一些常用的功能。

5.2 wireshark

Wireshark(前称Ethereal)是一个网络封包分析软件。网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换。

网络封包分析软件的功能可想像成 “电工技师使用电表来量测电流、电压、电阻” 的工作 - 只是将场景移植到网络上,并将电线替换成网络线。在过去,网络封包分析软件是非常昂贵的,或是专门属于盈利用的软件。Ethereal的出现改变了这一切。在GNUGPL通用许可证的保障范围底下,使用者可以以免费的代价取得软件与其源代码,并拥有针对其源代码修改及客制化的权利。Ethereal是目前全世界最广泛的网络封包分析软件之一。

6 抓包工具原理

是位于客户端和服务器端的 HTTP 代理,也是目前最常用的 http 抓包工具之一 。

它能够记录客户端和服务器之间的所有 HTTP 请求,可以针对特定的 HTTP 请求,分析请求数据、设置断点、调试 web 应用、修改请求的数据,甚至可以修改服务器返回的数据,功能非常强大,是 web 调试的利器。

7 Fiddler 简介

fiddler 是一款功能强大的抓包工具,在测试 web 安全性,查看请求数据或者头文件的时候能起到很大的作用,今天给大家介绍利用Fiddler来修改请求或者返回的数据,以此来验证网站完全漏洞;

为什么移动端传输需要加密?因为可能会被抓包工具获取到明文参数

7.1 使用 fiddler 拦截请求参数

配置拦截 Http 请求信息:

3 -【 API 开放平台安全设计 】- 5 抓包工具分析 HTTP 请求

重新提交表单:

3 -【 API 开放平台安全设计 】- 5 抓包工具分析 HTTP 请求

修改 Http 请求基本信息,修改参数,再点击 Run to Completion

3 -【 API 开放平台安全设计 】- 5 抓包工具分析 HTTP 请求

发现参数被篡改了:

3 -【 API 开放平台安全设计 】- 5 抓包工具分析 HTTP 请求

7.2 使用 fiddler 修改响应参数

配置拦截 Http 请求信息:

3 -【 API 开放平台安全设计 】- 5 抓包工具分析 HTTP 请求

重新提交表单:

3 -【 API 开放平台安全设计 】- 5 抓包工具分析 HTTP 请求

修改 Http 响应基本信息,修改参数,再点击 Run to Completion

3 -【 API 开放平台安全设计 】- 5 抓包工具分析 HTTP 请求

显示:

3 -【 API 开放平台安全设计 】- 5 抓包工具分析 HTTP 请求

8 如何防御抓包工具篡改数据

验签,参数虽然是明文,但是可以防止篡改

抓包工具原理:

3 -【 API 开放平台安全设计 】- 5 抓包工具分析 HTTP 请求

上一篇:

下一篇: