安全测试理论

安全测试理论

  • 什么是安全测试?

    安全测试:发现系统安全隐患的过程
    
  • 安全测试与传统测试区别

    传统测试:发现bug为目的
    安全测试:发现系统安全隐患
    
  • 什么是渗透测试

    渗透测试:已成功入侵系统为目标的的攻击过程
    
  • 渗透测试与安全测测似区别

    渗透测试:攻击
    安全测试:防护
    
  • 如何进行安全测试(安全测试常用方法)

    1、代码走读:检查代码是否有安全隐患
    2、动态渗透
    3、扫描程序缓存问题
    
  • 安全测试方面(维度)

image-20240708085105455

客户端安全

  • 常见分类

    XSS:跨站脚本攻击
    CSRF:跨站请求伪造
    

XSS

  • 什么是XSS

    跨站脚本(cross site script)为了避免与前端css混淆,改名为xss

    攻击者通过改变前端页面元素请求地址或注入JS,来获取非法数据(cookie)。
    
  • XSS攻击原理

image-20240709083833760

  • XSS可用攻击页面标签

    image-20240709083942138

  • 攻击方式分类

    • 存储型:将攻击代码存储到数据库,每次打开指定的页面自动加载执行。

      场景:留言板、注册
      
    • 反射性:临时修改页面代码,用户打开页面中招。

      场景:图片、连接
      
  • 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)是指跨站请求伪造攻击
  • 目的

image-20240709090756086

  • 原理

image-20240709090829295

  • 攻击操作步骤
1、获取删除或修改网站数据的接口
2、在黑客网站上生成一个删除或修改链接(领取优惠券)
3、黑客在要攻击的网站上生成一个跳转到黑客网站的链接(优惠活动)
4、用户在黑客网站上领取优惠券
  • 测试CSRF步骤
检查项目是否对请求头->HTTP Referer做校验。后台判断是操作请求来源只能是自己的网站。
  • 防御

image-20240709222528072

HTTP Referer:请求头来源的显示,从哪个点击链接访问,会记录链接访问的地址。

网络安全

协议加密
数据加密
数据签名
DOS攻击
  • 协议加密:常用HTTPS协议(基于HTTP协议之上进行加密传输和证书策略)
1、数据完整性
2、数据保密性
3、安全校验
  • 数据加密
数据加密:md5/AES/DES/自定义
  • 数据签名
特点:对请求数据生成一个无法伪造的字符串,发送给服务器。

image-20240709222913702

  • Dos攻击

image-20240709222936183

目的:让目标计算机或网络无法提供正常的服务或资源访问,使目标系统停止响应甚至崩溃。

image-20240709223042073

防御:
1、请求添加访问时间戳,服务器进行判断是否在有效期内,如果在处理,否则不处理。
2、指定时间内控制请求参数(百度->1秒之内3次)
3、流量限制(验证码->越模糊越好)

用户安全策略

密码登录:①:session②:token
其他登录
  • 密码

image-20240710083713939

提示:
1、密码纯6位数字,有10**6
2、密码纯8位数字,有10**8
  • session

    • 说明:密码登录成功后,服务器可以生成session|token|cookie等认证方式来进行后续认证处理。
    • 特点:session:一次会话(会话结束session关闭)
    • 危害:如果在session会话有效期内,session被盗取,那么后果是很可怕的(相当于账号密码泄露)
    • 防护策略:
      • 在一定时间后后台关闭session
      • 相同用户只能生成1个对象
      • 当用户客户端发生变化(浏览器、ip发生改变)时,要求用户重新登录
      • 养成好的习惯,用户退出后,及时清除session信息

其他登录策略

  • 多因素策略

image-20240710084744870

提示:多因素策略一般根据项目类型来定

暴力破解

  • 说明:理论来说,是密码就一定可以通过多次尝试来进行破译,这种称为暴力破解。
  • 提示:暴力破解一般使用密码字典结合自动化程序来实施。
  • 防护:

image-20240710085033915

权限安全漏洞

  • 危害:容易出现越权操作(查看别人信息、删除他人的信息、查看核心数据)

  • 分类

image-20240712081548715

提示:权限漏洞主要验证垂直权限(基于用户角色设置权限),水平权限暂时无法验证
  • 越权示例:
张三删除李四的留言信息
  • 防护
服务端在执行操作之前,需要验证权限。

应用服务器安全

  • 安全漏洞分类
1、SQL注入(项目数据库)
2、文件上传(针对应用服务器代码)

SQL注入

  • 说明:sql注入,顾名思义就是通过页面输入sql语句,达到特定的目的
  • 危害:数据库丢失,意味攻击者可以用任何人的账号进行违规操作
  • 原理:

