当前位置: 首页 > news >正文

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. 常见消息头
    1.connection: 这个消息头用于告诉通信的另一端,在完成HTTP传输后是关闭TCP连接,还是保持连接开放以接收其他消息;
    2. Content-Encoding: 为消息主体的内容指定编码形式;
    3. Content-Length: 规定消息主体的字节长度;
    4. Content-Type: 规定消息主体的内容类型;
    5. Transfer-Encoding:指定为方便其通过HTTP传输而对消息主体使用的编码形式。如果使用这个消息头,通常用它指定块编码。
    
  2. 请求消息头
    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>,...
    
  3. 响应消息头
    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 状态码

状态码可分为五类:

  1. 1XX——提供信息;
  2. 2XX——请求被成功提交;
  3. 3XX——客户端被重定向到指定资源;
  4. 4XX——请求包含某种错误;
  5. 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请求主要使用以下方式向应用程序传送参数:

  1. 通过URL查询字符串;
  2. 通过Rest风格的URL的文件路径;
  3. 通过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 客户端功能——同源策略

主要写一下同源策略。同源策略主要用来防止不同来源的内容相互干扰。同源指的是协议、端口、域名都相同。同源策略的特点如下:

  1. DOM 访问:一个页面的 JavaScript 代码不能访问跨源页面的 DOM。

    如果你尝试从一个页面(http://example.com)通过 JavaScript 访问另一个页面(http://other.com)的 DOM,浏览器会抛出一个错误,提示跨域访问被拒绝。

  2. Cookie、LocalStorage 和 SessionStorage:不能读取或修改跨源页面的存储数据。

    http://malicious.com 无法读取 http://example.com 的 Cookie。

  3. 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实体来表示特殊的字面量字符,如:

&quot; 代表 "
&apos; 代表 '

任何字符都可以使用它的十进制ASCII进行HTML编码,如:

&#34; 代表 "
&#39; 代表 '

或者使用十六进制的ASCII(以x为前缀),如:

&#x22; 代表 "
&#x27; 代表 '

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&#xff08;超文本传输协议&#xff09;是web应用程序使用的通…...

low rank decomposition如何用于矩阵的分解

1. 什么是矩阵分解和低秩分解 矩阵分解是将一个矩阵表示为若干结构更简单或具有特定性质的矩阵的组合或乘积的过程。低秩分解&#xff08;Low Rank Decomposition&#xff09;是其中一种方法&#xff0c;旨在将原矩阵近似为两个或多个秩较低的矩阵的乘积&#xff0c;从而降低复…...

GO 进行编译时插桩,实现零码注入

Go 编译时插桩 Go 语言的编译时插桩是一种在编译阶段自动注入监控代码的技术&#xff0c;目的是在不修改业务代码的情况下&#xff0c;实现对应用程序的监控和追踪。 基本原理 Go 编译时插桩的核心思想是通过在编译过程中对源代码进行分析和修改&#xff0c;将监控代码注入到…...

编写一个程序,输入一个字符串并输出其长度(Java版)

编写一个程序&#xff0c;输入一个字符串并输出其长度 以下是Java实现代码&#xff1a; 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练习&#xff0c;实现以下功能&#xff1a; mystring str "hello"; mystring ptr "world"; str str ptr; str ptr; str[0] H; 【代码】&#xff1a; #include <iostream> #include <cstring> #include &l…...

深入理解指针2

深入理解指针2 数组名的理解 数组名就是首元素的地址 int arr[]{1,3,2}; printf("%p\n",arr); printf("%p\n",&arr[0]);但是有两种情况除外&#xff0c; 1.sizeof(数组名)&#xff0c;sizeof操作符统计的是整个数组的大小&#xff0c;并不是第一个元素…...

【STL专题】优先级队列priority_queue的使用和模拟实现,巧妙利用仿函数解决优先级

欢迎来到 CILMY23的博客 &#x1f3c6;本篇主题为&#xff1a;优先级队列priority_queue的使用和模拟实现&#xff0c;巧妙利用仿函数解决优先级 &#x1f3c6;个人主页&#xff1a;CILMY23-CSDN博客 &#x1f3c6;系列专栏&#xff1a; C | C语言 | 数据结构与算法 | Linux…...

CPU、SOC、MPU、MCU--详细分析四者的区别

一、CPU 与SOC的区别 1.CPU 对于电脑&#xff0c;我们经常提到&#xff0c;处理器&#xff0c;内存&#xff0c;显卡&#xff0c;硬盘四大部分可以组成一个基本的电脑。其中的处理器——Central Processing Unit&#xff08;中央处理器&#xff09;。CPU是一台计算机的运算核…...

Node.js 内置模块简介(带示例)

目录 1. fs&#xff08;文件系统&#xff09;模块 2. http 模块 3. path 模块 4. os 模块 5. events 模块 6. crypto 模块 1. fs&#xff08;文件系统&#xff09;模块 fs 模块提供了与文件系统进行交互的功能&#xff0c;包括文件的读写、删除、重命名等操作。它有同步…...

常见的“锁”有哪些?

悲观锁 悲观锁认为在并发环境中&#xff0c;数据随时可能被其他线程修改&#xff0c;因此在访问数据之前会先加锁&#xff0c;以防止其他线程对数据进行修改。常见的悲观锁实现有&#xff1a; 1.互斥锁 原理&#xff1a;互斥锁是一种最基本的锁类型&#xff0c;同一时间只允…...

二级公共基础之数据库设计基础(一) 数据库系统的基本概念

目录 ​​​​​​​前言 一、数据库、数据管理系统和数据库系统 1.数据 2.数据库 3.数据库管理系统 1.数据库管理系统的定义 2.数据库管理系统的功能 1.数据定义功能 2.数据操作功能 3.数据存取控制 4.数据完整性管理 5.数据备份和恢复 6.并发控制 4.数…...

ollama无法通过IP:11434访问

目录 1.介绍 2.直接在ollama的当前命令窗口中修改&#xff08;法1&#xff09; 3.更改ollama配置文件&#xff08;法2&#xff09; 3.1更新配置 3.2重启服务 1.介绍 ollama下载后默认情况下都是直接在本地的11434端口中运行&#xff0c;绑定到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&#xff0c;主要区别就是go的结构体没有继承这一概念&#xff0c;但可…...

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.马蜂窝爬虫 编程语言&#xff1a;Python爬虫框架&#xff1a;Selenium&#xff08;用于浏览器自动化&#xff09;解析库&#xff1a;BeautifulSoup&#xff08;用于解析HTML&#xff09; 2.爬虫策略 目标网站&#xff1a;马蜂窝&#xff08;https://www.mafengwo.cn/&…...

github 推送的常见问题以及解决

文章目录 git add 的时候问题1为什么会发生这种情况&#xff1f;Git 的警告含义如何解决&#xff1f;1. **保持 Git 的默认行为&#xff08;推荐&#xff09;**2. **禁用自动转换**3. **仅在工作目录中禁用转换**4. **统一使用 LF&#xff08;跨平台开发推荐&#xff09;** git…...

stm32单片机个人学习笔记16(SPI通信协议)

前言 本篇文章属于stm32单片机&#xff08;以下简称单片机&#xff09;的学习笔记&#xff0c;来源于B站教学视频。下面是这位up主的视频链接。本文为个人学习笔记&#xff0c;只能做参考&#xff0c;细节方面建议观看视频&#xff0c;肯定受益匪浅。 STM32入门教程-2023版 细…...

Linux | RHEL / CentOS 中 YUM history / downgrade 命令回滚操作

注&#xff1a;英文引文&#xff0c;机翻未校。 在 RHEL/CentOS 系统上使用 YUM history 命令回滚升级操作 作者&#xff1a; 2daygeek 译者&#xff1a; LCTT DarkSun 为服务器打补丁是 Linux 系统管理员的一项重要任务&#xff0c;为的是让系统更加稳定&#xff0c;性能更加…...

BGP状态和机制

BGP邻居优化 为了增加稳定性,通常建议实验回环口来建立邻居。更新源:建立邻居和邻居所学习到的路由的下一跳。多跳:EBGP邻居建立默认选哟直连,因为TTL=1,如果非直连,必须修改TTL。命令备注peer 2.2.2.2 connect-interface lo1配置更新源peer 2.2.2.2 ebgp-max-hop 2配置T…...

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

visual studio 2022更改主题为深色

visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中&#xff0c;选择 环境 -> 常规 &#xff0c;将其中的颜色主题改成深色 点击确定&#xff0c;更改完成...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​&#xff1a; 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​&#xff1a; File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

Module Federation 和 Native Federation 的比较

前言 Module Federation 是 Webpack 5 引入的微前端架构方案&#xff0c;允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”&#xff08;简单设计&#xff09;是软件开发中的一个重要理念&#xff0c;倡导以最简单的方式实现软件功能&#xff0c;以确保代码清晰易懂、易维护&#xff0c;并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计&#xff0c;遵循“让事情保…...

Pinocchio 库详解及其在足式机器人上的应用

Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库&#xff0c;专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性&#xff0c;并提供了一个通用的框架&…...

Windows安装Miniconda

一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...

【p2p、分布式,区块链笔记 MESH】Bluetooth蓝牙通信 BLE Mesh协议的拓扑结构 定向转发机制

目录 节点的功能承载层&#xff08;GATT/Adv&#xff09;局限性&#xff1a; 拓扑关系定向转发机制定向转发意义 CG 节点的功能 节点的功能由节点支持的特性和功能决定。所有节点都能够发送和接收网格消息。节点还可以选择支持一个或多个附加功能&#xff0c;如 Configuration …...