web安全——web应用程序技术

news/2025/2/26 8:46:43

文章目录

  • 一、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编码。


http://www.niftyadmin.cn/n/5868414.html

相关文章

【CSS 选择器的特异度 CSS 继承 CSS 求值过程解析 CSS 布局方式及相关技术】

以下是关于 CSS 选择器特异度、继承、求值过程及布局技术 的详细解析&#xff0c;结合核心概念和实际应用场景&#xff1a; 一、CSS 选择器特异度&#xff08;Specificity&#xff09; 1. 特异度规则 特异度用于决定当多个选择器作用于同一元素时&#xff0c;哪个样式优先级更…

布署elfk-准备工作

建议申请5台机器部署elfk&#xff1a; filebeat(每台app)--> logstash(2台keepalived)--> elasticsearch(3台)--> kibana(部署es上)采集输出 处理转发 分布式存储 展示 ELK中文社区: 搜索客&#xff0c;搜索人自己的社区 官方…

当AI搜索撕开传统搜索的裂缝,警惕AI搜索的“信息茧房”

大家好&#xff0c;我是Shelly&#xff0c;一个专注于输出AI工具和科技前沿内容的AI应用教练&#xff0c;体验过300款以上的AI应用工具。关注科技及大模型领域对社会的影响10年。关注我一起驾驭AI工具&#xff0c;拥抱AI时代的到来。 人工智能&AIGC术语100条 Shelly聊AI-重…

鸿蒙NEXT开发-用户通知服务

注意&#xff1a;博主有个鸿蒙专栏&#xff0c;里面从上到下有关于鸿蒙next的教学文档&#xff0c;大家感兴趣可以学习下 如果大家觉得博主文章写的好的话&#xff0c;可以点下关注&#xff0c;博主会一直更新鸿蒙next相关知识 目录 1. 用户通知服务基本介绍 2. 能力范围 …

笔记20250225

关于上拉电阻和下拉电阻的作用 原理 上拉电阻&#xff1a;在上拉电阻所连接的导线上&#xff0c;如果外部组件未启用&#xff0c;上拉电阻则“微弱地”将输入电压信号“拉高”。当外部组件未连接时&#xff0c;对输入端来说&#xff0c;外部“看上去”就是高阻抗的&#xff0c…

【初阶数据结构】链表的柔光之美

目录 一、为什么需要链表&#xff1f; 二、链表与数组的对比 三、链表节点定义 四、链表基本操作 1. 创建链表 2. 插入节点 头插法&#xff08;时间复杂度O(1)&#xff09; 尾插法&#xff08;时间复杂度O(n)&#xff09; 3. 删除节点 4. 遍历链表 五、进阶操作 1. 反…

系统调用过程

注意&#xff1a;本系统调用过程基于32位操作系统 中断服务程序的寻址过程 1.用户态程序产生系统调用write()&#xff1b; 2.产生中断指令ENTER_KERNEL(int $0x80128)&#xff0c;CPU收到中断指令去查询中断向量表&#xff0c;找出中断号0x80对应的中断服务程序的内存基地址(0…

C# string转unicode字符

在 C# 中&#xff0c;将字符串转换为 Unicode 字符&#xff08;即每个字符的 Unicode 码点&#xff09;可以通过遍历字符串中的每个字符并获取其 Unicode 值来实现。Unicode 值是一个整数&#xff0c;表示字符在 Unicode 标准中的唯一编号。 以下是实现方法&#xff1a; 1. 获…