安全测试理论

news2024/11/14 13:36:18

安全测试理论

  • 什么是安全测试?

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

    传统测试:发现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 re

from 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"

    @staticmethod
    def padding_pkcs5(value):
        BS = AES.block_size
        return str.encode(value + (BS - len(value) % BS) * chr(BS - len(value) % BS))

    # 替换空字符
    @staticmethod
    def replace_blank(str_data):
        str_data = re.compile("\t|\r|\n").sub("", str_data)
        print("replace_blank str_data=", str_data)
        return str_data

    @staticmethod
    def 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

    @staticmethod
    def aes_decrypt(key, data):
        """
        AES解密
        :param key: 密钥
        :param data: 待解密数据
        :return: 解密后数据
        """
        # 初始化加密器
        aes = AES.new(key.encode(), AES.MODE_ECB)
        # 优先逆向解密base64成bytes
        base64_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

    @staticmethod
    def md5value(data):
        print("md5value data=", data)
        md5 = hashlib.md5()
        md5.update(data.encode())
        return md5.hexdigest()

    # 加密调用
    @staticmethod
    def 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)

    # 签名调用
    @staticmethod
    def get_xmdy(data):
        return EncryptUtil.md5value(
            EncryptUtil.SEND_SIGN_KEY + EncryptUtil.replace_blank(data) + EncryptUtil.SEND_SIGN_KEY)

    # 解密调用
    @staticmethod
    def 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.coloradmin.cn/o/1925824.html

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

相关文章

自动驾驶事故频发,安全痛点在哪里?

大数据产业创新服务媒体 ——聚焦数据 改变商业 近日&#xff0c;武汉城市留言板上出现了多条关于萝卜快跑的投诉&#xff0c;多名市民反映萝卜快跑出现无故停在马路中间、高架上占最左道低速行驶、转弯卡着不动等情况&#xff0c;导致早晚高峰时段出现拥堵。萝卜快跑是百度 A…

配置与管理Samba服务器(详细教程)

目录 一、基础理论 二、samba工作流程 三、项目实训 3.1目的 3.2准备工作 3.2.1服务器安装samba服务软件包 3.2.2客户端安装软件包 3.3配置Samba服务 3.3.1开启Samba服务&#xff0c;并设置开启自启动 3.3.2创建共享文件夹 3.3.3创建群组 3.3.4修改文件用户权限 3.3.5修改…

LabVIEW人工模拟肺控制系统开发

开发了一种创新的主被动一体式人工模拟肺模型&#xff0c;通过LabVIEW开发的上位机软件&#xff0c;实现了步进电机驱动系统的精确控制和多种呼吸模式的模拟。该系统不仅能够在主动呼吸模式下精确模拟快速呼吸、平静呼吸和深度呼吸&#xff0c;还能在被动模式下通过PID控制实现…

训练CDN基础代码

文章目录 时间整体流程训练细节小结 时间 从开始在平台上搭建到现在可以在平台上训练已经4天了 有GPU平台一般是autoDL平台&#xff0c;白嫖200元平台是&#xff1a;https://cloud.lanyun.net/ 整体流程 1.注册平台&#xff0c;以蓝耘为例子 卡从好变坏依次是&#xff1a;…

C语言:指针详解(5)

目录 一、sizeof()函数和strlen()函数的对比 1.sizeof()函数 2.strlen()函数 3.sizeof()函数和strlen()函数的对比 二、数组和指针笔试试题解析 1.一维数组 2.字符数组 &#xff08;1&#xff09;代码1 &#xff08;2&#xff09;代码2 &#xff08;3&#xff09;代码…

【数组、特殊矩阵的压缩存储】

目录 一、数组1.1、一维数组1.1.1 、一维数组的定义方式1.1.2、一维数组的数组名 1.2、二维数组1.2.1、二维数组的定义方式1.2.2、二维数组的数组名 二、对称矩阵的压缩存储三、三角矩阵的压缩存储四、三对角矩阵的压缩存储五、稀疏矩阵的压缩存储 一、数组 概述&#xff1a;数…

香橙派AIpro:体验强劲算力,运行ROS系统

文章目录 前言一、香橙派AIpro开箱及功能介绍1.1香橙派AIpro开箱1.2香橙派AIpro功能介绍 二、香橙派AIpro资料下载及环境搭建2.1资料下载2.2环境搭建2.3使用串口启动进入开发板2.4使用HDMI线接入屏幕启动 三、部署ROS系统四、香橙派AIpro的使用和体验感受 前言 本篇文章将带体…

sip协议栈简介

SIP协议栈简介 SIP协议栈流程 数据链路层&#xff1a;当SIP消息从网络中传输到达TCP/IP协议栈时&#xff0c;首先被接收到的是数据链路层的数据帧。数据链路层会对数据帧进行解封装&#xff0c;得到网络层的IP数据报。 网络层&#xff1a;网络层会对IP数据报进行解析&#xf…

