五、web应用程序技术——web功能
文章目录
- 一、服务器端功能
- 1.1 SQL
- 1.2 XML
- 1.3 web服务
- 二、客户端功能
- 2.1 HTML
- 2.2 超链接
- 2.3 表单
- 2.4 CSS
- 2.5 JavaScript
- 2.6 文档对象模型
- 2.7 Ajax
- 2.8 JSON
- 2.9 同源策略
- 2.10浏览器拓展技术
一、服务器端功能
早期的web站点由各种静态资源组成,如HTML页面与图片。当用户提交请求时,只需将它们加载到web服务器,在传送给用户即可。每次用户请求某个特殊的资源时,服务器都会返回相同的内容。
如今的web应用程序主要向用户提供动态生成的内容。当用户请求一个动态资源时,服务器会动态建立响应,每个用户都会收到满足其特定需求的内容。动态内容由在服务器上执行的脚本或其他代码生成,这些脚本收到各种输入,并处理输入,然后向用户返回输出结果。
当用户的浏览器提出访问动态资源请求时,它不仅仅要求访问该资源的副本,还会随请求提交各种参数。正是这些参数保证了服务器端应用程序能够生成各种适合用户需求的内容。HTTP请求使用以下几种方式向应用程序传送参数:
- 通过URL查询字符串;
- 通过HTTPcookie;
- 通过REST风格的URL的文件路径;
- 通过在消息主体中使用POST方法。
像常见的计算机软件一样,web应用程序也在服务器端使用大量技术实现其功能。这些技术包括:
- 脚本语言,如php、asp、VBScript等;
- web应用程序平台,如ASP.NET和Java;
- Web服务器,如Apache、IIS;
- 数据库,如MS-SQL、Oracle和Mysql;
- 其他后端组件,如文件系统、基于SOAP的web服务和目录服务。
Java Servlet是应用程序服务器的一个对象,它接收客户端的HTTP请求,并返回HTTP响应。
1.1 SQL
结构化查询语言(SQL)用于访问MySQL、MS-SQL等关系数据库中的数据。关系数据库将数据存储在表中,每个表由许多行和列组成,每一列代表一个数据字段,每一行则代表为这些字段中的一些或全部字段分配的值。
1.2 XML
可拓展标记语言(XML)格式将文档分为内容(数据)和标记(给数据做注解)。标记主要用标签表示,它们包括起始标签、结束标签和空元素标签。
起始标签和结束标签成对出现,其中可包含文档内容和子元素;
同时,标签可以包含以名/值对出现的属性。
XML之所以可拓展,是因为它们可以使用任意数量的标签和属性名。XML文档通常包含文档类型定义(DTD),DTD定义文档中使用的标签、属性及其组合方式。
1.3 web服务
实际上,许多应用程序本质上就是一组后端web服务的GUI前端。Web服务使用简单对象访问协议(SOAP)来交换数据。通常,SOAP使用HTTP协议来传送消息,并使用XML格式表示数据。典型的SOAP请求如下所示:
在使用浏览器访问web应用程序时很有可能遇到SOAP,服务器端应用程序使用它与各种后端系统进行通信。如果将用户提交的数据直接组合到后端的SOAP消息中,就可能产生于SQL注入类似的漏洞。
正常情况下,服务器会以web服务描述语言(WSDL)格式公布可用的服务和参数,攻击者可以使用soapUI之类的工具、基于已发布的WSDL文件创建示例请求,以调用身份验证web服务,获得身份验证令牌,并随后提出任何wen服务请求。
二、客户端功能
服务器端应用程序要接收用户输入与操作,并向用户返回其结果,它必须提供一个客户端用户界面。由于所有web应用程序都通过web浏览器进行访问,因此这些界面共享一个技术核心。近年来,应用程序利用客户端技术的方式也一直在发生急剧变化。
2.1 HTML
HTML是建立web界面所需的核心技术,它是一种用于描述浏览器所显示的文档结构的基于标签的语言。
2.2 超链接
客户端于与服务器之间的大量通信都是由用户单击超链接驱动的。web应用程序中的超链接通常包含预先设定的请求参数,这些数据项不需用户输入,而是由服务器将其插入用户单击的超链接的目标URL中。
2.3 表单
HTML表单是一种常用的收集用户输入的机制,允许用户通过浏览器提交任意输入。以下是一个典型的HTTP表单:
当用户在表单中输入值并单击“提交”按钮时,浏览器将提出以下请求:
在这个请求中,有几个要点说明了请求如何使用各种因素控制服务器端处理过程。
- 因为HTML表单标签中包含一个指定POST方法的属性,浏览器就使用这个方法提交表单,并将表单中的数据存入消息主体中。
- 除用户输入的两个数据外,表单中还包含一个隐藏参数(redir)与一个提交参数(submit)。这两个参数都在请求中提交,服务器端应用程序可使用它们控制其逻辑。
- 负责提交表单的目标URL中也包含一个预设的参数(app),该参数可用于控制服务器端的处理过程。
- 请求中包含一个cookie参数,服务器在早先的响应中将其发布给浏览器,该参数可用于控制服务器端的处理过程。
前面的请求中包含一个消息头,它规定消息主体的内容类型为x-www-form-urlencode。这表示和URL查询字符串一样,消息主体的参数也以名/值对表示。
multipart/form-data是提交表单数据时可能遇到的另一种类型的内容,应用程序可在表单标签的enctype属性中要求浏览器使用多部分编码,使用这种编码形式,请求中的content-type消息头还会指定一个随机字符串,用它来分隔请求主体中的参数。
例如,如果表单指定多部分编码,其生成的请求如下所示:
2.4 CSS
层叠样式表(CSS)用于指定HTML内容在屏幕上的呈现方式。如今,CSS本身正不断成为安全漏洞的来源,并且被攻击者作为传送针对其他类型漏洞的入侵程序的有效手段。
2.5 JavaScript
JavaScript常用于执行以下任务:
- 确认用户输入的数据,然后将其提交给服务器避免因数据包含错误而提交不必要的请求;
- 根据用户操作动态修改用户界面,例如,执行下拉菜单和其他类似于非web界面的控制;
- 查询并更新浏览器内的文档对象模型(Document Object Model,DOM),控制浏览器行为。
2.6 文档对象模型
文档对象模型(DOM)是可以通过其API查询和操作的HTML文档的抽象表示形式。DOM允许客户端脚本按照id访问各个HTML元素并以编程方式访问这些元素的结构,DOM还可用于读取和更新当前URL和cookie等数据。另外,DOM还包含一个事件模型,以便于代码钩住各种事件,如表单提交。浏览器DOM操作是基于Ajax的应用程序采用的关键技术。
2.7 Ajax
Ajax是一组编程技术,用于在客户端创建旨在模拟传统桌面应用程序的用户界面。Ajax是“异步JavaScript和XML”的缩写。
最早的web应用程序基于完整的页面。每个用户操作,如单击链接或提交表单,都会启动窗口级别的导航事件,导致服务器加载新页面。使用Ajax,一些用户操作将由客户端脚本代码进行处理,并且不需要重新加载整个页面。相反,脚本会在“后台”执行请求,并且通过会受到较小的响应,用于动态更新一部分用户界面。
例如,在基于Ajax的购物应用程序中,如果用户单击“添加到购物车”按钮,应用程序将启动一个后台请求,在服务器端更新用户的购物车记录,随后,一个轻量级响应会更新用户屏幕上显示的购物车中的商品数量,浏览器中的整个页面几乎保存不变。
Ajax使用的核心技术为xmlHttpRequest,其已经被转化为一个本地JavaScript对象,客户端脚本可以通过该对象提出“后台”请求,而无须窗口级别的导航事件。尽管其名称仅包含请求,但xmlHttpRequest允许在请求中发送以及在响应中接受任意数量的内容。
另外,使用Ajax会增加典型应用程序的受攻击面,在设计针对其他漏洞的更加高效的入侵程序时,攻击者也可以利用Ajax技术。
2.8 JSON
JavaScript对象表示方法(JSON)是一种可用于对任意数据进行序列化的简单数据交换格式。JSON可直接由JavaScript解释器处理,Ajax应用程序经常使用JSON,以替换最初用于数据传输的XML格式。
通常,用户执行某个操作,客户端JavaScript将使用xmlHttpRequest将该操作传送到服务器,服务器则返回一个包含JSON格式的数据的轻量级响应。然后,客户端脚本将处理这些数据,并对用户界面进行相应地更新。
2.9 同源策略
同源策略是浏览器实施的一种关键机制,主要用于防止不同来源地内容相互干扰。基本上,从一个网站收到的内容可以读取并修改从该站点收到的其他内容,但不得访问其他站点收到的内容。
例如,如果不使用同源策略,当不知情的用户浏览到某个恶意网站时,在该网站上运行的脚本代码将能够访问这名用户同时访问的任何其他网站的数据和功能。这样,该恶意网站就可以从用户的网上银行进行转账、阅读用户的web邮件,或在用户网上购物时拦截他的信用卡信息。为此,浏览器实施限制,只允许相同来源的内容进行交互。
关于同源策略,需要了解以下主要特点:
- 位于一个域中的页面可以向另一个域提出任意数量的请求(例如,通过提交表单或加载图像),但该页面本身无法处理上述请求返回的数据。
- 位于一个域中的页面可以加载来自其他域的脚本并在自己的域中执行这个脚本,这是因为脚本被假定为包含代码,而非数据,因此跨域访问不会泄露任何敏感信息。
- 位于一个域中的页面无法读取或修改属于另一个域的cookie或其他DOM数据。
2.10浏览器拓展技术
除Javascript功能外,一些web应用程序还通过采用浏览器拓展技术,使用定制代码从而各方面拓展浏览器的内置功能,这些组件可配置为字节码,又适当的浏览器插件执行,或需要在客户计算机上安装可执行程序。在攻击web应用程序时,可能遇到的而客户端技术包括:
- Java applet
- ActiveX控件
- Flash对象
- Silverlight对象
相关文章:

