web请求流程与HTTP方法刨析

web请求流程与HTTP方法刨析

1.HTTP

HTTP超文本传输协议,是访问万维网使用的核心通信协议,也是今天所有web应用程序使用的通信协议。

HTTP使用一种用于消息的模型:客户端发送一条请求信息,服务端返回一条响应消息。
该协议基本上不需要连接,虽然HTTP使用有状态的TCP协议作为他的传输机制,但是每次请求和响应都会自动完成,并且可能使用不同的TCP连接。

1.1HTTP请求

HTTP请求实例:
GET /auth/488/YourDetails.ashx?uid=129 HTTP/1.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
Referer: https://mdsec.net/auth/488/Home.ashx
Accept-Language: zh-cn,zh;q=0.5
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WDW64;
Trident/4.0; SLCC2;. NET CLR 2.0.50727;. NET CLR 3.5.30729; .NET CLR
3.0.30729; .NET4.OC; InfoPath.3; .NET4.OE; FDM;。 NET CLR 1.1.4322)
Accept-Encoding: gzip, deflate
Host: mdsec.net
Connection: Keep-Alive
Cookie: SessionId=5870C7lF3FD4968935CDB6682E545476

HTTP请求实例分析
get
get:主要作用是从web服务器获取一个资源,存在一个名为uid、值为129的参数;HTTP1.1协议版本(HTTP1.1版本必须使用host请求头)
Accept
Accept表示浏览器支持的MIME类型。

MIME类型分别是:text/html、application/xhtml+xml、application/xml 和 /
text:用于标准化地表示的文本信息,文本消息可以是多种字符集和或者多种格式的;
  text/html:表示 html 文档;
  Application:用于传输应用程序数据或者二进制数据;
  application/xhtml+xml表示 xhtml 文档;
  application/xml表示 xml 文档