image-20240712082751831

  • 攻击步骤
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、获取项目源代码
  • 防护:

image-20240712083924527

数据库安全

  • 安全防护策略
数据库备份和恢复
敏感数据加密
审计追踪机制
认证和权限控制
  • 数据备份和恢复
数据库必须有备份,正常1天1个备份
  • 敏感数据加密
用户数据在传输和存储过程都需要进行加密
  • 审计追踪机制
对数据库操作,尤其是(删除、修改、新增)操作,必须有日志记录
  • 认证和权限控制
不能给root权限
文件操作必须有权限控制

接口加解密

  • 加解密说明

image-20240713171205814

  • 思考?如果要对加解密怎么做?
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())

image-20240713173342338

加解密应用示例

  • 步骤
1、找开发拷贝加密和解密工作
2、确定工具如何使用(如何加密、如何解密)
3、明确请求示例(请求参数格式及使用)
  • 1、加解密工具

image-20240713173718648

  • 2、确定工具如何使用

image-20240713173748732

  • 3、明确请求示例

image-20240713173812512

  • 加解密应用示例:
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
  • 提示:拿到工具如果报错提示缺少库,需要跟开发确定安装的依赖库。

    image-20240713175555799

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/45822.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

“好物”推荐+Xshell连接实例+使用Conda创建独立的Python环境

目录 主题&#xff1a;好易智算平台推荐RTX 4090DGPU实例租用演示安装配置torch1.9.1cuda11.1.1环境引言&#xff1a;算力的新时代平台介绍&#xff1a;技术与信任的结晶使用案例&#xff1a;实际使用展示创建实例开始使用连接实例&#xff08;下文演示使用Xshell连接&#xff…

昇思25天学习打卡营第二十天|基于MobileNetv2的垃圾分类

打卡营第二十天&#xff0c;今天学习的内容是MobileNet垃圾分类&#xff0c;记录一下学习内容&#xff1a; 学习内容 本文档主要介绍垃圾分类代码开发的方法。通过读取本地图像数据作为输入&#xff0c;对图像中的垃圾物体进行检测&#xff0c;并且将检测结果图片保存到文件中…

【ARM】CCI集成指导整理

目录 1.CCI集成流程 2.CCI功能集成指导 2.1CCI结构框图解释 Request concentrator Transaction tracker Read-data Network Write-data Network B-response Network 2.2 接口注意项 记录一下CCI500的ACE slave interface不支持的功能&#xff1a; 对于ACE-Lite slav…

基于信号处理的PPG信号滤波降噪方法(MATLAB)

光电容积脉搏波PPG信号结合相关算法可以用于人体生理参数检测&#xff0c;如血压、血氧饱和度等&#xff0c;但采集过程中极易受到噪声干扰&#xff0c;对于血压、血氧饱和度测量的准确性造成影响。随着当今社会医疗保健技术的发展&#xff0c;可穿戴监测设备对于PPG信号的质量…

简单的SQL字符型注入

目录 注入类型 判断字段数 确定回显点 查找数据库名 查找数据库表名 查询字段名 获取想要的数据 以sqli-labs靶场上的简单SQL注入为例 注入类型 判断是数字类型还是字符类型 常见的闭合方式 ?id1、?id1"、?id1)、?id1")等&#xff0c;大多都是单引号…

【ASTGCN】模型调试学习笔记--数据生成详解(超详细)

利用滑动窗口生成时间序列 原理图示&#xff1a; 以PEMS04数据集为例。 该数据集维度为&#xff1a;(16992,307,3)&#xff0c;16992表示时间序列的长度&#xff0c;307为探测器个数&#xff0c;即图的顶点个数&#xff0c;3为特征数&#xff0c;即流量&#xff0c;速度、平…

期权专题12:期权保证金和期权盈亏

目录 1. 期权保证金 1.1 计算逻辑 1.2 代码复现 1.3 实际案例 2. 期权盈亏 2.1 价格走势 2.2 计算公式 2.2.1 卖出期权 2.2.2 买入期权 免责声明&#xff1a;本文由作者参考相关资料&#xff0c;并结合自身实践和思考独立完成&#xff0c;对全文内容的准确性、完整性或…

[CISCN 2023 华北]normal_snake

[CISCN 2023 华北]normal_snake 源码和依赖 算了直接说吧&#xff0c;不想截图了&#xff0c;就多了一个C3P0和yaml的依赖 然后read路由可以反序列化yaml的Str 我们看到waf 那个String是可以二次反序列化绕过的,然后CUSTOM_STRING1解码后是"BadAttributeValuePairExcept…

【java】力扣 反转链表

