searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

业务篡改基础——了解HTTP请求结构

2024-06-11 08:55:26
9
0

一、表现形式
用户通过修改客户端的传参从而绕过前端限制,获取不合法的权限或者执行不合法的操作
 

二、漏洞产生的原因
没有做校验,或者只在客户端做了校验,没有在服务端做校验,导致用户可以通过中间流程进行篡改
例如:库存为0的商品还能销售,修改购买商品的数量类型,但是价格并不改变

三、分析请求
 


1、请求类型
A----------以下主要请求类型:
GET请求
从服务器取回数据。只是取回数据,并不会产生其他影响。(请求的数据会附加在URL之后,以’?'分割URL和传输数据,多个参数用&连接)
POST请求
创建一个实体,也就是一个没有ID的资源。一旦这个请求成功执行了,就会在HTTP请求的响应中返回这个新创建的实体的ID。我们通常用POST请求来上传文件或者表单。(会把请求的数据放在HTTP请求包的包体中。因此,GET请求的数据会暴露在地址栏中,而POST请求则不会)
PUT请求
用来更新一个已有的实体。通过把已经存在的资源的ID和新的实体用PUT请求上传到服务器来更新资源。
DELETE请求
从服务器上删除资源。需要把要删除的资源的ID上传给服务器。(比较危险的一种请求类型,尽量避免使用该类型,因为一旦被攻击者截获,篡改要删除的目标数据,就会造成服务端信息丢失)

B----------以下请求方式使用频率不高:
TRACE请求
提供一种方法来测试当一个请求发生的时候,服务器通过网络收到的内容。所以它会返回你发送的内容。
HEAD请求
HEAD请求和GET请求资源类似,但仅仅返回相应的头部,没有具体的响应体。它也不会对服务器造成其他影响
OPTIONS请求
OPTIONS允许客户端请求一个服务所支持的请求方法。
CONNECT请求
主要用来建立一个对资源的网络连接。一旦建立连接后,会响应一个200状态码和一条"Connectioin Established"的消息。

安全性比较:
POST的安全性高于GET的安全性。这里所说的安全性并不是上面提到的安全方法。而是GET请求会把信息都暴露在地址栏。此时信息可能通过浏览器缓存以及历史纪录的原因泄露。而POST请求则不存在这个问题。此外GET请求提交的数据还可能造成Cross-site request frogery攻击,即利用网站对用户标识的信任欺骗用户的浏览器发送HTTP请求给目标站点。

2、URL
A-----------包含请求服务访问路径
B----------包含关键数据id
C----------包含请求参数

3、Header头
A----------被篡改容易引起安全问题的header头:
Host:初始URL中的主机和端口,同一台机器上,可能部署多个服务,通过解析host+端口,指定具体访问的站点
Authorization:授权信息,通常出现在对服务器发送的WWW-Authenticate头的应答中
Cookie:这是最重要的请求头信息之一
Referer:包含一个URL,用户从该URL代表的页面出发访问当前请求的页面
Origin:用于指明当前请求来自于哪个站点,当我们的浏览器发出跨站请求时,行为正确的服务器会校验当前请求是不是来自被允许的站点。服务器就是通过 Origin 字段的值来进行的判断

B----------其他常见header头:
Accept:浏览器可接受的MIME类型
Accept-Charset:浏览器可接受的字符集
Accept-Encoding:浏览器能够进行解码的数据编码方式,比如gzip。Servlet能够向支持gzip的浏览器返回经gzip编码的HTML页面。许多情形下这可以减少5到10倍的下载时间
Accept-Language:浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到
Connection:表示是否需要持久连接。如果Servlet看到这里的值为“Keep-Alive”,或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连接),它就可以利用持久连接的优点,当页面包含多个元素时(例如Applet,图片),显著地减少下载所需要的时间。要实现这一点,Servlet需要在应答中发送一个Content-Length头,最简单的实现方法是:先把内容写入ByteArrayOutputStream,然后在正式写出内容之前计算它的大小
Content-Length:表示请求消息正文的长度
From:请求发送者的email地址,由一些特殊的Web客户程序使用,浏览器不会用到它
f-Modified-Since:只有当所请求的内容在指定的日期之后又经过修改才返回它,否则返回304“Not Modified”应答
Pragma:指定“no-cache”值表示服务器必须返回一个刷新后的文档,即使它是代理服务器而且已经有了页面的本地拷贝
User-Agent:浏览器类型,如果Servlet返回的内容与浏览器类型有关则该值非常有用

4、body体
A----------multipart/form-data格式:
以表单形式提交,主要是上传文件用它,在http中格式为
 
 

B----------application/x-www-from-urlencoded格式:
以键值对的数据格式提交
 
 

C----------raw格式:
选择text,则请求头是: text/plain
选择javascript,则请求头是: application/javascript
选择json,则请求头是: application/json (如果想以json格式传参,就用raw+json就行了)
选择html,则请求头是: text/html
选择application/xml,则请求头是: application/xml
 

D----------binary格式:
相当于Content-Type:application/octet-stream,从字面意思得知,只可以上传二进制数据,通常用来上传文件,由于没有键值,所以,一次只能上传一个文件。

0条评论
0 / 1000
c****n
2文章数
0粉丝数
c****n
2 文章 | 0 粉丝