第一章-web安全基础(HTTP基础及信息传递)

常见的Web安全漏洞

owasp top10(十大安全漏洞)

  1. 注入
  2. 失效的身份认证
  3. 敏感数据泄露
  4. XML外部实体
  5. 失效的访问控制
  6. 安全配置错误
  7. 跨站脚本(XSS)
  8. 不安全的反序列化
  9. 使用含有已知漏洞的组件
  10. 不足的日志记录和监控

HTTP基础

超文本传输协议,规定浏览器和万维网服务器之间相互通信的规则,它允许将超文本标记语言文档冲Web服务器传送到Web浏览器。

HTTP之URL

URL:统一资源定位符

  • URL的标准格式
    协议://服务器域名[:端口]/路径、[?查询]
    • 协议:包含HTTP、HTTPS等
    • 服务器域名:也可使用IP地址来表示
    • 端口:端口并不是URL必需的部分,可以省略采用默认端口。如:HTTP的默认端口为80。
    • 路径:主机上的一个目录或者地址。
    • 查询:从?开始为查询部分,其中分为参数名和参数值。

HTTP请求

在这里插入图片描述

HTTP请求分为三部分:请求行、请求头和请求正文。

  • 请求行:由请求方法、请求路径和协议版本3部分组成。
  • 请求头:HTTP请求的第二行至空白行为请求头。包含客户端环境,请求正文的有用信息。
  • 请求正文:空行代表请求头结束请求正文开始。

HTTP响应

在这里插入图片描述
HTTP响应分为三部分:相应行、响应头(消息包头)和响应正文。

  • 响应行:由协议版本、状态码、状态信息三部分组成。
  • 响应头:第二行至末尾空白行为响应头。用来传递不能放入响应行的附加响应信息、关于服务器的信息和对Request-URI所标识的资源进行下一步访问的信息。
  • 响应正文:返回给客户端的文本信息。

HTTP状态码

5种HTTP状态码

分类分类描述
1**信息,服务器收到请求,需要请求者继续执行操作
2**成功,操作被成功接收并处理
3**重定向,需要进一步操作以完成请求
4**客户端错误,请求包含语法错误或无法完成请求
5**服务器错误,服务器在处理请求的过程中发生了错误

常见的HTTP状态码

状态码状态描述说明
200ok客户端请求成功
301永久移动永久移动。请求的资源已被永久移动到新的UR1,返回信息会包括新的URI,浏览器会自动定向到新的URI。今后任何新的请求都应使用新的URI代替
302临时移动临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI
400不良请求客户端错误,请求包含语法错误或无法完成请求
401未经授权请求要求用户的身份认证
403服务器理解客户端的请求,但是拒绝执行此请求
404找不到服务器无法根据客户端的请求找到资源(网页)
500InternalServerError服务器内部错误,无法完成请求
503服务不可用由于超载或系统维护,服务器暂时无法处理客户端的请求

HTTP请求方法

HTTP1.0定义了3个请求方法:GET、HEAD、POST。1.1又新增了5个请求方法:PUT、DELETE、CONNECT、OPTIONS、TRACE

请求方法描述
GET请求指定页面信息,并返回实体主体
HEAD与GET请求相似,但是只返回响应行和响应头,不返回响应正文
POST向指定资源提交数据以处理请求(例如,提交表单或者上传文件),数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改
PUT从客户端向服务器传送数据并进行存储或替换
DELETE请求删除服务器指定的页面!
CONNECTHTTP 1. 1协议中预留给能够将连接改为管道方式的代理服务器
OPTIONS允许客户端查看服务器的性能
TRACE回显服务器收到的请求,主要用于测试或诊断

GET方法示例

在这里插入图片描述

POST方法示例

在这里插入图片描述POST与GET方法的区别:

  • GET方法没有请求正文,而POST方法有
  • GET方法请求数据有长度限制,而POST方法请求数据没有长度限制。
  • GET方法会在浏览器中显示请求的数据;而POST方法不会,因此更为安全。

HTTP请求头

请求头信息
Host请求的Web服务器域名或者IP地址
User-AgentHTTP客户端运行的浏览器类型的详细信息。通过该信息,Web服务器可以判断出当前HTTP请求的客户端浏览器类别
Accept指定客户端能够接收的内容类型,内容类型的先后次序表示客户端接收的先后次序
Accept-Language指定HTTP客户端浏览器用来展示返回信息所优先选择的语言
CookieHTTP请求发送时,会把保存在该请求域名下的所有Cookie值一起发送给Web服务器
Referer包含一个URL,用户从该URL代表的页面出发访问当前请求的页面

