Web常用安全测试

📅 2026/7/4 5:17:01
Web常用安全测试
测试时不仅要保障功能同时也要注意安全方面的测试。这篇文章分享一些在web端常见的安全问题以及测试方法。要明确的一点是安全问题是团队里所有人需要注意的问题我们只能从测试的角度尽量避免一些问题开发、产品、项目经理等人也是需要从自身岗位的角度上去思考怎么应对的只是从测试角度考虑问题不能保证安全。越权越权指的是没有校验权限就返回了数据/允许访问页面。这是一个很严重的问题对用户的数据安全有很大的威胁。常见于账号之间没有做权限校验横向越权不同账号下的越权A用户与B用户的级别权限是一样的但A用户能够去查看B用户的敏感信息或进行其它恶意操作。比较常见的有直接使用他人的userid去请求数据如果能够直接请求成功那么就存在越权问题纵向越权同一个账号下不同身份的越权。比如A用户是普通员工C用户是经理经理能看到所有人的工资但A不能垂直越权后A用户就有C用户的权限了。测试方法解决方法一般在接口层面通过传入的参数加token等进行身份验证。 在前端层面要限制通过url直接跳转等方式的越权。但是这种方式未必安全用户可以通过抓包或者修改本地缓存的方式伪造身份最终还是要回到后端的判断上通过工具进行测试越权测试工具https://blog.csdn.net/m0_63878364/article/details/149329728?sharetypeblogdetailsharerId149329728sharereferPCsharesourcem0_63878364spm1011.2480.3001.8118手动调用接口进行测试横向越权同级别用户用两个普通账号A、B分别登录A 访问自己的接口抓包获取参数如userId1001将userId改成 B 的 ID如1002发送请求看是否能成功获取 B 的数据纵向越权不同权限用户用一个普通用户账号和一个管理员账号普通账号访问管理员接口如果接口返回成功或部分敏感数据存在纵向越权浏览器直接输入url跳转到没有权限的页面如果能跳转成功证明存在越权CSRF跨站攻击原理利用浏览器的机制窃取网站cookie信息冒用身份进行攻击。例如用户访问了一个银行网站并登录了账号。在用户没有关闭页签的情况下打开了恶意网站B恶意网站B中有这么一段代码。img src”https://bank.com/transfer?toheike”。那么在打开这个网站的一瞬间就会触发接口转走用户的钱且用户是无感知的。讲到这里需要说一下cookie的一个属性SameSiteSameSite分为三个属性Strict、Law、NoneNone其他网站在通过img/link等标签发起请求的时候会自动带上属性为None的cookie值。Law宽松模式,允许部分第三方网站请求携带cookiea,link标签get读取请求Strict严格模式,在任何情况下都不会被第三方网站链接携带测试以下图为例这是一个登录了的网站的cookie现在构建一个测试网站这个网站会加载一张图片但是图片的地址其实是指向了一个登录信息的接口在访问网站的一瞬间我们可以看到请求里cookie里带上了上面图里几个SameSite属性为None的cookie值上面虽然解决了几个SameSiteNone的cookie但是如果我们想要的cookie值SameSite是Law怎么办可以通过别的办法来搞定这个问题如下图我们生成了一个a链接a链接地址指向一个接口。点击后直接访问了对应接口的地址可以看到访问接口时携带的cookie中除了SameSiteNone的之外还包含了SameSiteLaw和SameSite空的cookie但是SameSiteStrict的值是没有携带的测试到这里基本也就结束了防范措施cookie中不要存放关键的信息id、token等即使有存放也要使用Strict进行约束使用token替代cookie。由于CSRF是利用了浏览器自动携带cookie的机制因此如果使用token来替代掉cookie的话就能防御很多场景。因为token不像cookietoken是需要自己拼接并且附带到请求头中的也就不容易被攻破。Referer头部校验。csrf主要是第三方网站拿着浏览器保存的cookie去访问服务器,如果我们告诉服务器发起请求的页面地址,让服务器判断是否为第三方网站是否需要给其访问权限是不是就可以了。这就使用到了http头中的referert字段,这个字段标识了发送请求的客户端地址,后端可以通过白名单等方式对请求进行限制。cookie中拼接随机tokenXSS注入攻击原理跨站脚本攻击Cross Site Scripting的本质是攻击者在web页面插入恶意的script代码当用户浏览该页面之时嵌入其中的script代码会被执行从而达到恶意攻击用户的目的。比如读取cookietoken或者网站其他敏感的网站信息对用户进行钓鱼欺诈等。存储型XSS存储型XSS可以理解为把恶意脚本内容存在了服务端的数据库里每当用户访问页面时就会取出数据库中的内容拼接到html中对用户发起攻击。如图上面是访问页面时自动触发的一种xss攻击还有一种方式是当插入的script标签无法生效时通过html标签引导用户主动点击触发脚本的攻击方式。如果一个页面能够渲染html代码那我们能够插入一段恶意代码button οnclickalert(sessionStorage.getItem(userInfo))获取session的按钮/button这段代码会被渲染成一个按钮当点击按钮后就会获取到sessionStorage中的userInfo这是很危险的img src123 οnerrοralert(123)这段代码在用户访问页面的一瞬间就会触发且会循环触发。比上面的button破坏性更大反射型XSS反射型XSS跟存储型XSS不太一样反射型XSS是不存储在服务器中的一般通过url的参数进行注入可以结合社媒进行钓鱼攻击url参数注入例如以下的测试网站https://xss.xiejiahe.com/level1?namezhanhuasheng你正常输入一个名称页面是正常显示的。但是如果你把url输入成这样https://xss.xiejiahe.com/level1?namescriptalert(123)/script就能注入成功当用户点击这个链接的时候就会触发XSS攻击页面元素注入XSS攻击不止可以利用url还可以利用页面中的元素。例如下图中在输入框内输入内容提交后会把value改成输入的值那么我们可以利用标签输入以下内容完成注入scriptalert(123)/script//原本正常的标签是这样的input namekeyword valuetest在输入内容后就会变成input namekeyword valuescriptalert(123)/script//有的时候为了防范这种xss注入前端会把输入的内容进行处理例如把输入的空格转义。这个时候可以输入%0a代替空格进行尝试。通常转义都是针对尖括号、引号、空格进行处理。当你直接输入等内容没法注入成功的时候可以尝试输入转义后的内容html转义尖括号 转换为 lt; 转换为gt;引号 转换为quot; 转换成#39;空格转换成nbsp;url转义尖括号 转换为 %3C 转换为%3E引号 转换为%22 转换成%27空格转换成%20或者%0a换行符还有的会识别关键字进行处理比如把script转换成scr_ipt或者自动双写script。那么可以尝试着通过输入大小写混合的ScRipt进行绕过具体可以通过练习网站进行尝试Xss在线练习网站https://xss.xiejiahe.com/level1?namegood%20job!答案https://www.jianshu.com/p/4e3a517bc4ea测试思路遇到需要回显数据的地方需要注意xss注入常见于评论、资料、商品信息等这种地方一旦出现注入影响面大且容易带来巨大损失涉及html、富文本的地方也很容易出现xss注入例如邮件、FAQ等测试时可以先输入最简单的内容进行测试例如div123/div如果会被直接渲染成页面元素证明是存在xss注入风险的如果第三点是正常的可以观察是否存在转义例如被转义成lt;的情况有时候会通过这种方法来防范xss注入这时候可以输入lt;来代替进行测试。且这种处理方法有另一个问题就是正常用户输入的会被转义无法正常显示是有bug的有时候回显到页面中的内容是正常的但是value等属性也会存在注入风险当发现自己输入的内容会被赋值到元素的属性中时可以尝试拼接内容进行注入不止是元素有时候还可以利用文件名称进行注入当然这一步通常要配合抓包软件操作还有可能会遇到自动过滤特殊字符的情况例如自动删除script的内容这种时候可以通过输入sscriptcript这种内容来达到目的具体要根据实际情况进行分析。暴力破解指的是接口没有校验用户的访问次数导致用户可以无限制的尝试接口通过循环的方式破解出用户的数据的一种攻击。比较经典的场景是登录如果允许用户无限制的尝试登录那么就可以结合密码字典等方式把密码给暴力破解掉。目前有很多的工具支持暴力破解比如burp suite也可以使用编程语言进行测试测试思路登录、验证码等需要校验的场景需要做暴力破解的防范处理方式通常是一定时间内出现多次错误则暂时锁号但是也要考虑到有人利用该规则恶意锁定他人账号的场景所以通常是通过ip账号的未读进行封锁提示词的返回以登录场景为例密码错误、账号不存在这两个场景返回的提示词应该都要是一样的。不能够让人通过提示词来判断出登录不上是什么原因。DDOSDDoS是一种网络攻击形式攻击者通过大量分布式设备通常是被劫持的“僵尸网络”向目标服务器、网络或服务发送海量请求导致目标系统无法处理正常请求从而使其瘫痪或不可用。原理是通过海量的请求耗尽服务器的资源使得正常的请求也无法被处理。想象一家餐厅目标服务器它可以同时为 20 位顾客正常用户提供用餐服务。一天有一群恶作剧的人攻击者决定让餐厅瘫痪。 这些人僵尸网络组织了上百人恶意设备不停地占用餐桌、点菜、要求服务但实际上他们并不吃饭。服务员和厨房餐厅的资源忙得不可开交但却没法腾出桌子或资源为真正想用餐的顾客正常用户服务。最终这家餐厅的服务能力被耗尽真正的顾客进不来餐厅就陷入了瘫痪状态。测试思路理论上我们是没法完全解决DDOS这个问题的。但是云服务商一般能提供成熟的DDOS防御手段。在服务中通常使用ipid等关键信息对用户身份进行识别如果短时间内有大量的异常请求可以直接限流或者通过验证码来拦截机器这样可以一定程度地保障服务正常运行。在多次触发后可以把指定ip的用户拉入黑名单永久不让他进行访问。相对应的公司内部都是用同一个ip为了避免公司内部误触发也需要设置对应白名单DDOS的防护和暴力破解不同暴力破解通常针对某个接口但是DDOS可能从任意接口进来特别是消耗资源多的接口。如果要防护应该从系统层面进行处理而不是在接口逻辑里进行判断数据脱敏针对比较敏感的数据在存储的时候需要加密处理在页面上或接口上也要想办法限制不让别人能够直接看到明文。比如下图的邮箱授权码。通常需要脱敏的数据有身份证、密码、关键的id等信息在缓存、数据库、接口层、页面都得做限制。此外关键信息不应该存储在cookie等地方或者就算要存储也应该加密存储。前端混淆加密在某些情况前端不得不存放一些重要的信息例如在进行非对称加密时前后端各自持有一份密钥。这份密钥不能依赖后端返回只能存放在前端中但是如果直接明文存储用户就可以从开发者工具中找到密钥下图是随便找的一个图片示例从哪里可以找到前端代码内容。逻辑漏洞针对业务逻辑进行测试没有具体的测试点。举个例子在进行付费时如果接口中传输了金额可以尝试通过抓包的方式修改金额测试能否低价买高价商品sql注入原理通过输入恶意文本篡改原有的sql语句对数据库进行攻击的一种手段。举例原本的查询语句是这样的SELECT * FROM users WHERE username zhangsan AND password 123456;如果用户输入恶意内容zhangsan -- 语句就会变成下面这个样子。可以看到对于密码的判断已经被注释掉了这样的话就可以绕过密码校验SELECT * FROM users WHERE username zhangsan -- AND password 123456;更进一步输入 OR 11 -- 语句会变成这个样子。由于11是永远为真的因此会暴露出所有的user数据SELECT * FROM users WHERE username OR 11 -- AND password ;甚至可以输入 ; DROP TABLE users; -- 那么语句就会变成下面这样直接删除users表SELECT * FROM users WHERE username ; DROP TABLE users; --相关测试工具sqlmaphttps://blog.csdn.net/ewii12567/article/details/145995372