web安全——web应用程序技术
文章目录
- 一、HTTP
- 1.1 HTTP方法
- 1.2 HTTP消息头
- 1.3 cookie
- 1.4 状态码
- 二、web功能
- 2.1 服务器端功能
- 2.2 客户端功能——同源策略
- 三、编码方案
- 3.1 URL编码
- 3.2 Unicode编码
- 3.3 HTML编码
- 3.4 Base64编码
一、HTTP
HTTP(超文本传输协议)是web应用程序使用的通信协议,它是一种消息模型:客户端送出一条请求消息,而后由服务端返回一条响应消息。该协议基本上不需要连接,虽然HTTP使用有状态的TCP协议作为传输机制,但每次请求与响应交换都自动完成,并且可能使用不同的TCP连接。
1.1 HTTP方法
1. GET: 发送一个请求来取得服务器上的某一资源.
2. POST: 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。
3. HEAD: 类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头。
4. OPTIONS: 客户端询问服务器可以提交哪些请求方法。
5. PUT: 从客户端向服务器传送的数据取代指定的文档的内容,即指定上传资源存放路径。# 本质上来讲, PUT和POST极为相似,都是向服务器发送数据,但它们之间有一个重要区别,PUT通常指定了资源的存放位置,而POST则没有,POST的数据存放位置由服务器自己决定。
6. PATCH: 是对 PUT 方法的补充,用来对已知资源进行局部更新。
7. DELETE: 请求服务器删除指定的资源。
8. TRACE: 让Web服务器端将之前的请求通信还给客户端的方法。
9. CONNECT: 要求在与代理服务器通信时建立隧道,实现用隧道协议进行TCP通信。
1.2 HTTP消息头
- 常见消息头
1.connection: 这个消息头用于告诉通信的另一端,在完成HTTP传输后是关闭TCP连接,还是保持连接开放以接收其他消息; 2. Content-Encoding: 为消息主体的内容指定编码形式; 3. Content-Length: 规定消息主体的字节长度; 4. Content-Type: 规定消息主体的内容类型; 5. Transfer-Encoding:指定为方便其通过HTTP传输而对消息主体使用的编码形式。如果使用这个消息头,通常用它指定块编码。 - 请求消息头
1.Accept: 用于告诉服务器客户端愿意接受哪些内容; 2.Accept-Encoding:用于告诉服务端,客户端愿意接受哪些内容编码; 3.Authorization: 为一种内置HTTP身份验证向服务器提交证书; 4.Cookie: 向服务器提交它以前发布的cookie; 5.Host: 主机名 6.If-Modified-Since: 说明浏览器最后一次收到所请求的资源的时间,若自那以后资源没有发生变化,服务器就会返回一个304的响应,指示客户端使用资源的缓存副本。 7. If-None-Match: 指定实体标签,服务器可以通过该实体标签确认浏览器是否使用资源的缓存副本; 8. Origin: 用在Ajax请求中,用于指示提出请求的域; 9. Referer:用于指示提出当前请求的原始URL。 10.User-Agent: 向服务器提供与浏览器或生成请求的其他客户端软件有关的信息; 11.X-Forwarded-For: 记录客户端的真实 IP 地址。其格式通常是一个以逗号分隔的IP地址列表:<原始IP>,<代理IP1>,<代理IP2>,... - 响应消息头
1.Access-Control-Allow-Origin: 用于指示是否允许通过Ajax请求获取资源; 2.Cache-Control: 用于向浏览器传送缓存指令; 3.ETag: 指定实体标签。客户端刻在将来的请求中提交这个标识符,获得和If-None-Match消息头中相同的资源,通知服务端浏览器当前缓存中保存的是哪个版本的资源。 4.Expires: 用于向浏览器说明消息主体内容的有效时间。在这个时间之前,浏览器可以使用这个资源的缓存副本。 5.Location: 重定向目标; 6.Pragma: 向浏览器传送缓存指令(如no-cache); 7.Server: 提供web服务器软件的相关信息; 8.Set-Cookie: 用于向客户端发布cookie,浏览器会在随后的请求中将其返回给服务器。 9. WWW-Authenticate: 用在401状态码的响应中,提供与服务器所支持的身份验证类型有关的信息; 10.X-Frama-Options: 指示浏览器框架是否及如何加载当前响应。
1.3 cookie
cookie一般由一个名/值对构成,如果服务器发布多个cookie,可在一个Cookie消息头中用;进行分隔,并将其全部返回给服务器。Set-Cookie消息头中,除了cookie的实际值外,还有一些可选属性:
1.expires: 用于设定cookie的有效时间;
2.domain: 指定cookie的有效域。这个域必须和收到cookie的域相同,或者是它的父域;
3.path: 指定cookie的有效URL路径;
4.secure: 如果设置该属性,仅在HTTPS请求中提交cookie;
5.HttpOnly: 如果设置该属性,将无法通过客户端Javascript直接访问cookie
1.4 状态码
状态码可分为五类:
- 1XX——提供信息;
- 2XX——请求被成功提交;
- 3XX——客户端被重定向到指定资源;
- 4XX——请求包含某种错误;
- 5XX——服务端执行请求时遇到错误。
100 Continue:当客户端提交一个包含主体的请求时,将发送这个响应。该响应表示已收到请求消息头,客户端应继续发送消息主体,请求完成后,再由服务端返回另一个响应。
200 Ok: 已成功提交请求,且响应主体中包含请求结果。
201 Created: PUT请求的响应返回的状态码,表示请求已成功提交。
301 Moved Permanently: 永久重定向到另外一个在Location消息头中指定的URL。
302 Found: 暂时重定向到另外一个在Location消息头中指定的URL。
304 Not Modified: 指定浏览器使用缓存中保存的所请求资源的副本。
400 Bad Request: 客户端提供无效的HTTP请求。
401 Unauthorized: 服务器在许可请求前要求HTTP进行身份验证。www-Authenticate消息头详细说明所支持的身份验证类型。
403 Forbidden: 不管是否通过身份验证,禁止任何人访问被请求的资源。
404 Not Found:所请求的资源不存在。
405 Method Not Allowed: 指定的URL不支持请求中使用的方法。
413 Request Entity Too long: 请求主体过长;
414 Request URI Too Long: URL太长;
500 Internal Server Error: 服务器在执行过程中遇到错误。
503 Service Unavailable: 尽管web服务器运转正常,并且能够响应请求,但是服务器访问的应用程序还是无法做出响应。
二、web功能
2.1 服务器端功能
当前web应用程序主要向用户提供动态生成的内容。当用户请求一个动态资源时,服务器会动态建立响应,每个用户都会收到满足其特定需要的内容,动态内容由在服务器上执行的脚本或其他代码生成。
当用户的浏览器提出访问动态资源的请求时,它不仅仅要求访问该资源的副本,通常还会提交各种参数。HTTP请求主要使用以下方式向应用程序传送参数:
- 通过URL查询字符串;
- 通过Rest风格的URL的文件路径;
- 通过POST方法中使用的消息主体。
服务器端相关技术如下:
- 脚本语言:如php、java、asp等;
- web服务器:直接提供资源或转发请求到 Web 容器。常用功能:处理静态内容、HTTP 请求、负载均衡、代理。常用的web服务器有:Apache、Nginx、IIS等
- web容器:执行应用程序代码,生成动态响应。常见的web容器有:Apache Tomcat、Weblogic、JBoss等。
- web应用程序平台:是一个用于开发、部署和运行 Web 应用程序的环境或框架。如ASP.net和Java。
- 数据库:如mysql、oracle、mssql等;
- 其他后端组件:如文件系统、基于SOAP的web服务、目录服务等。
一个典型的 Java Web 应用程序架构可能如下:
客户端浏览器 → Nginx(Web 服务器)→ Tomcat(Web 容器)→ MySQL(数据库)
- 客户端浏览器:发送 HTTP 请求。
- Nginx:处理静态内容请求,将动态请求转发到 Tomcat。
- Tomcat:运行 Java Web 应用程序,处理业务逻辑。
- MySQL:存储应用程序数据。
2.2 客户端功能——同源策略
主要写一下同源策略。同源策略主要用来防止不同来源的内容相互干扰。同源指的是协议、端口、域名都相同。同源策略的特点如下:
- DOM 访问:一个页面的 JavaScript 代码不能访问跨源页面的 DOM。
如果你尝试从一个页面(http://example.com)通过 JavaScript 访问另一个页面(http://other.com)的 DOM,浏览器会抛出一个错误,提示跨域访问被拒绝。
- Cookie、LocalStorage 和 SessionStorage:不能读取或修改跨源页面的存储数据。
http://malicious.com 无法读取 http://example.com 的 Cookie。
- AJAX 请求:不能直接向跨源服务器发起 HTTP 请求(除非服务器支持 CORS,即跨源资源共享)
三、编码方案
3.1 URL编码
URL只允许使用US-ASCII字符集中的可打印字符(也就是ASCII代码在0x20~0x7e范围内的字符)。URL编码的目的是使有问题的字符可通过HTTP协议安全传输。
URL编码的特征:**%**作为前缀,后面接这个字符的两位十六进制ASCII码。常见的URL编码字符:
%3d 代表 =
%25 代表 %
%20和+ 代表 空格
%0a 代表 换行
%00 代表 空字节
当攻击web应用程序是,需要将以下字符当做数据插入到HTTP请求中,需要进行URL编码:
空格、%、?、&、=、;、+、#。
3.2 Unicode编码
Unicode编码特征:以%u为前缀,其后是该字符的十六进制unicode码点。如%u2215代表/。
URF-8是一种长度可变的编码标准,使用一个或多个字节表示字符。其特征为:以%为前缀,其后使用十六进制表示每个字节。如%e2%89%a0代表不等号。
3.3 HTML编码
HTML编码定义了大量HTML实体来表示特殊的字面量字符,如:
" 代表 "
' 代表 '
任何字符都可以使用它的十进制ASCII进行HTML编码,如:
" 代表 "
' 代表 '
或者使用十六进制的ASCII(以x为前缀),如:
" 代表 "
' 代表 '
3.4 Base64编码
Base64只包含可打印的ASCII字符:A-Z、a-z、0-9、+、/、=,最显著的特征就是出现双等号,一定是Base64编码。
相关文章:
web安全——web应用程序技术
文章目录 一、HTTP1.1 HTTP方法1.2 HTTP消息头1.3 cookie1.4 状态码 二、web功能2.1 服务器端功能2.2 客户端功能——同源策略 三、编码方案3.1 URL编码3.2 Unicode编码3.3 HTML编码3.4 Base64编码 一、HTTP HTTP(超文本传输协议)是web应用程序使用的通…...
low rank decomposition如何用于矩阵的分解
1. 什么是矩阵分解和低秩分解 矩阵分解是将一个矩阵表示为若干结构更简单或具有特定性质的矩阵的组合或乘积的过程。低秩分解(Low Rank Decomposition)是其中一种方法,旨在将原矩阵近似为两个或多个秩较低的矩阵的乘积,从而降低复…...
GO 进行编译时插桩,实现零码注入
Go 编译时插桩 Go 语言的编译时插桩是一种在编译阶段自动注入监控代码的技术,目的是在不修改业务代码的情况下,实现对应用程序的监控和追踪。 基本原理 Go 编译时插桩的核心思想是通过在编译过程中对源代码进行分析和修改,将监控代码注入到…...
编写一个程序,输入一个字符串并输出其长度(Java版)
编写一个程序,输入一个字符串并输出其长度 以下是Java实现代码: import java.util.Scanner;public class StringLengthCalculator {public static void main(String[] args) {Scanner scanner new Scanner(System.in);System.out.print("请输入一…...
C++ day4 练习
一、练习1 找到第一天mystring练习,实现以下功能: mystring str "hello"; mystring ptr "world"; str str ptr; str ptr; str[0] H; 【代码】: #include <iostream> #include <cstring> #include &l…...
深入理解指针2
深入理解指针2 数组名的理解 数组名就是首元素的地址 int arr[]{1,3,2}; printf("%p\n",arr); printf("%p\n",&arr[0]);但是有两种情况除外, 1.sizeof(数组名),sizeof操作符统计的是整个数组的大小,并不是第一个元素…...
【STL专题】优先级队列priority_queue的使用和模拟实现,巧妙利用仿函数解决优先级
欢迎来到 CILMY23的博客 🏆本篇主题为:优先级队列priority_queue的使用和模拟实现,巧妙利用仿函数解决优先级 🏆个人主页:CILMY23-CSDN博客 🏆系列专栏: C | C语言 | 数据结构与算法 | Linux…...
CPU、SOC、MPU、MCU--详细分析四者的区别
一、CPU 与SOC的区别 1.CPU 对于电脑,我们经常提到,处理器,内存,显卡,硬盘四大部分可以组成一个基本的电脑。其中的处理器——Central Processing Unit(中央处理器)。CPU是一台计算机的运算核…...
Node.js 内置模块简介(带示例)
目录 1. fs(文件系统)模块 2. http 模块 3. path 模块 4. os 模块 5. events 模块 6. crypto 模块 1. fs(文件系统)模块 fs 模块提供了与文件系统进行交互的功能,包括文件的读写、删除、重命名等操作。它有同步…...
常见的“锁”有哪些?
悲观锁 悲观锁认为在并发环境中,数据随时可能被其他线程修改,因此在访问数据之前会先加锁,以防止其他线程对数据进行修改。常见的悲观锁实现有: 1.互斥锁 原理:互斥锁是一种最基本的锁类型,同一时间只允…...
二级公共基础之数据库设计基础(一) 数据库系统的基本概念
目录 前言 一、数据库、数据管理系统和数据库系统 1.数据 2.数据库 3.数据库管理系统 1.数据库管理系统的定义 2.数据库管理系统的功能 1.数据定义功能 2.数据操作功能 3.数据存取控制 4.数据完整性管理 5.数据备份和恢复 6.并发控制 4.数…...
ollama无法通过IP:11434访问
目录 1.介绍 2.直接在ollama的当前命令窗口中修改(法1) 3.更改ollama配置文件(法2) 3.1更新配置 3.2重启服务 1.介绍 ollama下载后默认情况下都是直接在本地的11434端口中运行,绑定到127.0.0.1(localhost)&#x…...
简单易懂,解析Go语言中的struct结构体
目录 4. struct 结构体4.1 初始化4.2 内嵌字段4.3 可见性4.4 方法与函数4.4.1 区别4.4.2 闭包 4.5 Tag 字段标签4.5.1定义4.5.2 Tag规范4.5.3 Tag意义 4. struct 结构体 go的结构体类似于其他语言中的class,主要区别就是go的结构体没有继承这一概念,但可…...
java给钉钉邮箱发送邮件
1.开通POP和IMAP 2.引入pom <dependency><groupId>javax.mail</groupId><artifactId>mail</artifactId><version>1.4.7</version> </dependency>3.逻辑 String host "smtp.qiye.aliyun.com"; String port "…...
C++和OpenGL实现3D游戏编程【连载23】——几何着色器和法线可视化
欢迎来到zhooyu的C++和OpenGL游戏专栏,专栏连载的所有精彩内容目录详见下边链接: 🔥C++和OpenGL实现3D游戏编程【总览】 1、本节实现的内容 上一节课,我们在Blend软件中导出经纬球模型时,遇到了经纬球法线导致我们在游戏中模型光照显示问题,我们在Blender软件中可以通过…...
大连本地知识库的搭建--数据收集与预处理_01
1.马蜂窝爬虫 编程语言:Python爬虫框架:Selenium(用于浏览器自动化)解析库:BeautifulSoup(用于解析HTML) 2.爬虫策略 目标网站:马蜂窝(https://www.mafengwo.cn/&…...
github 推送的常见问题以及解决
文章目录 git add 的时候问题1为什么会发生这种情况?Git 的警告含义如何解决?1. **保持 Git 的默认行为(推荐)**2. **禁用自动转换**3. **仅在工作目录中禁用转换**4. **统一使用 LF(跨平台开发推荐)** git…...
stm32单片机个人学习笔记16(SPI通信协议)
前言 本篇文章属于stm32单片机(以下简称单片机)的学习笔记,来源于B站教学视频。下面是这位up主的视频链接。本文为个人学习笔记,只能做参考,细节方面建议观看视频,肯定受益匪浅。 STM32入门教程-2023版 细…...
Linux | RHEL / CentOS 中 YUM history / downgrade 命令回滚操作
注:英文引文,机翻未校。 在 RHEL/CentOS 系统上使用 YUM history 命令回滚升级操作 作者: 2daygeek 译者: LCTT DarkSun 为服务器打补丁是 Linux 系统管理员的一项重要任务,为的是让系统更加稳定,性能更加…...
BGP状态和机制
BGP邻居优化 为了增加稳定性,通常建议实验回环口来建立邻居。更新源:建立邻居和邻居所学习到的路由的下一跳。多跳:EBGP邻居建立默认选哟直连,因为TTL=1,如果非直连,必须修改TTL。命令备注peer 2.2.2.2 connect-interface lo1配置更新源peer 2.2.2.2 ebgp-max-hop 2配置T…...
龙虎榜——20250610
上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...
MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...
【SQL学习笔记1】增删改查+多表连接全解析(内附SQL免费在线练习工具)
可以使用Sqliteviz这个网站免费编写sql语句,它能够让用户直接在浏览器内练习SQL的语法,不需要安装任何软件。 链接如下: sqliteviz 注意: 在转写SQL语法时,关键字之间有一个特定的顺序,这个顺序会影响到…...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...
PAN/FPN
import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...
Windows安装Miniconda
一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...
作为测试我们应该关注redis哪些方面
1、功能测试 数据结构操作:验证字符串、列表、哈希、集合和有序的基本操作是否正确 持久化:测试aof和aof持久化机制,确保数据在开启后正确恢复。 事务:检查事务的原子性和回滚机制。 发布订阅:确保消息正确传递。 2、性…...
Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成
一个面向 Java 开发者的 Sring-Ai 示例工程项目,该项目是一个 Spring AI 快速入门的样例工程项目,旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计,每个模块都专注于特定的功能领域,便于学习和…...