五、web应用程序技术——web功能
文章目录 一、服务器端功能1.1 SQL1.2 XML1.3 web服务 二、客户端功能2.1 HTML2.2 超链接2.3 表单2.4 CSS2.5 JavaScript2.6 文档对象模型2.7 Ajax2.8 JSON2.9 同源策略2.10浏览器拓展技术 一、服务器端功能 早期的web站点由各种静态资源组成,如HTML页面与图片。当用…...

AutoDL服务器的镜像版本太高,配置python3.7 tensorflow1.15版本的框架的步骤
1.选择一个实例,进入后端界面 2. 更新bashrc中的环境变量 conda init bash && source /root/.bashrc查看虚拟环境 conda info --envs可以看到此时有一个base的虚拟环境 但是它的python版本为3.8.10,无法安装tensorflow1.15,所以我们要创建一个…...
c++ boost库之scoped_ptr,shared_ptr,weak_ptr智能指针
头文件: #include <boost/smart_ptr.hpp> #include <boost/make_shared.hpp> #include <boost/shared_ptr.hpp> 1. scoped_ptr & scoped_array 只能在本作用域内使用,不希望被转让; 效率等同原始指针; scoped_ptr<string> sp(new string("t…...
【leetcode】383. 赎金信(easy)
给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。 如果可以,返回 true ;否则返回 false 。 magazine 中的每个字符只能在 ransomNote 中使用一次。 class Solution {public boolea…...

CTF-记一次PWN练习
PWN是一个黑客语法的俚语词,自"own"这个字引申出来的,这个词的含意在于,玩家在整个游戏对战中处在胜利的优势,或是说明竞争对手处在完全惨败的情形下,这个词习惯上在网络游戏文化主要用于嘲笑竞争对手在整个…...

《golang设计模式》第一部分·创建型模式-04-工厂方法模式(Factory Method)
文章目录 1 概述2.1 角色2.2 类图 2 代码示例2. 1 设计2.2 代码2.3 类图 3. 简单工厂3.1 角色3.2 类图3.3 代码示例3.3.1 设计3.3.2 代码3.3.3 类图 1 概述 工厂方法类定义产品对象创建接口,但由子类实现具体产品对象的创建。 2.1 角色 Product(抽象产…...

redis的配置和使用、redis的数据结构以及缓存遇见的常见问题
目录 1.缓存 2.redis不仅仅可以做缓存,只不过说他的大部分场景,是做缓存。本地缓存重启后缓存里的东西就没有了,但是redis有。 3.redis有几个特性:查询快,但是是放到内存里的〈断电或者重启,数据就丢了),…...
在Ubuntu系统下修改limits.conf不生效
文章目录 前言尝试过程总结 前言 最近遇到的一个问题,在Ubuntu系统下修改/etc/security/limits.conf不生效,查了多种资料都说不用重启,但是我改完就是不生效,多次尝试之后发现Ubuntu系统有毒。 尝试过程 通过 ulimit -n 命令可…...
selenium 选项 chrome_options
当前环境: Windows 10 Python 3.7 selenium 3.141.0 Google Chrome 115.0.5790.110 (64 位) 一种方法: from selenium import webdriverif __name__ __main__:# chrome 选项配置chrome_options webdriver.ChromeOptions(…...
自然语言处理(Natural Language Processing,NLP)
自然语言处理(Natural Language Processing,NLP)是人工智能领域的一个重要分支,旨在使计算机能够理解、处理和生成人类自然语言。NLP 的目标是让计算机能够像人类一样有效地理解和交流,从而实现更自然、更智能的人机交互。 NLP的理解概括&…...

基于机器学习的库存需求预测 -- 机器学习项目基础篇(12)
在本文中,我们将尝试实现一个机器学习模型,该模型可以预测在不同商店销售的不同产品的库存量。 导入库和数据集 Python库使我们可以轻松地处理数据,并通过一行代码执行典型和复杂的任务。 Pandas -此库有助于以2D阵列格式加载数据帧&#…...

【D3S】集成smart-doc并同步配置到Torna
目录 一、引言二、maven插件三、smart-doc.json配置四、smart-doc-maven-plugin相关命令五、推送文档到Torna六、通过Maven Profile简化构建 一、引言 D3S(DDD with SpringBoot)为本作者使用DDD过程中开发的框架,目前已可公开查看源码&#…...

网络安全设备及部署
什么是等保定级? 之前了解了下等保定级,接下里做更加深入的探讨 文章目录 一、网路安全大事件1.1 震网病毒1.2 海康威视弱口令1.3 物联网Mirai病毒1.4 专网 黑天安 事件1.5 乌克兰停电1.6 委内瑞拉电网1.7 棱镜门事件1.8 熊猫烧香 二、法律法规解读三、安…...

LVS集群
目录 1、lvs简介: 2、lvs架构图: 3、 lvs的工作模式: 1) VS/NAT: 即(Virtual Server via Network Address Translation) 2)VS/TUN :即(Virtual Server v…...
Kubernetes(K8s)从入门到精通系列之十二:安装和设置 kubectl
Kubernetes K8s从入门到精通系列之十二:安装和设置 kubectl 一、kubectl二、在 Linux 系统中安装并设置 kubectl1.准备工作2.用 curl 在 Linux 系统中安装 kubectl3.用原生包管理工具安装 三、验证 kubectl 配置四、kubectl 的可选配置和插件1.启用 shell 自动补全功…...

探索 TypeScript 元组的用例
元组扩展了数组数据类型的功能。使用元组,我们可以轻松构造特殊类型的数组,其中元素相对于索引或位置是固定类型的。由于 TypeScript 的性质,这些元素类型在初始化时是已知的。使用元组,我们可以定义可以存储在数组中每个位置的数…...
Pytorch使用NN神经网络模型实现经典波士顿boston房价预测问题
Pytorch使用多层神经网络模型实现经典波士顿boston房价预测问题 波士顿房价数据集介绍 波士顿房价数据集是一个经典的机器学习数据集,用于预测波士顿地区房屋的中位数价格。该数据集包含了506个样本,每个样本有13个特征,包括城镇的各种指标&…...

微服务间消息传递
微服务间消息传递 微服务是一种软件开发架构,它将一个大型应用程序拆分为一系列小型、独立的服务。每个服务都可以独立开发、部署和扩展,并通过轻量级的通信机制进行交互。 应用开发 common模块中包含服务提供者和服务消费者共享的内容provider模块是…...

python——案例16:约瑟夫生者死者链队列
约瑟夫游戏的大意是:一条船上有30个人,因为在海上遇到风暴 因此船长告诉乘客,必须牺牲15个人,并议定30个人围成一圈, 由第一个人数起,依次报数,数到第9人,便把他投入大海中ÿ…...

【人工智能前沿弄潮】—— 玩转SAM(Segment Anything)
玩转SAM(Segment Anything) 官网链接: Segment Anything | Meta AI (segment-anything.com) github链接: facebookresearch/segment-anything: The repository provides code for running inference with the SegmentAnything Model (SAM), links fo…...

centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...

Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...
Element Plus 表单(el-form)中关于正整数输入的校验规则
目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入(联动)2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

LabVIEW双光子成像系统技术
双光子成像技术的核心特性 双光子成像通过双低能量光子协同激发机制,展现出显著的技术优势: 深层组织穿透能力:适用于活体组织深度成像 高分辨率观测性能:满足微观结构的精细研究需求 低光毒性特点:减少对样本的损伤…...

Vue ③-生命周期 || 脚手架
生命周期 思考:什么时候可以发送初始化渲染请求?(越早越好) 什么时候可以开始操作dom?(至少dom得渲染出来) Vue生命周期: 一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个…...
【SpringBoot自动化部署】
SpringBoot自动化部署方法 使用Jenkins进行持续集成与部署 Jenkins是最常用的自动化部署工具之一,能够实现代码拉取、构建、测试和部署的全流程自动化。 配置Jenkins任务时,需要添加Git仓库地址和凭证,设置构建触发器(如GitHub…...
书籍“之“字形打印矩阵(8)0609
题目 给定一个矩阵matrix,按照"之"字形的方式打印这个矩阵,例如: 1 2 3 4 5 6 7 8 9 10 11 12 ”之“字形打印的结果为:1,…...
Django RBAC项目后端实战 - 03 DRF权限控制实现
项目背景 在上一篇文章中,我们完成了JWT认证系统的集成。本篇文章将实现基于Redis的RBAC权限控制系统,为系统提供细粒度的权限控制。 开发目标 实现基于Redis的权限缓存机制开发DRF权限控制类实现权限管理API配置权限白名单 前置配置 在开始开发权限…...