什么是web安全测试

article/2025/10/2 6:39:18

1.1什么是web安全测试?

Web安全测试就是要提供证据表明,在面对敌意和恶意输入的时候,web系统应用仍然能够充分地满足它的需求

1.2为什么进行Web安全测试

2005年06月,CardSystems,黑客恶意侵入了它的电脑系统,窃取了4000万张信用卡的资料。

2011年12月,国内最大的开发者社区CSDN被黑客在互联网上公布了600万注册用户的数据;黑客随后陆续公布了网易、人人、天涯、猫扑等多家大型网站的数据信息。

2014年12月,大量12306用户数据被泄露,被泄露的数据达131653条,包括用户账号、明文密码、身份证和邮箱等多种信息。

2018年03月,Facebook泄露数千万用户的数据,信息被违规滥用,导致股价一度下跌;12月再次因一个软件漏洞导致用户的私人照片遭泄露。

目前web应用越来越广泛,web安全威胁也就更明显,而web攻击隐蔽性强,危害性大。因而web安全测试也就显得尤为必要了。

1.3web安全的认识误区
lWeb网站使用了防火墙,所以很安全
lWeb网站使用了IDS,所以很安全
lWeb网站使用了SSL加密,所以很安全
l漏洞扫描工具没发现任何问题,所以很安全
l我们每季度都会聘用安全人员进行审计,所以很安全

2:web攻击的主要类型
跨站脚本(XSS)攻击
SQL注入
XML注入
目录遍历
上传漏洞攻击
下载漏洞攻击
信息泄露
访问控制错误

2.1跨站脚本(XSS)攻击
XSS又叫CSS(CrossSiteScript),跨站脚本攻击。它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意用户的特殊目的。
盗取Cookie
钓鱼
操纵受害者的浏览器
蠕虫攻击

反射型跨站(reflected xss)
服务端获取HTTP请求中的参数,未经过滤直接输出到客户端。如果这些参数是脚本,它将在客户端执行。(钓鱼常见)

存储型跨站(Sstored xss)
用户输入的数据存放在服务端(一般放数据库里),其他用户访问某个页面时,这些数据未经过滤直接输出。这些数据可能是恶意脚本,对其他用户造成危害。(挂马常见)

mom跨站(DOM-Based XSS)
攻击者提交的恶意数据并未显式的包含在web服务器的响应页面中,但会被页面中的js脚本以变量的形式来访问到,导致浏览器在渲染页面执行js脚本的过程中,通过DOM操作执行了变量所代表的恶意脚本。

跨站请求伪造(csrf)
强迫受害者的浏览器向一个易受攻击的Web应用程序发送请求,最后达到攻击者所需要的操作行为。恶意请求会带上浏览器的Cookie。受攻击的Web应用信任浏览器的Cookie

2.2 sql注入

将SQL命令人为的输入到URL、表格域、或者其他动态生成的SQL查询语句的输入参数中,完成SQL攻击。在这里插入图片描述
查询数据库中的敏感内容
绕过认证
添加、删除、修改数据
拒绝服务

典型例子:
原URL:http://localhost/name?nameid=222
攻击SQL注入:http://localhost/name?nameid=‘’or1=1
注入点一般存在以下几个地方:
在这里插入图片描述
2.3XML注入
和SQL注入原理一样,XML是存储数据的地方,如果在查询或修改时,如果没有做转义,直接输入或输出数据,都将导致XML注入漏洞。攻击者可以修改XML数据格式,增加新的XML节点,对数据处理流程产生影响。
在这里插入图片描述
2.4目录遍历
目录遍历攻击指的是:恶意用户找到受限文件的位置并且浏览或者执行它们。
攻击者浏览受限文件,比如读取配置文件、密码文件等,就会破坏隐私,甚至引发安全问题。而如执行了受限的文件,攻击者就可以根据自己的意愿来控制和修改web站点在这里插入图片描述
2.5上传文件

Web应用程序在处理用户上传的文件时,没有判断文件的扩展名是否在允许的范围内,或者没检测文件内容的合法性,就把文件保存在服务器上,甚至上传脚本木马到web服务器上,直接控制web服务器。
未限制扩展名
未检查文件内容
病毒文件

2.6任意文件下载
Web应用程序提供下载文件的路径时,文件的路径用户可控且未校验或校验不严,攻击者通过”…/”字符来遍历高层目录,并且尝试找到系统的配置文件或者系统中存在的敏感文件。
下载任意附件
下载数据库配置文件等

2.7消息泄露
Web应用程序在处理用户错误请求时,程序在抛出异常的时候给出了比较详细的内部错误信息,而暴露了不应该显示的执行细节,如文件路径、数据库信息、中间件信息、IP地址等

2.8访问控制错误
系统没有对URL的访问作出限制或者系统已经对URL的访问做了限制,但这种限制却实际并没有生效。攻击者能够很容易的就伪造请求直接访问未被授权的页面。
例如,通过一个参数表示用户通过了认证:
http://www.example.com/userinfo.jsp?authenticated=no 通过修改authenticated参数为Yes:
http://www.example.com/userinfo.jsp?authenticated=yes

