安全测试理论
安全测试理论
-
什么是安全测试?
安全测试:发现系统安全隐患的过程
-
安全测试与传统测试区别
传统测试:发现bug为目的 安全测试:发现系统安全隐患
-
什么是渗透测试
渗透测试:已成功入侵系统为目标的的攻击过程
-
渗透测试与安全测测似区别
渗透测试:攻击 安全测试:防护
-
如何进行安全测试(安全测试常用方法)
1、代码走读:检查代码是否有安全隐患 2、动态渗透 3、扫描程序缓存问题
-
安全测试方面(维度)
客户端安全
-
常见分类
XSS:跨站脚本攻击 CSRF:跨站请求伪造
XSS
-
什么是XSS
跨站脚本(cross site script)为了避免与前端css混淆,改名为xss
攻击者通过改变前端页面元素请求地址或注入JS,来获取非法数据(cookie)。
-
XSS攻击原理
-
XSS可用攻击页面标签
-
攻击方式分类
-
存储型:将攻击代码存储到数据库,每次打开指定的页面自动加载执行。
场景:留言板、注册
-
反射性:临时修改页面代码,用户打开页面中招。
场景:图片、连接
-
-
XSS攻击步骤
-
核心:查找是否有XSS漏洞
执行:<script>alert(123)</script>,证明可以执行JS或没有对<进行过滤。
-
目的:盗取敏感数据,如cookie
-
XSS防护策略
- 将cookie设置只读(HttpOnly)
- 输入控制:禁止输入特殊符号(</>'等)
- 输出控制:过滤或转义特殊符号的输出
-
总结
-
XSS安全测试解决什么问题?
避免客户端被注入恶意JS程序或修改标签链接地址,导致数据丢失或访问黑客网站
-
XSS测试人员使用的步骤
1、验证码页面是否屏蔽了JS的注入 2、如果存在JS注入,提醒开发防护策略
-
CSRF(跨站攻击)
- 什么是CSRF
CSRF(Cross-site request forgery)是指跨站请求伪造攻击
- 目的
- 原理
- 攻击操作步骤
1、获取删除或修改网站数据的接口
2、在黑客网站上生成一个删除或修改链接(领取优惠券)
3、黑客在要攻击的网站上生成一个跳转到黑客网站的链接(优惠活动)
4、用户在黑客网站上领取优惠券
- 测试CSRF步骤
检查项目是否对请求头->HTTP Referer做校验。后台判断是操作请求来源只能是自己的网站。
- 防御
HTTP Referer:请求头来源的显示,从哪个点击链接访问,会记录链接访问的地址。
网络安全
协议加密
数据加密
数据签名
DOS攻击
- 协议加密:常用HTTPS协议(基于HTTP协议之上进行加密传输和证书策略)
1、数据完整性
2、数据保密性
3、安全校验
- 数据加密
数据加密:md5/AES/DES/自定义
- 数据签名
特点:对请求数据生成一个无法伪造的字符串,发送给服务器。
- Dos攻击
目的:让目标计算机或网络无法提供正常的服务或资源访问,使目标系统停止响应甚至崩溃。
防御:
1、请求添加访问时间戳,服务器进行判断是否在有效期内,如果在处理,否则不处理。
2、指定时间内控制请求参数(百度->1秒之内3次)
3、流量限制(验证码->越模糊越好)
用户安全策略
密码登录:①:session②:token
其他登录
- 密码
提示:
1、密码纯6位数字,有10**6
2、密码纯8位数字,有10**8
-
session
- 说明:密码登录成功后,服务器可以生成session|token|cookie等认证方式来进行后续认证处理。
- 特点:session:一次会话(会话结束session关闭)
- 危害:如果在session会话有效期内,session被盗取,那么后果是很可怕的(相当于账号密码泄露)
- 防护策略:
- 在一定时间后后台关闭session
- 相同用户只能生成1个对象
- 当用户客户端发生变化(浏览器、ip发生改变)时,要求用户重新登录
- 养成好的习惯,用户退出后,及时清除session信息
其他登录策略
- 多因素策略
提示:多因素策略一般根据项目类型来定
暴力破解
- 说明:理论来说,是密码就一定可以通过多次尝试来进行破译,这种称为暴力破解。
- 提示:暴力破解一般使用密码字典结合自动化程序来实施。
- 防护:
权限安全漏洞
-
危害:容易出现越权操作(查看别人信息、删除他人的信息、查看核心数据)
-
分类
提示:权限漏洞主要验证垂直权限(基于用户角色设置权限),水平权限暂时无法验证
- 越权示例:
张三删除李四的留言信息
- 防护
服务端在执行操作之前,需要验证权限。
应用服务器安全
- 安全漏洞分类
1、SQL注入(项目数据库)
2、文件上传(针对应用服务器代码)
SQL注入
- 说明:sql注入,顾名思义就是通过页面输入sql语句,达到特定的目的
- 危害:数据库丢失,意味攻击者可以用任何人的账号进行违规操作
- 原理:
- 攻击步骤
1、在页面输入框中查找注入点
2、注入sql语句
3、通过sql语句获取项目库名、表名、字段名
4、通过Mysql数据库自己的库,获取项目库中所有的表、字段、数据
- 安全测试(sql注入),查找注入点
1、方式1:手动,在输入框中输入',看提示信息。如果提示相关sql报错信息且是语句拼接方式,说明可以sql注入
2、方式2:使用专业的工具进行扫描
- sql注入防护
1、对用户的输入数据进行校验
2、不要动态拼接SQL,使用参数化语句
3、不要使用管理员权限的数据库连接,为每个应用使用单独的权限进行数据库连接
4、不要把敏感数据直接保存到数据库中
5、应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装。
应用服务器(文件上传漏洞)
- 危害: 获取正向web项目的目录和文件(源代码暴露)
- 原理:
- 1、利用上传功能,上传恶意文件
- 2、执行恶意文件
- 3、获取项目源代码
- 防护:
数据库安全
- 安全防护策略
数据库备份和恢复
敏感数据加密
审计追踪机制
认证和权限控制
- 数据备份和恢复
数据库必须有备份,正常1天1个备份
- 敏感数据加密
用户数据在传输和存储过程都需要进行加密
- 审计追踪机制
对数据库操作,尤其是(删除、修改、新增)操作,必须有日志记录
- 认证和权限控制
不能给root权限
文件操作必须有权限控制
接口加解密
- 加解密说明
- 思考?如果要对加解密怎么做?
1、找开发拷贝加密和解密工作
2、确定工具如何使用(如何加密、如何解密)
3、明确请求示例(请求参数格式及使用)
接口-案例
- 案例
接口说明:登录接口
请求方法:POST
请求参数类型:form
url:"http://mobile-p2p-test.itheima.net/phone/member/login"
请求参数
data={
"member_name":"13012345678",
"password":"test123"
}
- 未加密解密
import requests
url="http://mobile-p2p-test.itheima.net/phone/member/login"
data={"member_name":"13012345678","password":"test123"
}
result=requests.post(url,data=data)
print(result.json())
加解密应用示例
- 步骤
1、找开发拷贝加密和解密工作
2、确定工具如何使用(如何加密、如何解密)
3、明确请求示例(请求参数格式及使用)
- 1、加解密工具
- 2、确定工具如何使用
- 3、明确请求示例
- 加解密应用示例:
import requests
from EncryptUtil import EncryptUtil
url="http://mobile-p2p-test.itheima.net/phone/member/login"
data={"member_name":"13012345678","password":"test123"
}
# 1、对请求参数进行加密
diyou =EncryptUtil.get_diyou(data)
# 2、对加密后的数据进行签名
xmdy = EncryptUtil.get_xmdy(diyou)
# 3、调用请求 参数格式("xmdy":"签名","diyou":"加密后的数据")
result=requests.post(url,data={"xmdy":xmdy,"diyou":diyou})
# 4、响应数据解密
diyou =result.json().get("diyou")
print("--" * 50)
print("解密后的数据",EncryptUtil.aes_decrypt(diyou))
- EncryptUtil.py
import base64
import hashlib
import json
import refrom Crypto.Cipher import AES# 加解密工具类
class EncryptUtil:# 发送请求时,加密密码SEND_AES_KEY = ";3jm$>/p-ED^cVz_j~.KV&V)k9jn,UAH"# 发送请求时,签名密钥SEND_SIGN_KEY = "DY34fdgsWET@#$%wg#@4fgd345sg"# 接收数据时,解密密钥RECEIVE_AES_KEY = "54Ms5bkE6UEdyrRviJ0![OR]g+i79x]k"@staticmethoddef padding_pkcs5(value):BS = AES.block_sizereturn str.encode(value + (BS - len(value) % BS) * chr(BS - len(value) % BS))# 替换空字符@staticmethoddef replace_blank(str_data):str_data = re.compile("\t|\r|\n").sub("", str_data)print("replace_blank str_data=", str_data)return str_data@staticmethoddef aes_encrypt(key, data):"""AES加密:param key: 密钥:param data: 待加密数据:return: 加密后数据"""data = base64.encodebytes(data.encode()).decode()# 替换特殊字符data = EncryptUtil.replace_blank(data)print("data=", data)# 初始化加密器aes = AES.new(key.encode(), AES.MODE_ECB)# 加密padding_value = EncryptUtil.padding_pkcs5(data)encrypt_aes = aes.encrypt(padding_value)# 用base64转成字符串形式encrypted_text = base64.encodebytes(encrypt_aes).decode()return encrypted_text@staticmethoddef aes_decrypt(key, data):"""AES解密:param key: 密钥:param data: 待解密数据:return: 解密后数据"""# 初始化加密器aes = AES.new(key.encode(), AES.MODE_ECB)# 优先逆向解密base64成bytesbase64_decrypted = base64.decodebytes(data.encode())# 执行解密decrypted_bytes = base64.decodebytes(aes.decrypt(base64_decrypted))# 转换为字符串decrypted_text = str(decrypted_bytes, encoding="utf-8")# 把Unicode转成中文result = decrypted_text.encode().decode("unicode_escape")return result@staticmethoddef md5value(data):print("md5value data=", data)md5 = hashlib.md5()md5.update(data.encode())return md5.hexdigest()# 加密调用@staticmethoddef get_diyou(data):# 把字典转换为JSON字符串if isinstance(data, dict):data = json.dumps(data)aes_encrypt_data = EncryptUtil.aes_encrypt(EncryptUtil.SEND_AES_KEY, data)return EncryptUtil.replace_blank(aes_encrypt_data)# 签名调用@staticmethoddef get_xmdy(data):return EncryptUtil.md5value(EncryptUtil.SEND_SIGN_KEY + EncryptUtil.replace_blank(data) + EncryptUtil.SEND_SIGN_KEY)# 解密调用@staticmethoddef decrypt_data(data):return EncryptUtil.aes_decrypt(EncryptUtil.RECEIVE_AES_KEY, data)if __name__ == '__main__':# 加密send_data = {}content = json.dumps(send_data)diyou = EncryptUtil.get_diyou(content)print("diyou=", diyou)xmdy = EncryptUtil.get_xmdy(diyou)print("xmdy=", xmdy)
加密解密标准
- 说明:加密标准常用美国联邦政府高级密码标准(AES)
- 安装:
pip install pycryptodome==3.9.6 -i https://pypi.douban.com/simple
-
提示:拿到工具如果报错提示缺少库,需要跟开发确定安装的依赖库。
相关文章:

安全测试理论
安全测试理论 什么是安全测试? 安全测试:发现系统安全隐患的过程安全测试与传统测试区别 传统测试:发现bug为目的 安全测试:发现系统安全隐患什么是渗透测试 渗透测试:已成功入侵系统为目标的的攻击过程渗透测试与安全…...

序列化和反序列化
面试题:对序列化和反序列化的理解? 我们之所以需要序列化,它核心的目的是为了解决网络通信之间的对象传输的问题,也就是说,如何把当前JVM进程的一个对象,通过跨网络传输到另一个JVM进程里面,而序…...

OpenCV中使用Canny算法在图像中查找边缘
操作系统:ubuntu22.04OpenCV版本:OpenCV4.9IDE:Visual Studio Code编程语言:C11 算法描述 Canny算法是一种广泛应用于计算机视觉和图像处理领域中的边缘检测算法。它由John F. Canny在1986年提出,旨在寻找给定噪声条件下的最佳边…...

基于springboot+vue+uniapp的机电公司管理信息系统
开发语言:Java框架:springbootuniappJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包&#…...

电子期刊制作实战教程:从零开始制作
随着互联网的普及,电子期刊已经成为了信息传递的重要载体。它以便捷、环保、互动性强等特点受到了越来越多人的青睐。那么,如何从零开始制作一份吸引人的电子期刊呢? 1.要制作电子杂志,首先需要选择一款适合自己的软件。比如FLBOOK在线制作…...

11.FreeRTOS_事件组
事件组概述 事件组的作用: 可以等待某一个事件发生可以等待若干个事件发生可以等待若干个事件中的某一个事件发生 同步点是事件组的另一个使用方式,它可以让多个任务进行阻塞等待,当全部事件完成后,再一起解除任务的阻塞。常常…...

Python爬虫-爬取三国演义文本数据-bs4
bs4进行数据解析 -数据解析的原理: - 1.标签定位 -2.提取标签、标签属性中存储的数据值 - bs4数据解析的原理: - 1.实例化一个BeautifulSoup对象,并且将页面源码数据加载到该对象中 -2.通过调用BeautifulSoup对象中相关的属性或者方法进行标签定位和数据提取 - 环境安装: - pi…...

html5——列表、表格
目录 列表 无序列表 有序列表 自定义列表 表格 基本结构 示例 表格的跨列 表格的跨行 列表 无序列表 <ul>【声明无序列表】 <li>河间驴肉火烧</li>【声明列表项】 <li>唐山棋子烧饼</li> <li>邯郸豆沫</li> <l…...

【Python字符串攻略】:玩转文字,编织程序的叙事艺术
文章目录 🚀一.字符串基础🌈二.查看数据类型⭐三.转化❤️四.字符串索引🚲五.字符串切片🎬六.字符串切片-步长☔七.反向切片注意事项🚲八.字符串💥查💥改💥删 ❤️九.字符串拼接&…...

element form表单中密码框被自动赋值,并默认背景色为白色,手动输值后背景色才是自己配置的背景色,与表单的自动填充有关
事件背景: 一个表单,有两组需要输入密码的地方,两组都被填充用户名密码,其中一组是其他信息,不是用户名密码,也被填充了,且input背景色是白色,表单中的input已经手动配置为无背景色&…...

【UE5.1 角色练习】15-枪械射击——子弹发射物
目录 效果 步骤 一、创建并发射子弹 二、优化子弹 效果 步骤 一、创建并发射子弹 1. 在前面的文章中(【UE5.1 角色练习】06-角色发射火球-part1)我们创建了蓝图“BP_Skill_FireBall” 这里我们复制一份命名为“BP_Ammo_5mm”,用于表示…...

Zynq7000系列FPGA中的DMA控制器的编程限制
有关DMAC编程时适用的限制信息,有四个考虑因素: 固定非对齐突发Endian swap size restrictions:在数据传输或处理过程中,不同字节序(Endian)之间的转换和对应的限制在DMA周期内更新通道控制寄存器当MFIFO满…...

超简易高效的 AI绘图工具—与sd-webui一致界面,6G显存最高提升75%出图速率!(附安装包)
大家好,我是灵魂画师向阳 今天给大家分享一个基于Stable Diffusion WebUI 构建的AI绘图工具—sd-webui-forge,该工具的目标在于简化插件开发,优化资源管理,加速推理。 Forge承诺永远不会对Stable Diffusion WebUI用户界面添加不…...

ArduPilot开源代码之OpticalFlow_backend
ArduPilot开源代码之OpticalFlow_backend 1. 源由2. Library设计3. 重要例程3.1 OpticalFlow_backend::_update_frontend3.2 OpticalFlow_backend::_applyYaw 4. 总结5. 参考资料 1. 源由 光流计是一种低成本定位传感器,所有的光流计设备传感驱动代码抽象公共部分统…...

设计模式探索:适配器模式
1. 适配器模式介绍 1.1 适配器模式介绍 适配器模式(adapter pattern)的原始定义是:将一个类的接口转换为客户期望的另一个接口,适配器可以让不兼容的两个类一起协同工作。 适配器模式的主要作用是把原本不兼容的接口,…...

OpenCV 寻找棋盘格角点及绘制
目录 一、概念 二、代码 2.1实现步骤 2.2完整代码 三、实现效果 一、概念 寻找棋盘格角点(Checkerboard Corners)是计算机视觉中相机标定(Camera Calibration)过程的重要步骤。 OpenCV 提供了函数 cv2.findChessboardCorners…...

【深度学习】PyTorch深度学习笔记02-线性模型
1. 监督学习 2. 数据集的划分 3. 平均平方误差MSE 4. 线性模型Linear Model - y x * w 用穷举法确定线性模型的参数 import numpy as np import matplotlib.pyplot as pltx_data [1.0, 2.0, 3.0] y_data [2.0, 4.0, 6.0]def forward(x):return x * wdef loss(x, y):y_pred…...

10.FreeRTOS_互斥量
互斥量概述 在博文“ FreeRTOS_信号量 ”中,使用了二进制信号量实现了互斥,保护了串口资源。博文链接如下: FreeRTOS_信号量-CSDN博客 但还是要引入互斥量的概念。互斥量与二进制信号量相比,能够多实现如下两个功能:…...

EtherCAT总线冗余让制造更安全更可靠更智能
冗余定义 什么是总线冗余功能?我们都知道,EtherCAT现场总线具有灵活的拓扑结构,设备间支持线型、星型、树型的连接方式,其中线型结构简单、传输效率高,大多数的现场应用中也是使用这种连接方式,如下图所示…...

Android IdleHandler源码分析
文章目录 Android IdleHandler源码分析概述前提基本用法源码分析添加和删除任务执行任务 应用场景 Android IdleHandler源码分析 概述 IdleHandler是一个接口,它定义在MessageQueue类中,用于在主线程的消息队列空闲时执行一些轻量级的任务。IdleHandle…...

Mac安装stable diffusion 工具
文章目录 1.安装 Homebrew2.安装 stable diffusion webui 的依赖3.下载 stable diffusion webui 代码4.启动 stable diffusion webui 本体5.下载模型6.这里可能会遇到一个clip-vit-large-patch14报错 参考:https://brew.idayer.com/install/stable-diffusion-webui/…...

CVE-2024-6387Open SSH漏洞彻底解决举措(含踩坑内容)
一、漏洞名称 OpenSSH 远程代码执行漏洞(CVE-2024-6387) 二、漏洞概述 Open SSH是基于SSH协议的安全网络通信工具,广泛应用于远程服务器管理、加密文件传输、端口转发、远程控制等多个领域。近日被爆出存在一个远程代码执行漏洞,由于Open SSH服务器端…...

python的简单爬取
需要的第三方模块 requests winr打开命令行输入cmd 简单爬取的基本格式(爬取百度logo为例) import requests url"http://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png" resprequests.get(url)#回应 #保存到本地 with open(&…...

【WEB前端2024】3D智体编程:乔布斯3D纪念馆-第60集-agent训练资讯APP重点推荐AI资讯内容(含视频)
【WEB前端2024】3D智体编程:乔布斯3D纪念馆-第60集-agent训练资讯APP重点推荐AI资讯内容(含视频) 使用dtns.network德塔世界(开源的智体世界引擎),策划和设计《乔布斯超大型的开源3D纪念馆》的系列教程。d…...

【学术会议征稿】第三届智能电网与能源系统国际学术会议
第三届智能电网与能源系统国际学术会议 2024 3rd International Conference on Smart Grid and Energy Systems 第三届智能电网与能源系统国际学术会议(SGES 2024)将于2024年10月25日-27日在郑州召开。 智能电网可以优化能源布局,让现有能源…...

01. 课程简介
1. 课程简介 本课程的核心内容可以分为三个部分,分别是需要理解记忆的计算机底层基础,后端通用组件以及需要不断编码练习的数据结构和算法。 计算机底层基础可以包含计算机网络、操作系统、编译原理、计算机组成原理,后两者在面试中出现的频…...

iOS热门面试题(三)
面试题1:在iOS开发中,什么是MVC设计模式?请详细解释其各个组成部分,并给出一个实际应用场景,包括具体的代码实现。 答案: MVC设计模式是一种在软件开发中广泛使用的架构模式,特别是在iOS开发中…...

ECS中postTransform.Value = float4x4.Scale(1, math.sin(elapsedTime), 1)
在Unity的ECS(Entity Component System)架构中,postTransform.Value float4x4.Scale(1, math.sin(elapsedTime), 1); 用于设置一个变换矩阵的缩放部分。下面是对这行代码的详细解释: postTransform: 这是一个表示变换的组件或结构…...

VLM技术介绍
1、背景 视觉语言模型(Visual Language Models)是可以同时从图像和文本中学习以处理许多任务的模型,从视觉问答到图像字幕。 视觉识别(如图像分类、物体保护和语义分割)是计算机视觉研究中一个长期存在的难题ÿ…...

x264 编码器 AArch64 汇编函数模块关系分析
x264 编码器 AArch64 汇编介绍 x264 是一个流行的开源视频编码器,它实现了 H.264/MPEG-4 AVC 标准。x264 项目致力于提供一个高性能、高质量的编码器,支持多种平台和架构。对于 AArch64(即 64 位 ARM 架构),x264 编码器利用该架构的特性来优化编码过程。在 x264 编码器中,…...