*/*表示支持任何类型
q:表示权重:如果没有则默认为1,表示优先这些类型。实例中0.9 表示前面都没有就用这个,最后的 0.8 表示如果都没有,那么任意的类型都行。
q是权重系数,范围 0 =< q <= 1,q 值越大,请求越倾向于获得其“;”之前的类型表示的内容,若没有指定 q 值,则默认为1,若被赋值为0,则用于提醒服务器哪些是浏览器不接受的内容类型。
Referer
Referer: 用于表示发出请求的原始URL(例如,因为用户单击页面上的一个链接)
(可防下载、盗链、判断非法链接)
Accept-Language
表示浏览器支持的语言:zh-cn表示简体中文、zh表示中文;q表示权重系数。
User-Agent
User-agent消息头提供与浏览器或其他生成请求的客户端软件有关的信息
HOST
用来指定被访问的完整url中的主机名。
如果多个站点以同一服务器为主机就需要使用host主机头。
Accept-Encoding
表示浏览器支持的压缩编码,如:gzip和deflate
Cookie
用于提交服务器向客户端发布的其他参数
Connection
表示持久的客户端与服务连接。
Close和keep
Close较好表示获取到数据后服务器与客户端断开
Keep用户量大会出问题
Upgrade-Insecure-Requests: 1
该指令用于让浏览器自动升级请求从http到https,用于大量包含http资源的http网页直接升级到https而不会报错.简洁的来讲,就相当于在http和https之间起的一个过渡作用。
X_FORWARDED_FOR
是用来识别通过HTTP代理或负载均衡方式连接到Web服务器的客户端最原始的IP地址的HTTP请求头字段。

1.2HTTP响应

HTTP响应实例
HTTP/1.1 200 OK
Date: Tue, 19 Apr 2011 09:23:32 GMT
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
Set-Cookie: tracking=tI8rk7joMx44S2Uu85nSWc
X-AspNet-Version: 2.0.50727
Cache-Control: no-cache
Pragma: no-cache
Expires: Thu, 01 Jan 1970 00:00:00 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 1067
<IDOCTYPE html PUBLIC一//W3C//DTD XHTML 1.0 Transitional//EN二http://
www.w3.org/TR/xhtmll/DTD/xhtmll一transitional.dtd"><html xmlns="http://
www.w3.ora/1999/xhtml* >Your details

HTTP响应实例分析
使用的HTTP版本。

表示请求结果的数字状态码。200是最常用的状态码.它表示成功提交了请求,正在返回所请求的资源。

一段文本形式的“原因短语”,进一步说明响应状态。这个短语中可包含任何值,当前浏览器不将其用于任何目的。

响应示例中的其他一些要点如下:
Server消息头中包含一个旗标,指明所使用的Web服务器软件。有时还包括其他信息.如所安装的模块和服务器操作系统。其中包含的信息可能并不准确。

Set-Cookie消息头向浏览器发送另一个cookie.它将在随后向服务器发送的请求中由Cookie消息头返回。

Pragma消息头指示浏览器不要将响应保存在缓存中。Expires消息头指出响应内容已经过期.因此不应保存在缓存中。当返回动态内容时常常会发送这些指令,以确保浏览器随时获得最新内容。

几乎所有的HTTP响应在消息头后的空白行下面都包含消息主体,Content-Type消息头示这个消息主体中包含一个HTML文档。

Content-Length消息头规定消息主体的字节长度。

ETag: W/“59a3dc83-f61” 浏览器根据HTTP请求的ETag验证请求的资源是否发生了改变,如果它未发生变化,服务器将返回“304 Not Modified”响应,并且资源从浏览器缓存中读取,这样就不必再次下载请求。

Vary:Accept-Encoding”标头,表示网站一般启用了GZip压缩

Expires是RFC 2616(HTTP/1.0)协议中和网页缓存相关字段。用来控制缓存的失效日期

1.3HTTP消息头总结

1.常用消息头
Connection
用于告诉通信另一端 ,在完成HTTP传输后关闭TCP连接,还是保持连接开放以接受其他消息。
Content-Encoding
为消息主体中的内容指定编码形式(如gzip),程序通过它来压缩响应以加快传输速度。
Content-length
用与规定消息主体的字节长度,
Content-type
用于规定消息主体的内容类型。如:HTML文档的内容类型为text/html
Transfer-Encoding
指定编码

2.请求消息头
Accept
用于告诉服务器客户端愿意接受那些内容。
Accept-Encoding
用于告诉服务器客户端愿意接受那些内容编码。
Authorization
这个消息头用于为一种内置HTTP身份验证向服务器提交证书。
Cookie
这个消息头用于向服务器提交它以前发布的cookie.
Host
这个消息头用于指定出现在所请求的完整URL中的主机名称。
If-Modified-Since
这个消息头用于说明浏览器最后一次收到所请求的资源的时间。如果自那以后资源没有发生变化,服务器就会发出一个带状态码304的响应,指示客户端使用资源的缓存副本。
If-None-Match
这个消息头用于指定一个实体标签。实体标签是一个说明消息主体内容的标识符。当最后一次收到所请求的资源时.浏览器提交服务器发布的实体标签。服务器可以使用实体标签确定浏览器是否使用资源的缓存副本。
Origin
这个消息头用在跨域Ajax请求中,用于指示提出请求的域。
Referer
这个消息头用于指示提出当前请求的原始URL。
User-Agent
这个消息头提供与浏览器或生成请求的其他客户端软件有关的信息。

3.响应消息头
Access-Control-Allow-Origin
这个消息头用于指示可否通过跨域Ajax请求获取资源。
Cache-Control
这个消息头用于向浏览器传送缓存指令(如no-cache)。
ETag
这个消息头用于指定一个实体标签。客户端可在将来的请求中提交这个标识符。获得和If-None-Match消息头中相同的资源,通知服务器浏览器当前缓存中保存的是哪个版本的资源。
Expires
这个消息头用于向浏览器说明消息主体内容的有效时间。在这个时间之前,浏览器可以使用这个资源的缓存副本。
Location
这个消息头用于在重定向响应(那些状态码以3开头的响应)中说明重定向的目标。
Pragma
这个消息头用于向浏览器传送缓存指令(如no-cache).
Server
这个消息头提供所使用的Web服务器软件的相关信息。
Set-Cookie
这个消息头用于向浏览器发布cookie.浏览器会在随后的请求中将其返回给服务器。
WWW-Authenticate
这个消息头用在带401状态码的响应中,提供与服务器所支持的身份验证类型有关的信息。
X-Frame-Options
这个消息头指示浏览器框架是否及如何加载当前响应

1.4HTTP方法

1.GET方法
Get方法的作用在于获取资源。它可以用于URL查询字符串的形式向所请求的资源发送参数。

2.POST方法
POST方法的主要作用是执行操作。使用这个方法可以在URL查询字符串与消息主体中发送请求参数。(提交表单)

3. HEAD
这个方法的功能与GET方法相似,不同之处在于服务器不会在其响应中返回消息主体。服务器返回的消息头应与对应GET请求返回的消息头相同。因此,这种方法可用于检查某一资源在向其提交GET请求前是否存在。
TRACE
这种方法主要用于诊断。服务器应在响应主体中返回其收到的请求消息的具体内容。这种方法可用于检测客户端与服务器之间是否存在任何操纵请求的代理服务器。
OPTIONS
这种方法要求服务器报告对某一特殊资源有效的HTTP方法。服务器通常返回一个包含Allow消息头的响应,并在其中列出所有有效的方法。
PUT
这个方法试图使用包含在请求主体中的内容,向服务器上传指定的资源。如果激活这个方法,渗透测试员就可以利用它来攻击应用程序。例如,通过上传任意一段脚本并在服务器上执行该脚本来攻击应用程序。

(move改名数据包、copy复制数据包、delete删除数据、propfind生成返回有浏览目录权限的内容目录的数据包,最后点提交数据包把生成的数据包提交到服务器)
还有许多其他与攻击Web应用程序没有直接关系的HTTP方法。然而,如果激活某些危险的方法,Web服务器可能面临攻击风险。

1.5URL

标识Web资源的唯一标识符。通过它即可获取其标识的资源。
默认端口80
写在域名后
?id=1(取出数据库id为1的数据返回)

1.6 cookie

是大多数web程序依赖HTTP协议的一个关键组成部分。常通过它利用web程序中的漏洞。
登录时用到,用户信息内容可能存在本地Cookie、

1.7状态码

HTTP响应消息第一行会包含一个状态码。
根据代码的第一个数字分为一下五类:
1XX————提供信息
2XX————请求被成功提交
3XX————客户端被重定向到其他资源
4XX————请求包含某种错误
5XX————服务器执行请求时遇到错误

渗透测试中最有可能遇到的状态码及原因短语
100 Continue 表示已经收到消息请求头,客户端继续发送主体。
200 OK 表示以成功提交请求,且响应主体包含请求结果。
201 creatrd put请求的响应返回这个状态码,表示请求已成功提交。
301 Moved Permanently。本状态码将浏览器永久重定向到另外一个在Location消息头中指定的URL。以后客户端应使用新URL替换原始URL。
302 Found。本状态码将浏览器暂时重定向到另外一个在Location消息头中指定的URL.客户端应在随后的请求中恢复使用原始URL.
304 Not Modified。本状态码指示浏览器使用缓存中保存的所请求资源的副本。服务器使用If-Modified-Since与工f-None-Match消息头确定客户端是否拥有最新版本的资源。
400 Bad Request。本状态码表示客户端提交了一个无效的HTTP请求。当以某种无效的方式修改请求时(例如在URL中插人一个空格符),可能会遇到这个状态码。
401 Unauthorized.服务器在许可请求前要求HTTP进行身份验证。WWW-Authenticate消息头详细说明所支持的身份验证类型。
403 Forbidden。本状态码指出,不管是否通过身份验证,禁止任何人访问被请求的资源。
404 Not Found。本状态码表示所请求的资源并不存在
405 Method Not Allowed。本状态码表示指定的URL不支持请求中使用的方法。例如,如果试图在不支持PUT方法的地方使用该方法,就会收到本状态码。
413 Request Entity Too Large。如果在本地代码中探查缓冲器滋出漏洞并就此提交超长数据串.则本状态码表示请求主体过长,服务器无法处理。
414 Request URI Too Long。与前一个响应类似,本状态码表示请求中的URL过长,服务器无法处理。
500 Internal Server Error。本状态码表示服务器在执行请求时遇到错误。当提交无法预料的输人、在应用程序处理过程中造成无法处理的错误时,通常会收到本状态码。应该仔细检查服务器响应的所有内容,了解与错误性质有关的详情。
503 Service Unavailable。通常,本状态码表示尽管Web服务器运转正常.并且能够响应请求,但服务器访问的应用程序还是无法作出响应。应该进行核实,是否因为执行了某种行为而造成这个结果。

1.8HTTPS

HTTP使用普通的非加密TCP作为其传输机制.因此,处在网络适当位置的攻击者能够截取这个机制。HTTPS本质上与HTTP一样,都属于应用层协议.但HTTPS通过安全传输机制—安全套接层(Secure Socket Layer, SSL)传送数据。这种机制可保护通过网络传送的所有数据的隐密性与完整性,显著降低非人侵性拦截攻击的可能性。不管是否使用SSL进行传输,HTTP请求与响应都以完全相同的方式工作。

1.9HTTP代理

HTTP代理服务器是协调浏览器与目标web服务器之间访问的服务器
当浏览器使用代理服务器时,它会将所有请求提交到代理服务器,由代理服务器再将请求传送给相关web服务器,并将响应在返回给浏览器。

当浏览器向代理服务器发布HTTP请求时,它会将完整的URL(包括协议前缀 http://与服务器主机名称,在非标准URL中,还包括端口号)插人请求中。代理服务器将提取主机名称和端口,并使用这些信息将请求指向正确的目标Web服务器。

**当使用HTTPS时,**浏览器无法与代理服务器进行SSL握手.因为这样做会破坏安全隧道,使通信易于遭受拦截攻击。因此.浏览器必须将代理作为一个纯悴的TCP级中继,由它传递浏览器与目标Web浏览器之间的所有网络数据,并与浏览器进行正常的SSL握手。浏览器使用CONNECT方法向代理服务器提交一个HTTP清求.并指定URL中的目标主机名称与端口号.从而建立这种中继。如果代理允许该请求,它会返回一个含200状态码的HTTP响应,一直开放TCP连接.从此以后作为目标Web服务器的纯梓TCP级中继。
从某种程度上说,攻击Web应用程序时最有用的工具是一个处在浏览器与目标Web站点之间的专用代理服务器,使用它可以拦截并修改所有使用HTTPS的清求与响应。

1.10 HTTP身份验证

Basic
它在请求消息头中随每条消息以basic64编码字符串的形式发送用户证书。

NTLM
NTLM WindowsNT 挑战/响应验证机制(早期的安全协议)
NTLMv2及Kerberos验证体系(更新的安全按协议)

Digest
是一种相应式机制,随同用户证书一起使用一个随机值MD5校验和。

2.WEB功能

2.1 服务端功能

早期web站点由静态资源组成,如HTML页面与图片;当用户提交请求时,只需将它们加载到Web服务器,再传送给用户即可。每次用户请求某个特殊的资源时,服务器都会返回相同的内容。
如今的Web应用程序仍然使用相当数量的静态资源。但它们主要向用户提供动态生成的内容。当用户请求一个动态资源时.服务器会动态建立响应,每个用户都会收到满足其特定需求的内容。
动态内容由在服务器上执行的脚本或其他代码生成。在形式上,这些脚本类似于计算机程序:它们收到各种输入,并处理输入,然后向用户返回输出结果。
当用户的浏览器提出访问动态资源的请求时,它并不仅仅是要求访问该资派的副本。通常它还会随请求提交各种参数。正是这些参数保证了服务器端应用程序能够生成适合各种用户需求的内容。
HTTP请求使用3种主要方式向应用程序传送参数:
通过URL查询字符串;
通过REST风格的URL的文件路径;
通过HTTPcookie ;
通过在请求主体中使用POST方法。
除了这些主要的输人源以外,理论上,服务器端应用程序还可以使用HTTP请求的任何一个部分作为输人。例如,应用程序可能通过User}Agent消息头生成根据所使用的浏览器类型而优化的内容。
像常见的计算机软件一样.Web应用程序也在服务器端使用大赞技术实现其功能。这些技术包括:
脚本语言,如PHP, VBScript和Perl ;
Web应用程序平台.如ASP.NET和Java;
Web服务器.如Apache, IIS和Netscape Enterprise;
数据库.如MS-SQL, Oracle和MySQL;
其他后端组件,如文件系统、基于SOAP的Web服务和目录服务。

常见的web应用程序平台和语言

Java
它应用多层与负载平衡架构,非常适于模块化开发与代码重复利用。由于其历史悠久、应用广泛,因此.开发者在开发过程中可以利用许多高质最的开发工具、应用程序服务器与框架。Java平台可在几种基础型操作系统上运行,包括Windows、Linux与Solaris,
Ruby on rails
,主要侧重于模型-视图-控制器体系架构。Rail:的主要优势在于,使用它能够以极快的速度创建成熟的数据驱动应用程序。如果开发者遵循Rails编码风格和命名约定,则可以使用Rails自动生成数据库内容的模型、修改该模型的控制器操作以及供应用程序用户使用的默认视图。与其他功能强大的新技术一样,人们已在Ruby On Rails中发现了一些漏洞.包括能够避开“安全模式”,这与在PHP中发现的漏洞类似。
有关最近发现的漏洞的详细信息,请参阅www.ruby-lang.org/en/security/
Sql
结构化查询语言(SQL)用于访问Oracle, MS-SQL服务器和MySQL等关系数据库中的数据。目前,绝大多数的Web应用程序都将基于SQL的数据库作为它们的后端数据仓库,而且,几乎所有应用程序的功能都需要以某种方式与这些数据仓库进行交互。
关系数据库将数据存储在表中,每个表又由许多行和列构成。每一列代表一个数据字段,如“名称”或“电子邮件地址”.每一行则代表为这些字段中的一些或全部字段分配值的项。
SQL使用查询来执行常用的任务,如读取、添加、更新和删除数据。例如,要检索用户的具有指定名称的电子邮件地址,应用程序可以执行以下查询:
select email from users where name=’daf’
要实现它们所需的功能,Web应用程序可能会将用户提交的输人组合到由后端数据库执行的SQL查询中。如果以危险的方式进行组合,攻击者就可以提交恶惫输人来干扰数据库的行为,从而读取和写人敏感数据。我们将在第9章中介绍这些攻击,并详细说明SQL语言及其用法
Xml
可扩展标记语言(XML)是一种机器可读格式的数据编码规范。与其他标记语言一样.XML格式将文档划分为内容(数据)和标记(给数据作注解))。
标记主要用标签表示,它们包括起始标签、结束标签和空元素标签:



起始和结束标签成对出现,其中可以包括文档内容或子元素:
ginger
spotpaws
标签可以包含以名l值对出现的属性:

XML之所以可扩展,是因为它可以使用任意数放的标签和属性名。XML文档通常包含文档
类型定义(DTD ), DTD定义文档中使用的标签、属性及其组合方式。
服务器端和客户端Web应用程序广泛采用XML及由XML派生的技术
Web服务
Web服务使用简单对象访问协议(SOAP)来交换数据。通常,SOAP使用HTTP协议来传送
消息,并使用XML格式表示数据。
典型的SOAP请求如下所示:
POST /doTransfer.asp HTTP/1.0
Host: mdsec-mgr.int.mdsec.net
Content-Type: application/soap+xml; charset=utf-8
Content-Length: 891

<?xml version=一1.0'?>

<soap:Envelope xmlns:soap=”http://www.w3.org/2001/12/soap-envelope”>
soap:Body
pre:Add :xmlns:pre.http://target/list.soap:encodingStyle=
"http://www.w3.org/2001/12/soap-encodingl>

18281008
1430
False
08447656

</pre:Add>
</soap:Body>
</soap:Envelope>
在使用浏览器访问Web应用程序时很可能会遇到SOAP,服务器端应用程序使用它与各种后端系统进行通信。如果将用户提交的数据直接组合到后端SOAP消息中,就可能产生与SQL注人类似的漏洞。
如果Web应用程序还直接公开Web服务,那么.我们还需要检查这些Web服务。即使前端应用程序是基于Web服务编写的,但它们在箱人处理以及服务本身所披露的功能方面仍存在区别。正常悄况下,服务器会以Web服务描述语言(WSDL)格式公布可用的服务和参数。攻击者可以
使用soapUl之类的工具、基于已公布的WSDL文件创建示例请求,以调用身份验证Web服务.获得身份验证令牌.并随后提出任何Web服务请求。

2.2客户端功能

服务器端应用程序要接收用户输人与操作,并向用户返回其结果,它必须提供一个客户端用户界面。由于所有Web应用程序都通过Web浏览器进行访问.因此这些界面共享一个技术核心。然而,建立这些界面的方法各不相同。
1.HTML
是建立web界面所需的核心技术,是用于描述浏览器所显示的文档结构的基于标签的语言,
XHTML是HTML的进化版本,是基于XML,且采用更严格的规范,以避免由于浏览器必须接受不太严格的HTML格式而导致的各种攻击和安全问题。
2.超链接
客户端与服务器之间的大量通信都由用户单击超链接驱动。**Web应用程序中的超链接通常包含预先设定的请求参数.这些数据项不需由用户输人,而是由服务器将其插人用户单击的超链接的目标URL中,以这种方式提交。**例如,Web应用程序中可能会显示一系列新闻报道链接,其形式如下:
What’s happening?
当用户单击这个链接时,浏览器会提出以下请求:
GET /news/8/?redir=/updates/update29.htm1 HTTP/1.1
Host: mdsec.net
服务器收到查询字符串中的参数(newsid ).并使用它的值决定向用户返回什么内容。
3.表单
虽然基于超链接的导航方法负责客户端与服务器之间的绝大多数通信,但许多Web应用程序还是需要采用更灵活的形式收集输入,并接收用户输人。HTML表单是一种常见的机制,允许用户通过浏览器提交任意输入。以下是一个典型的HTTP表单:

2.3状态与会话

为实现各种有用的功能.应用程序需要追踪每名用户通过不同的请求与应用程序交互的状态。例如,一个购物应用程序允许用户浏览产品目录、往购物车内添加商品、查看并更新购物车内容、结账并提供个人与支付信息。
为实现这种功能,应用程序必须维护一组在提交各种请求过程中由用户操作生成的有状态数据。这些数据通常保存在一个叫做会话的服务器端结构中。当用户执行一个操作(如在购物车中添加一件商品)时,服务器端应用程序会在用户会话内更新相关信息。以后用户查看购物车中的内容时,应用程序就使用会话中的数据向用户返回正确的信息。
在一些应用程序中,状态信息保存在客户端组件而非服务器中。服务器在响应中将当前的数据传送给客户端,客户端再在请求中将其返回给服务器。当然.由于通过客户端组件传送的任何数据都可被用户修改,因此,应用程序需要采取措施阻止攻击者更改这些状态信息,破坏应用程序的逻辑。ASP.NET平台利用隐藏表单字段ViewState保存与用户的Web界面有关的状态信息,从而减轻服务器的工作负担。默认情况下ViewState的内容中还包括一个密钥散列,以防止受到破坏。
因为HTTP协议本身并没有状态.为使用正确的状态数据处理每个请求,大多数应用程序需要采用某种方法在各种请求中重新确认每一名用户的身份。通常,应用程序会向每名用户发布一个令牌.对用户会话进行唯一标识.从而达到这一目的。这些令牌可使用任何请求参数传输.但许多应用程序往往使用HTTP cookie来完成这项任务。

3.编码方案

1.url编码(工具可转换)
URL编码方案主要用于对扩展ASCII字符集中的任何有问题的字符进行编码,使其可通过HTTP安全传输。任何URL编码的字符都以%为前缀,其后是这个字符的两位十六进制ASCII代码。
常见的url编码字符:
 %3d代表=
 %25代表%
 %20代表空格
 %0a代表换行
 %00代表空字节
2.Unicode编码
Unicode是一种为支持全世界所使用的各种编写系统而设计的字符编码标准,它采用各种编码方案.其中一些可用于表示Web应用程序中的不常见字符。
16位Unicode编码的工作原理与URL编码类似**。为通过HTTP进行传输16位Unicode编码的字符以u为前缀,其后是这个字符的十六进制Unicode码点。**例如:
%u2215代/
%u00e9代表
**UTF-8是一种长度可变的编码标准.它使用一个或几个字节表示每个字符。为通过HTTP进行传输,UTF-8编码的多字节字符以毛为前缀,其后用十六进制表示每个字节。**例如:
%c2%a9代表
%e2%89%a0代表
攻击Web应用程序时之所以要用到Unicode编码,主要在于有时可用它来破坏输入确认机制。如果输入过滤阻止了某些恶意表达式.但随后处理输入的组件识别Unicode编码,就可以使用各种标准与畸形Unicode编码避开过滤。
3.HTML编码
HTML编码是一种用于表示问题字符以将其安全并入HTML文档的方案。有许多字符具有特殊的含义(如HTML内的字符),并被用于定义文档结构而非其内容。为了安全使用这些字符并将其用在文档内容中,就必须对其进行HTML编码。
HTML编码定义了大量HTML实体来表示特殊的字面量字符.例如:
"代表”
&apos:代表’
&代表&
<代表<
&g:;代表>
此外,任何字符都可以使用它的十进制ASCII码进行HTML编码.例如:
"代表”
#39;代表’
或者使用十六进制的ASCII码(以x为前缀),例如:
"代表”
'代表’
当攻击Web应用程序时,HTML编码主要在探查跨站点脚本漏洞时发挥作用。如果应用程序在响应中返回未被修改的用户输人,那么它可能易于受到攻击,但是,如果它对危险字符进行HTML编码也许比较安全。
4.Base64编码
Base64编码仅用一个可打印的ASCII字符就可安全转换任何二进制数据.它常用于对电子邮件附件进行编码,使其通过SMTP安全传输。它还可用于在基本HTTP验证机制中对用户证书进行编码。
Base64编码将输人数据转换成3个字节块。每个块被划分为4段,每段6个数据位。这6个数据位有64种不同的排列组合,因此每个段可使用一组64个字符表示。Base64编码使用以下字符集其中只包含可打印的ASCII字符:
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopgrstuvwxyz0123456789-/
如果最后的输人数据块不能构成3段输出数据,就用一个或两个等号(=)补足输出。
例如,The Web Application Hacker’s Hand book的Base64编码为:
VGh1IFdlYiBBcHBsaWNhdGlvbiBIYWNrZXIncyBIYW5kYm9vaw==
许多Web应用程序利用Base64编码在cookie与其他参数中传送二进制数据,甚至用它打乱敏感数据以防止即使是细微的修改。应该总是留意并解码发送到客户端的任何Base64数据。由于这些数据使用特殊的字符集,而且有时会在字符串末尾添加补足字符(二),因此可以轻易辨别出Base64编码的字符串。
5.十六进制编码
许多应用程序在传送二进制数据时直接使用十六进制编码,用ASCII字符表示十六进制数据
块。例如,对cookie中的用户名daf进行十六进制编码,会得到以下结果:
646166
和Base64编码的数据一样,十六进制编码的数据通常也很容易辨认。为了解十六进制编码的
功能应当对服务器发送到客户端的任何十六进制数据进行解码。
6.远程和序列化框架
近些年出现了各种用于创建用户界面的框架,这些框架中的客户端代码可以远程访问服务器端实施的编程API。利用这些框架.开发者可以在一定程度上忽略Web应用程序的分布式本质,而以与开发传统桌面应用程序类似的方式编写代码。这些框架通常提供客户端上使用的存根API,它们还能够自动处理以下两个任务:通过这些API远程调用相关服务器端功能,对传送给上述功能的任何数据进行序列化。
这类远程和序列化框架包括:
Flex和AMF;
Silverlight和WCF;
Java序列化对象。
ThinkPHP
Struts2

Web常识拓展:

1.静态 动态语言区别
答: 动态语言:服务端和客户端代码不一致(如html)
静态语言:服务端和客户端代码一致(如: asp,php,aspx,jsp)
2。常见的脚本语言有那些
答: asp 、php、 aspx、 jsp、 cgi、 war、 do、 py、 pl
3.常见的数据库有那些
答: access mysql mssql(sqlserver) oracle postsql db2
4.常见的数据库与脚本语言搭配
答:asp+access,asp+mssql,php+mysql,aspx+mssql aspx+oracle,jsp+oracle, jsp+mssql等
5.系统、脚本语言、中间件如何组合
答:Windows2003/2008/2012+asp、aspx、php+iis6.0/7.0+7.5
Apache+Windows/Linux+PHP Windows/Linux+Tomcat+JSP
6.渗透测试过程中如何查看对方网站平台
答:1、工具(RASS、天镜、NMAP、X-SCAN) 2、第三方平台(seo.chinaz.com) 3、通过ping观看TTL值

猜你喜欢

转载自blog.csdn.net/weixin_45380284/article/details/107217829