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

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编码。


http://www.kler.cn/a/561847.html

相关文章:

  • 智能证件照处理器(深度学习)
  • PHP 连接 Memcached 服务
  • 腾讯云cos 临时密钥 适用于前端直传等临时授权场景
  • 在嵌入式Linux中实现高并发TCP服务器:从select到epoll的演进与实战
  • Spring Cloud源码 - Eureka源码原理分析
  • MFC学习笔记-1
  • 基本网络安全的实现
  • 火语言RPA--Excel设置列宽
  • 分治算法、动态规划、贪心算法、分支限界法和回溯算法的深度对比
  • 十类DeepSeek学术提示词分享
  • 心理咨询小程序的未来发展
  • deepseek部署:ELK + Filebeat + Zookeeper + Kafka
  • WEEX交易所安全教學:如何應對剪切板被劫持駭客攻擊?
  • leetcode226-翻转二叉树
  • 高并发微服务日志管理:ELK、Loki、Fluentd 终极对决与实战指南
  • MySql:Authentication plugin ‘caching sha2 password‘ cannot be loaded
  • PHP Zip 文件处理指南
  • 父组件用的是原生监听,子组件用的是onClick,子组件添加了stopPropagation还是没有阻止传播
  • LeetCode 解题思路 2(Hot 100)
  • R-INLA实现绿地与狐狸寄生虫数据空间建模:含BYM、SPDE模型及PC先验应用可视化...