HTTP响应头

响应头信息
Location控制浏览器重定向到哪个页面
Server服务器的banner信息
Set-Cookie服务器发送给客户端的Cookie设置信息
Cache-Control服务器控制浏览器是否要缓存网页

Cookie和Session

HTTP本身是无状态的,不能保存服务器和客户端状态信息。客户端访问一次Web应用和连续访问十次Web应用,服务器返回的页面都是一样的,但有些情况下需要服务器记住或者识别用户,为此引入了Cookie和Session的概念

Cookie简介

  • Cookie是客户端保存用户信息的一种机制,存储在客户端的文件中
  • Cookie存在过期时间,会在相应时间后到期自动删除Cookie文件。

Cookie详解

设置Cookie

  • 语法:setcookie(name,value,expire,path,domain);
  • Cookie存储的信息包含名称、值、过期时间、路径、域。
  • 路径和域构成了Cookie的作用范围。
  • 设置user的cookie,复制为test,过期时间为1h。示例如下
<?php
	setcookie("user","test",time()+3600);
?>
  • cookie文件存放在\walk\AppData\Local\Googel\Chrome\User Data\Default\Cookies中。不同用户的浏览器安装路径不一样,cookie文件路径也不同。
  • chrome浏览器的cookie文件是SQLLite数据库文件,Chrome33以上版本对Cookies进行了加密,用SQLLite Developer打开Chrome的Cookies文件就会发现Value字段已经加密。
  • 运行以下脚本可以将Cookie解密:
import sqlite3
import win32api

outFile_path = r'D:\Cookies.txt';
sql_file = r'c:\Users\walk\AppData\Local\Google\Chrome\User Data\Default\Cookies';
sql_exe = "select host_key,name,value,encrypted_value from Cookies";
conn = sqlite3.connect(sql_file)
for row in conn.execute(sql_exe):
    pwdHash = str(row[3])
    try:
        ret = win32crypt.CryptUnprotectData(pwdHash,None,None,None,0)
    except:
        print('Fail to decrypt Chrome Cookies')
        sys.exit(-1)
    with open(outFile_path,'a+') as outFile:
        outFile.write('host_key:{0:<20}name:{1:<20}value:{2} \r\n'.format(row[0].encode('gbk'),row[1].encode('gbk'),ret[1].encode('gbk')))
conn.close()
print('All Chrome Cookies saved to:\n') + outFile_path

获取Cookie

输出user Cookie的值test,代码如下:

<?php
	print_r($_COOKIE["user"]);
?>

此代码可以获取name为user的Cookie信息

删除Cookie

<?php
	setcookie("user","",time()-3600);
?>

通过此代码可以删除name为user的Cookie。

Session详解

  1. Session是在无状态的HTTP下服务端跟踪用户状态时用于标识具体用户的机制,Session信息存储在服务器端的数据库或者文件中

Session的实现原理

  1. Session的工作机制是:为每个用户创建一个唯一的ID,并基于这个ID来存储变量。
Session的组成
  1. Session包含一下三个部分:
    (1) Session id。用户session的唯一标识,随机生成。
    (2)Session file。Session的存储文件,文件名称为sess_(Session_id)。
    (3)Session data。保存序列化后的用户数据。
Session的存储位置
  1. session的存储位置在PHP配置文件php.ini中定义,也可以通过应用程序设置。
  2. 下面的PHP配置文件中,session存储在默认的/var/lib/php/session目录下。在这里插入图片描述

PHP中Session设置函数

1) Session会话开启函数session_start
在存储Session内容之前,必须开启Session会话,开启Session会话的函数是Session_start,该函数位于标签之前。格式如下:
在这里插入图片描述此代码开启一个Session会话,并且为用户创建一个唯一的ID,并基于这个ID存储变量。
2)Session的存储与读取
Session通过PHP的$_SESSION变量进行Session的存储与读取。
在这里插入图片描述在这里插入图片描述

以上代码通过$_SESSION变量存储ctfs的值(为1),运行后输出sessiontest=1。
在这里插入图片描述

Session传输

Session一般是在Cookie中传输的,若Cookie被禁用,则会通过URL重写的方式进行传输。

  • 通过URL重写实现Session传输
    在这里插入图片描述
  • 表单隐藏字段
    服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时能够吧Session id传递回服务器
    在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值