力扣 206 链表反转 题目介绍 解法讲解 先定义两个游标indexnull&#xff0c;prenull&#xff0c;反转之后链表应该是5&#xff0c;4&#xff0c;3&#xff0c;2&#xff0c;1&#xff0c;我们先进行2->1的反转&#xff0c;然后再循坏即可 让定义的游标index去存储head.n…

MySQL设置白名单限制

白名单&#xff08;Whitelist&#xff09;是一种机制&#xff0c;用于限制哪些主机可以连接到服务器&#xff0c;而阻止其他主机的访问。通过配置白名单&#xff0c;可以增加服务器的安全性&#xff0c;防止未授权的访问。 在MySQL数据库中直接设置白名单访问&#xff08;即限制…

【触摸屏】【地震知识宣传系统】功能模块:视频 + 知识问答

项目背景 鉴于地震知识的普及对于提升公众防灾减灾意识的重要性&#xff0c;客户希望开发一套互动性强、易于理解的地震学习系统&#xff0c;面向公众、学生及专业人员进行地震知识教育与应急技能培训。 产品功能 系统风格&#xff1a;严谨的设计风格和准确的信息呈现&#…

红酒的艺术之旅:品味、鉴赏与生活的整合

在繁忙的都市生活中&#xff0c;红酒如同一道不同的风景线&#xff0c;将品味、鉴赏与日常生活巧妙地整合在一起。它不仅仅是一种饮品&#xff0c;更是一种艺术&#xff0c;一种生活的态度。今天&#xff0c;就让我们一起踏上这趟红酒的艺术之旅&#xff0c;探寻雷盛红酒如何以…

【qt】如何读取文件并拆分信息?

需要用到QTextStream类 还有QFile类 对于文件的读取操作我们可以统一记下如下操作: 就这三板斧 获取到文件名用文件名初始化文件对象用文件对象初始化文本流 接下来就是打开文件了 用open()来打开文件 用readLine()来读取行数据 用atEnd()来判断是否读到结尾 用split()来获取…

02. Hibernate 初体验之持久化对象

1. 前言 本节课程让我们一起体验 Hibernate 的魅力&#xff01;编写第一个基于 Hibernate 的实例程序。 在本节课程中&#xff0c;你将学到 &#xff1a; Hibernate 的版本发展史&#xff1b;持久化对象的特点。 为了更好地讲解这个内容&#xff0c;这个初体验案例分上下 2…

go-高效处理应用程序数据

一、背景 大型的应用程序为了后期的排障、运营等&#xff0c;会将一些请求、日志、性能指标等数据保存到存储系统中。为了满足这些需求&#xff0c;我们需要进行数据采集&#xff0c;将数据高效的传输到存储系统 二、问题 采集服务仅仅针对某个需求开发&#xff0c;需要修改…

防火墙小试——部分(书接上回)

toop接上回 1.实验拓扑及要求 前情回顾 DMZ区内的服务器&#xff0c;办公区仅能在办公时间内&#xff08;9&#xff1a;00 - 18&#xff1a;00&#xff09;可以访问&#xff0c;生产区的设备全天可以访问. 生产区不允许访问互联网&#xff0c;办公区和游客区允许访问互联网 …

C#统一委托Func与Action

C#在System命名空间下提供两个委托Action和Func&#xff0c;这两个委托最多提供16个参数&#xff0c;基本上可以满足所有自定义事件所需的委托类型。几乎所有的 事件 都可以使用这两个内置的委托Action和Func进行处理。 Action委托&#xff1a; Action定义提供0~16个参数&…

使用亮数据代理IP+Python爬虫批量爬取招聘信息训练面试类AI智能体

本文目录 一、引言二、开发准备三、代码开发四、使用亮数据进行高效爬取4.1 为什么需要亮数据4.2 如何使用亮数据 五、使用数据训练AI智能体六、 总结 一、引言 在当今AI迅速发展的时代&#xff0c;招聘市场正经历着前所未有的变革。传统的招聘方式已难以满足双方的需求。AI智…

canvas快速入门(一)canvas的基础使用

注释很详细&#xff0c;直接上代码 新增内容&#xff1a; 1. canvas的两种创建方式及优劣 2. canvas宽高设置及注意事项 3. 简单测例 项目结构&#xff1a; 源码&#xff1a; index.html <!DOCTYPE html> <html lang"en"> <head><meta charset…

先天睡功-守一老师

描述 守一老师&#xff0c;一个富有才华的老师&#xff01; 对于大家的学习有不可多得的帮助。 内容 目前主要的内容以睡觉为主&#xff0c;对于学习睡睡觉有比较大的帮助&#xff01; 但是网络上面错综复杂&#xff0c;很多老旧的版本影响学习&#xff01; 而这里我整理了…