js实现 JSON数据格式化的两种方法

本次方法不使用JS库直接采用原生JS 完整HTML代码如下&#xff0c;您可以复制代码然后&#xff0c;新建一个.html的网页进行保存即可体验 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title></head><b…

Xcode 16 beta3 真机调试找不到 Apple Watch 的尝试解决

很多小伙伴们想用 Xcode 在 Apple Watch 真机上调试运行 App 时却发现&#xff1a;在 Xcode 设备管理器中压根找不到对应的 Apple Watch 设备。 大家是否已将 Apple Watch 和 Mac 都重启一万多遍了&#xff0c;还是束手无策。 Apple Watch not showing in XCodeApple Watch wo…

android13 文件管理器无法安装apk 奔溃问题

总纲 android13 rom 开发总纲说明 目录 1.前言 2.我们简单写个apk测试下 3.排查客户apk 4.frameworks源码排查 5.编译验证 6.彩蛋 1.前言 客户提供的文件管理apk不能安装apk文件,一点击就奔溃。 2.我们简单写个apk测试下 private void installApk(File apkFile) {i…

从0开始学习informer

目录 informer特点informer原理attention计算KL散度 backbone网络部分encoder输入输出部分embadding这里就不讲了 和transfomer一样EncoderStack decoder部分接下来就是最关键的结构 关于如何将输入经过注意力得到结果 结束&#xff0c;代码会放到下一篇讲 这里是原理 informer…

[Vulnhub] Sedna BuilderEngine-CMS+Kernel权限提升

信息收集 IP AddressOpening Ports192.168.8.104TCP:22, 53, 80, 110, 111, 139, 143, 445, 993, 995, 8080, 55679 $ nmap -p- 192.168.8.104 --min-rate 1000 -sC -sV PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 6.6.1p1 Ubuntu 2ubuntu2 …

PTX入门教程与实战

PTX入门教程 官方文档的目录结构 1 PTX指令 官方文档链接 1.1 指令形式 指令的操作数个数从0-4不等&#xff0c;其中d代表的是目的操作数&#xff0c;a,b,c是源操作数 p opcode;p opcode a;p opcode d, a;p opcode d, a, b;p opcode d, a, b, c;2 编程模型 2.…

人工智能算法工程师(中级)课程9-PyTorch神经网络之全连接神经网络实战与代码详解

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能算法工程师(中级)课程9-PyTorch神经网络之全连接神经网络实战与代码详解。本文将给大家展示全连接神经网络与代码详解&#xff0c;包括全连接模型的设计、数学原理介绍&#xff0c;并从手写数字识别到猫狗识…

JVM监控及诊断工具-命令行篇-jstat命令介绍

JVM监控及诊断工具-命令行篇01-jstat&#xff1a;查看JVM统计信息 一 基本情况二 基本语法2.1 option参数1. 类装载相关的&#xff1a;2. 垃圾回收相关的-gc&#xff1a;显示与GC相关的堆信息。包括Eden区、两个Survivor区、老年代、永久代等的容量、已用空间、GC时间合计等信息…

基于51单片机的多路报警器Protues仿真设计

一、设计背景 随着社会的发展和技术的进步&#xff0c;安全问题越来越受到重视。各种工业设施、家庭、商业场所以及公共场所的安全保障成为了重点。报警器作为安全防护系统的重要组成部分&#xff0c;在预防和及时应对各种突发事件中发挥着至关重要的作用。传统的报警器通常在功…

【C++】哈希(散列)表

目录 一、哈希表的基本概念1.哈希的概念2.哈希冲突2.1 哈希函数2.2 哈希冲突的解决办法2.2.1 闭散列2.2.2 开散列 二、哈希表的实现1.闭散列的实现1.1 闭散列的结构1.2 闭散列的插入1.3 闭散列的删除1.4 闭散列的查找 2.开散列的实现2.1 key值不能取模的情况2.2 开散列的结构2.…

Redis的安装配置及IDEA中使用

目录 一、安装redis&#xff0c;配置redis.conf 1.安装gcc 2.将redis的压缩包放到指定位置解压 [如下面放在 /opt 目录下] 3.编译安装 4.配置redis.conf文件 5.开机自启 二、解决虚拟机本地可以连接redis但是主机不能连接redis 1.虚拟机网络适配器网络连接设置为桥接模式…

STM32智能空气质量监测系统教程

目录 引言环境准备智能空气质量监测系统基础代码实现&#xff1a;实现智能空气质量监测系统 4.1 数据采集模块 4.2 数据处理与控制模块 4.3 通信与网络系统实现 4.4 用户界面与数据可视化应用场景&#xff1a;空气质量监测与优化问题解决方案与优化收尾与总结 1. 引言 智能空…