3.1web安全测评要求
信息系统的安全保护等级分为五级,一至五级等级越高,约束越严格。以二级为例,应用安全测评要求(二级)为:身份鉴别、访问控制、安全审计、通信完整性、通信保密性、软件容错、资源控制;
在这里插入图片描述
3.2web安全测试方法
手动测试(结合测评要求)
自动测试
混合测试在这里插入图片描述
手动测试 :
1.不登录系统,直接输入登录后的页面的url是否可以访问
2.不登录系统,直接输入下载文件的url是否可以下载,如输入http://url/download?name=file是否可以下载文件file
3.退出登录后按后退按钮能否访问之前的页面
4.ID/密码验证方式中能否使用简单密码。如密码标准为6位以上,字母和数字混合,不能包含ID,连续的字母或数字不能
超过n位
5.重要信息(如密码,身份证号码,信用卡号等)在输入或查询时是否用明文显示;在浏览器地址栏里输入命令
javascrīpt:alert(doucument.cookie)时是否有重要信息;在html源码中能否看到重要信息
6.手动更改URL中的参数值能否访问没有权限访问的页面。如普通用户对应的url中的参数为l=e,高级用户对应的url中的参
数为l=s,以普通用户的身份登录系统后将url中的参数e改为s来访问本没有权限访问的页面
7.url里不可修改的参数是否可以被修改
8.上传与服务器端语言(jsp、asp、php)一样扩展名的文件或exe等可执行文件后,确认在服务器端是否可直接运行
9.注册用户时是否可以以’–,‘or1=1–等做为用户名
10.传送给服务器的参数(如查询关键字、url中的参数等)中包含特殊字符(’,'and1=1–,'and1=0–,'or1=0–)时是否可
以正常处理
11.执行新增操作时,在所有的输入框中输入脚本标签(<scrīpt>alert("")< scrīpt><="" font="">)后能否保存
12.在url中输入下面的地址是否可以下载:
http://url/download.jsp?file=C:\windows\system32\drivers\etc\hosts,http://url/download.jsp?file=/etc/passwd
13.是否对session的有效期进行处理
14.错误信息中是否含有sql语句、sql错误信息以及web服务器的绝对路径等
15.ID/密码验证方式中,同一个账号在不同的机器上不能同时登录
16.ID/密码验证方式中,连续数次输入错误密码后该账户是否被锁定
17.新增或修改重要信息(密码、身份证号码、信用卡号等)时是否有自动完成功能(在form标签中使用autocomplete=off
来关闭自动完成功能

3.3工具的使用
AWVS
WebInspect
AppScan

AppScan原理
通过搜索(爬行)发现整个Web应用结构
根据分析,发送修改的HTTPRequest进行攻击尝试(扫描规则库)
通过对于Respone的分析验证是否存在安全漏
在这里插入图片描述


http://chatgpt.dhexx.cn/article/1iiG1k7a.shtml

相关文章

web安全测试内容

一. 首先你得了解Web Web分为好几层&#xff0c;一图胜千言&#xff1a; 事实是这样的&#xff1a; 如果你不了解这些研究对象是不可能搞好安全研究的。 这样看来&#xff0c;Web有八层&#xff08;如果把浏览器也算进去&#xff0c;就九层啦&#xff0c;九阳神功……&#xff…

解决报错RuntimeError: set_sizes_and_strides is not allowed on a Tensor created from .data or .detach().

完整报错信息如下 RuntimeError: set_sizes_and_strides is not allowed on a Tensor created from .data or .detach(). If your intent is to change the metadata of a Tensor (such as sizes / strides / storage / storage_offset) without autograd tracking the change…

基于keras的卷积神经网络(CNN)

1 前言 本文以MNIST手写数字分类为例&#xff0c;讲解使用一维卷积和二维卷积实现 CNN 模型。关于 MNIST 数据集的说明&#xff0c;见使用TensorFlow实现MNIST数据集分类。实验中主要用到 Conv1D 层、Conv2D 层、MaxPooling1D 层和 MaxPooling2D 层&#xff0c;其参数说明如下…

Grad strides do not match bucket view strides.This may indicate grad was not created according to th

家人们来看看是不是报这个 warning: [W reducer.cpp:283] Warning: Grad strides do not match bucket view strides. This may indicate grad was not created according to the gradient layout contract, or that the params strides changed since DDP was constructed.…

Python多维数组跨度strides(学习笔记)

Python多维数组跨度 今天就来搞明白有关于多维数组的跨度 strides的知识 先构建一个四位数组&#xff1a; arrnp.arange(1,25.0).reshape(2,2,2,3) print(轴(维度):,arr.ndim) arr分析&#xff1a;arange(1,25.0)是1~24共24个数字&#xff0c;注意到25.0是float类型 再来看看…

RuntimeError: sparse tensors do not have strides

这是一个可以复现的问题。 归根结底在于 torch不支持Sparse与Sparse的矩阵乘法(mm)。 也不支持Dense 与 Sparse的矩阵乘法。 只支持Sparse与Dense的矩阵乘法。 torch.mm是消边的矩阵乘法&#xff0c;mm matrix multiply。 而torch.mul是同形矩阵的element-wise点乘。 所谓s…

Warning: Grad strides do not match bucket view strides pytorch利用DDP报错

遇到报错&#xff1a; [W reducer.cpp:362] Warning: Grad strides do not match bucket view strides. This may indicate grad was not created according to the gradient layout contract, or that the param’s strides changed since DDP was constructed. This is not a…

Python ndarray.strides用法

用法 ndarray.strides: 跨越数组各个维度所需要经过的字节数元组 a np.array([[10,2,4],[3, 4,11]],dtypenp.int32) print(a.strides) #(12,4) 12表示在内存中a[n, 0]到a[n1, 0]跨过多少byte; 4表示在内存中a[n, 0]到a[n, 1]跨过多少byte# 查看数组a所有元素占用内存大小&…

神经网络:CNN中的filter,kernel_size,strides,padding对输出形状的影响

输入数据在经过卷积层后&#xff0c;形状一般会发生改变&#xff0c;而形状的变化往往与以下四个超参数有关。 1&#xff0c;filter&#xff08;out_channel&#xff09; 该超参数控制着输入数据经过卷积层中需要与几个卷积核进行运算&#xff0c;而输入数据与每个卷积核进行…

tf.keras.layers.Conv2D用法总结

概述 tf.keras.layers.Conv2D()函数用于描述卷积层。 用法 tf.keras.layers.Conv2D(filters, kernel_size,strides(1, 1), paddingvalid, data_formatNone,dilation_rate(1, 1), activationNone )1.filter&#xff1a;卷积核的个数 2.kenel_size&#xff1a;卷积核尺寸&…

CNN中stride(步幅)和padding(填充)的详细理解

步幅&#xff1a;卷积核经过输入特征图的采样间隔 填充&#xff1a;在输入特征图的每一边添加一定数目的行列&#xff0c;使得输出的特征图的长、宽 输入的特征图的长、宽 两个参数的核心&#xff1a; 设置步幅的目的&#xff1a;希望减小输入参数的数目&#xff0c;减少计…

java输出(java输出语句快捷键)

java最简单的输入输出 java输出语句怎么写 去百度文库&#xff0c;查看完整内容> 内容来自用户:白岸海歌 System.out.print ——标准输出流 Java的流类&#xff0c;主要是&#xff1a;输入流类InputStream输出流类OutputStream Java系统预先定义好3个流对象&#xff0c;静态…

Java程序入口+输出语句+数据类型

一&#xff08;Java程序入口&#xff09;&#xff1a;要想执行一个java程序&#xff0c;就必须有一个程序入口&#xff0c;且该入口为固定格式&#xff1a;public static void main&#xff08;String[ ] args&#xff09;{}。注意&#xff1a;是main而不是mian&#xff0c;Str…

JAVA 循环控制语句以及输入输出

JAVA 循环控制语句以及输入输出 顺序结构分支结构if 语句switch 语句 循环结构while 循环for 循环do while 循环 输入输出输出到控制台从键盘输入 JAVA 里的程序控制语句主要分为顺序结构、分支结构&#xff08;选择&#xff09;和循环结构。 顺序结构 顺序结构比较简单&#x…

JAVA输出语句及变量

文章目录 语句输出在.java文件里一共能存在2样东西;注释的分类:变量标识符变量名的命名规范: 语句输出 格式一:println.带有换行效果 格式二:print.不带换行效果 (语句是程序执行的最小单元,是以"&#xff1b;"结束的.) “ System.out.println();”输入快捷方法…

java的打印语句_java打印输出语句是什么?

打印输出语句有&#xff1a;换行打印“System.out.println();”&#xff0c;不换行打印“System.out.print();”&#xff0c;字节输出“System.out.write();”&#xff0c;按格式输出“System.out.printf();”。 Java中的输出语句有以下四种&#xff1a;System.out.println(111…

Java输入/输出

File类文本&#xff08;Text&#xff09;输入/输出 输出用PrintWriter类try-with-resources来自动关闭资源用Scanner来读取文本流式处理文本文件和二进制文件 二进制&#xff08;Binary&#xff09;文件输入/输出 二进制输入/输出到文件FilterInputStream/FilterOutputStream D…

Java输入输出

源代码见&#xff1a;点击打开链接 引言&#xff1a;在平时java开发中&#xff0c;被输入输出搞得头疼。特此写下这篇博客&#xff0c;一是为了总结输入输出&#xff0c;二是为了和大家分享。如果大家觉得写得好&#xff0c;就请高抬贵手点个赞呗&#xff01;&#xff01;&…

JAVA的输入输出

1.Java的输出 System,out,println(); //输出且换行 System.out.print(); //输出不换行 System.out.printf(); //提供字符格式化 示例 class Output{public static void main(String args[]){System.out.println("1.println");System.out.println("2.println&qu…

[JAVA]java中的打印输出语句

java中的打印语句分为三种&#xff1a; System.out.print(); System.out.println(); System.out.printf(); 1.System.out.print(); 打印在引号里的字符串 int x 5; System.out.print("今天是周" x); 打印结果&#xff1a; 2.System.out.println(); 和print…