Web安全设计

HTTP协议解析

HTTP的工作原理(输入URL到浏览器显示网页经历的步骤)

  1. 浏览器解析URL(protocol + // + domain + / + 目录 + / + 资源 )
  2. 浏览器向DNS请求解析Domain的IP地址(逐级解析: 浏览器缓存+操作系统缓存+操作系统hosts文件+本地DNS服务器+根域名服务器+顶级域名服务器+权威域名服务器)
  3. 权威服务器domain对应的IP地址返回给本地DNS服务器
  4. 本地DNS服务器将IP返回给浏览器
  5. 浏览器与该Web服务器建立TCP连接(Port:80)
  6. 浏览器请求文档: GET index.html
  7. 释放TCP连接
  8. 浏览器显示index.html的内容

HTTP的报文类型

  • 请求报文 —— 浏览器发送给服务器
  • 响应报文 —— 服务器对浏览器的响应
请求报文的方法
方法(操作) 含义
GET 请求读取一个Web页面
POST 请求报文附带数据
DELETE 删除Web页面
CONNECT 用于代理服务器
HEAD 请求读取一个Web页面的首部
PUT 请求存储一个Web页面
TRACE 用于测试,要求服务器送回收到的请求
OPTION 查询特定选项

什么是HTTP代理?

HTTP代理又称Web缓存或代理服务器(Proxy Server),是一种网络实体,能代表浏览器发
出HTTP请求,并将最近的一些请求和响应暂存在本地磁盘中,当请求的Web页面先前缓
存,则直接将暂存的页面发给客户端(浏览器),无须再次访问Internet。

什么是Cookie和Session?
  • Cookie是客户端技术,服务器把每个用户的数据以cookie的形式写给用户各自的浏览器。当用户使用浏览器再去访问服务器中的web资源时,就会带着各自的Cookie去。这样,Web服务器通过读取Cookie就可以获得每个用户保存的数据了
  • Session是服务器端技术,当用户访问服务器的某个资源时,服务器可以为每一个用户的浏览器创建一个其独享的session对象,并将用户的数据存放在各自的session域中,当用户再去访问服务器中的其它web资源时,其它web资源再从用户各自的session中取出数据为用户服务。
共同点和区别
  • 共同点: 二者都同为会话处理机制,都可以用来存私密的东西,也同样也都有有效期的概念。
  • 区别:
    1. Cookie数据存放在客户的浏览器上,Session数据放在服务器上
    2. Cookie不是很安全,别人可以分析存放在本地的Cookie并进行Cookie欺骗。而Session由于保存在远程服务器上,相对比较安全。考虑到安全性应当使用Session

Web常见安全问题

SQL注入攻击?

SQL注入: 如果Web应用没有对攻击者的输入进行适当的编码和过滤,就用于构造数据库查询时,可能导致注入漏洞。攻击者可利用注入漏洞诱使Web应用执行未预见的数据库查询(即 SQL注入攻击)。

SQL手工注入
SQL手工注入一般步骤

1.判断是否存在注入,注入是字符型还是数字型 2.猜解SQL查询语句中的字段数
3.确定显示的字段顺序
4.获取当前数据库
5.获取数据库中的表
6.获取表中的字段名
7.下载数据

SQL盲注
SQL手工盲注的步骤

1.判断是否存在注入,注入是字符型还是数字型
2.猜解当前数据库名
3.猜解数据库中的表名
4.猜解表中的字段名
5.猜解数据

基于时间的盲注

MYSQL中sleep(n)让语句停留n秒时间, 然后返回0, 若命令被中断, 则返回1
因此, 可以认为在通常情况下执行sleep()函数返回值恒为0, 可以借助sleep(n)=0的永真性执行SQL注入
delete from test where id=2 or sleep(10)=0 limit 1
上述命令可以绕过id的限制, 删除任意数据, 由于在后面加了limit 1, 限制只删除一条记录, 因此, 上述指令将删除数据库中的第一条数据

SQL盲注与一般注入的区别

SQL盲注,与一般注入的区别在于,一般的注入攻击者可以直接 从页面上看到注入语句的执行结果或者错误信息,而盲注时攻击 者通常是无法从显示页面上获取执行结果,甚至连注入语句是否 执行都无从得知,因此盲注的难度要比一般注入高。目前网络上 现存的SQL注入漏洞大多是SQL盲注。

SQLMap自动注入

四种独特的SQL注入技术:

  • 盲推理SQL注入
  • UNION查询注入
  • 堆查询
  • 基于时间的SQL盲注入
SQL注入的防御
  1. 使用预编译语句
  2. 使用存储过程
  3. 检查数据类型
  4. 使用安全函数
  5. 特殊字符转义
  6. 数据库加固

跨站脚本漏洞(XSS)

XSS全称Cross Site Scripting,即跨站脚本攻击,某种意 义上也是一种注入攻击,是指攻击者在页面中注入恶意的 脚本代码,当受害者访问该页面时,恶意代码会在其浏览 器上执行。

XSS分类
  • 存储型XSS
  • 反射型XSS
  • DOM型XSS
防御函数的功能

htmlspecialchars(): 函数把预定义的字符转换为 HTML 实体。
mysql_real_escape_string(string,connection):函数会对字符串中的特殊符号( \x00,\n,\r,\,‘,“, \x1a)进行转义。

文件上传漏洞

File Upload,即文件上传漏洞,通常是由于对上传文件的 类型、内容没有进行严格的过滤、检查,使得攻击者可以 通过上传木马获取服务器的webshell权限。

文件上传漏洞的限制条件
  • 首先是要能够成功上传文件
  • 其次上传文件必须能够被执行
  • 最后就是上传文件的路径必须可知。
防御函数的功能

getimagesize(string filename): 函数会通过读取文件头,返回图片的长、宽等信息,如果没有相关的图片文件头, 函数会报错。

imagecreatefromjpeg(filename):函数返回图片文件的图像标识,失败返回false

如何设计安全的文件上传功能?
  1. 文件上传的目录设置为不可执行
  2. 判断文件类型
  3. 使用随机数改写文件名和文件路径
  4. 单独设置文件服务器的域名

文件包含漏洞

文件包含漏洞类型
  • 本地文件包含漏洞: 能够打开并包含本地文件的漏洞
  • 远程文件包含漏洞: 开启了php配置中的 allow_url_fopen选项(选项开启之后,服务器允许包含一 个远程的文件)
目录遍历(Directory traversal)和文件包含(File include)的区别
  • 目录遍历是可以读取web根目录以外的其他目录,根源在于 web application的路径访问权限设置不严,针对的是本系统。
  • 文件包含是通过include函数将web根目录以外的目录的文件被 包含进来。

命令注入

Command Injection,即命令注入,是指通过提交恶意构造的参数破坏命令语句结构,从而达到执行恶意命令的目的。

命令类型

“&&”:表示组合命令
“||”:表示组合命令

相关函数介绍

explode(separator,string,limit): 把字符串打散为数组,返回字符串的数组。参数separator规定在哪里 分割字符串,参数string是要分割的字符串,可选参数limit规定所返回 的数组元素的数目。

如何防范防范命令注入漏洞攻击?

(1)尽量不要使用系统执行命令。
(2)在进入执行命令函数/方法之前,输入变量一定要做好过滤,对敏感字符符进行
转义。
(3)在使用动态函数之前,确保使用的函数是指定的函数之一。
(4)对PHP语言来说,不能完全控制的危险函数最好不要使用。

模板引擎与XSS防御

在“跨站脚本攻击”中,将“输出编码”的防御方法 总结为以下几种:
(1)在HTML标签中输出变量;
(2)在HTML属性中输出变量;
(3)在script标签中输出变量;
(4)在事件中输出变量;
(5)在CSS中输出变量;
(6)在URL中输出变量。

Web程序安全开发流程

SDL的5个阶段

SDL的5个阶段包括安全需求、(安全设计)、(安全实现)、安全验证、安全发布
阶段。

认证测试:

  • 认证绕过测试
  • 暴力破解测试
  • 口令强度测试
  • 验证码强度测试
  • 口令重置测试

posted on 2023-06-13 21:26  SocialistYouth  阅读(28)  评论(0编辑  收藏  举报