安全测试重点思考(中)--如何防止漏洞XSS和CSRF漏洞

如何防止漏洞XSS和CSRF漏洞

  • XSS漏洞的预防
    • springsecurity框架来预防xss漏洞的步骤
    • 将特殊字符进行实体转义
    • 使用类库和修改cookie属性
    • 使用安全的HTTP Only Cookie
      • 使用安全的Cookie
      • 使用CSP(内容安全策略)
      • 使用专门的XSS防护库
      • 输入验证和过滤
    • XSS的面试题
      • 你对xss了解,测试如何做xss测试?
      • 三种xss漏洞的区别
        • 触发方式
        • 依赖方式
        • 时效性质
      • xss的原理和根本原因
      • 我们如何利用脚本
      • 安全测试工具awvs如何做测试
      • 为什么有了awvs还需要手动挖掘漏洞呢
  • CSRF漏洞的预防
    • CSRF的定义
    • CSRF攻击实现过程
    • 如何构造CSRF攻击
      • 构造请求的代码
      • GET类型的CSRF
      • POST类型的CSRF
    • CSRF面试题
      • 测你对 csrf 的了解,测试如何做csrf的测试
      • csrf的根本原因和原理
      • 黑客如何利用,我们如何编写漏洞利用脚本来测试
      • 我们如何预防csrf
      • 安全测试漏洞
  • xss和csrf的区别

XSS漏洞的预防

springsecurity框架来预防xss漏洞的步骤

  • 配置安全过滤器链: 在 Spring Security 配置文件中配置安全过滤器链,确保请求经过适当的过滤器链以进行安全检查和验证。
  • 启用跨站请求伪造(CSRF)保护: 配置 Spring Security 启用 CSRF 保护,以防止恶意网站利用用户的身份进行 CSRF 攻击。可以通过在 Spring Security 配置中启用 csrf() 方法来实现。
  • 实施内容安全策略(CSP): 配置 Spring Security 添加适当的 HTTP 响应标头,如 Content-Security-Policy,以实施内容安全策略,限制浏览器加载和执行内容的方式,从而减少 XSS 攻击的风险。
  • 进行输入验证和输出编码: 在应用程序中实施严格的输入验证,以确保用户输入数据的完整性和安全性。同时,在将用户提供的数据显示到页面上时,使用适当的输出编码,如 HTML 编码或 JavaScript 编码,以防止 XSS 攻击。
  • 使用安全的渲染技术: 在应用程序中使用安全的模板引擎或渲染技术,如 Thymeleaf 或 FreeMarker,这些技术可以自动进行 HTML 编码,从而减少手动编码的错误和 XSS 攻击的风险。
  • 更新和维护依赖项: 定期更新和维护应用程序中使用的依赖项和库,以确保使用的框架和组件没有已知的 XSS 漏洞,并及时应用已发布的安全补丁。
  • 进行安全审计和漏洞扫描: 定期进行安全审计和漏洞扫描,以检测和识别应用程序中可能存在的 XSS 漏洞,并及时采取措施修复这些漏洞。

将特殊字符进行实体转义

在这里插入图片描述

使用类库和修改cookie属性

使用安全的HTTP Only Cookie

确保你的Cookie被标记为HTTP Only,这样它们就不能通过客户端的JavaScript代码来访问。这可以防止XSS攻击者尝试通过JavaScript来访问Cookie。

document.cookie = "cookieName=cookieValue; HttpOnly";

使用安全的Cookie

将Cookie标记为安全的可以确保它们只在通过HTTPS连接时传输,这样可以减少被窃取的风险。

document.cookie = "cookieName=cookieValue; secure";

使用CSP(内容安全策略)

内容安全策略是一种通过限制页面中的资源加载来减少XSS攻击的方法。它可以通过HTTP标头来实现,或者在HTML页面中设置meta标签。例如,使用类似以下的标头:

Content-Security-Policy: default-src 'self';

使用专门的XSS防护库

使用专门的XSS防护库,比如OWASP ESAPI,可以帮助过滤用户输入并确保安全地在页面上显示。这些库通常提供了一组函数和工具,用于转义特殊字符、过滤输入等。

var userInput = "<script>alert('XSS');</script>";
var safeInput = encodeHTML(userInput); // 使用库中提供的函数来转义HTML特殊字符
document.getElementById("output").innerHTML = safeInput;

输入验证和过滤

对用户输入进行验证和过滤是防止XSS攻击的重要步骤。确保只接受预期格式的输入,并过滤掉不安全的字符。

var userInput = document.getElementById("input").value;
var safeInput = userInput.replace(/<script>/g, ""); // 过滤掉<script>标签
document.getElementById("output").innerHTML = safeInput;

XSS的面试题

你对xss了解,测试如何做xss测试?

  • 反射型XSS:恶意脚本通过用户提供的输入被传递到服务器,然后在服务器响应中反射回来并执行。
  • 存储型XSS:恶意脚本被存储在服务器上的数据库或文件中,并在请求时从服务器返回给所有用户。
  • DOM-based XSS:恶意脚本利用客户端的DOM(文档对象模型)而不是服务器来实施攻击。
  • 如何做:找到input框或者接口参数,输入payload查看是否有alert弹窗,如果有,即为xss漏洞。

三种xss漏洞的区别

触发方式
  • 反射型XSS通常通过诱使用户点击恶意链接来触发,恶意脚本随请求发送到服务器,然后被反射回用户的浏览器执行。
  • 存储型XSS则将恶意脚本存储在服务器上,在用户访问包含该脚本的页面时被触发。
  • DOM-based XSS攻击不涉及与服务器的交互,而是直接通过客户端的JavaScript代码执行,恶意脚本被注入到页面中并在解析时被执行。
依赖方式
  • 反射型和存储型XSS通常依赖于用户的行为。
  • DOM-based XSS攻击则依赖于页面加载和DOM解析。
时效性质
  • 反射型XSS的payload通常在攻击链接被点击后立即触发。
  • 而存储型XSS的payload会一直保留在服务器上,直到其他用户访问受感染的页面。
  • DOM-based XSS的payload则随着页面加载和DOM解析而触发,且通常具有持久性。

xss的原理和根本原因

  • 原理:用户提交的数据被浏览器执行了,比如js代码
  • 根本原因:用户提交的payload后端没有经过处理直接返回到前端被浏览器执行了

我们如何利用脚本

为了防止黑客进行XSS攻击,你可以使用window.open和document.cookie来构造一个安全的Payload。
在这里插入图片描述

安全测试工具awvs如何做测试

我们只需要找到要扫描的网站,写网址,写登录账号密码,就可以开始对网站扫指了,中间会发现漏洞,并记录,一般持续半天到一天,扫描才会结束。

为什么有了awvs还需要手动挖掘漏洞呢

  • 深层次漏洞:自动化扫描工具通常只能检测到一些常见的漏洞类型,如SQL注入、XSS等。而对于一些深层次、定制化或较为复杂的漏洞,往往需要人工挖掘和深入分析
  • 定制化场景:某些应用程序具有特定的定制化功能和逻辑,这些功能可能不易被自动化扫描工具发现。手动挖掘可以根据实际情况调整测试策略和探测方法,更好地覆盖特定的定制化场景。
  • 逻辑漏洞:某些漏洞不仅仅是由于技术实现上的问题,还可能涉及到业务逻辑上的缺陷。这类漏洞通常需要人工分析和理解应用程序的业务逻辑,以便发现和利用。
  • 误报和漏报:自动化扫描工具可能会产生误报或漏报,即报告了不存在的漏洞或未发现真实的漏洞。手动挖掘可以对自动化扫描结果进行验证和补充,确保漏洞的准确性和完整性。
  • 漏洞利用:自动化扫描工具通常只能发现漏洞,而无法深入挖掘漏洞的利用方式和后果。手动挖掘可以进一步研究漏洞的利用场景和后果,帮助开发人员和安全团队更好地理解和修复漏洞。

CSRF漏洞的预防

CSRF的定义

跨站请求伪造,冒用Cookie中的信息,发起请求攻击。
CSRF(Cross-site request forgery)跨站请求伪造:攻击者诱导受害者进入第三方网站,在第三方网站中,向被攻击网站发送跨站请求。利用受害者在被攻击网站已经获取的注册凭证,绕过后台的用户验证,达到冒充用户对被攻击的网站执行某项操作的目的。

CSRF攻击实现过程

  • 当用户已经登录成功了一个网站
  • 然后通过被诱导进了第三方网站「钓鱼网站」
  • 跳转过去了自动提交表单,冒用受害者信息
  • 后台则正常走逻辑将用户提交的表单信息进行处理

如何构造CSRF攻击

1.攻击者构造一个恶意的请求,该请求中包含了受害者在目标网站的身份认证信息(身份信息利用网站已经存储的 cookies)和一些具体的操作指令。
2.攻击者通过各种手段(比如诱骗点击或注入恶意代码等)让受害者访问构造好的恶意请求此时受害者的浏览器会向目标网站发出请求,携带了恶意请求所需要的身份信息和操作指令>3.目标网站接收到浏览器发来的恶意请求后,会认为该请求是受害者本人发出的,进而执行对应的操作。攻击者通过这种方式完成了一次 CSRF攻击,并可能窃取到受害者的个人信息、账户资产等

构造请求的代码

如果你想将恶意的 URL 伪装成图片,并通过电子邮件发送给受害者,你可以构造一个包含该 URL 的 HTML 代码,并将该 HTML 代码嵌入到电子邮件的内容中。然后,你可以将这个 HTML 代码保存成一个 HTML 文件,再将该 HTML 文件作为电子邮件的附件发送给受害者

在这里插入图片描述

GET类型的CSRF

仅仅须要一个HTTP请求。就能够构造一次简单的CSRF。

  • 银行站点A:它以GET请求来完毕银行转账的操作,如:
http://www.mybank.com/Transfer.php?toBankId=11&money=1000 
  • 危险站点B:它里面有一段HTML的代码例如以下:
<img src=http://www.mybank.com/Transfer.php?toBankId=11&money=1000>

在上述场景中,如果银行站点 A 在执行敏感操作(比如转账)时使用了 GET 请求,而不是 POST 请求,那么就存在 GET 类型的 CSRF 漏洞。这样的话,当用户已经登录了银行站点 A 并且在同一浏览器会话中访问了危险站点 B 时,如果危险站点 B 的页面中包含了一个针对银行站点 A 的 GET 请求(比如执行转账操作),那么这个 GET 请求会自动携带上用户的身份验证凭证(比如 Cookie),从而导致银行站点 A 对该用户执行了未经授权的敏感操作(比如转账)。
这种情况下,攻击者可以构造一个伪造的请求链接,然后诱使用户点击这个链接,触发对银行站点 A 的 GET 请求,从而执行转账等操作,而用户可能并没有意识到正在执行这些操作。

POST类型的CSRF

在CSRF攻击流行之初,曾经有一种错误的观点,认为CSRF攻击只能由GET请求发起。因此很多开发者都认为只要把重要的操作改成只允许POST请求,就能防止CSRF攻击。
假设银行网站 A 允许用户通过一个表单来修改密码,该表单使用 POST 方法提交数据。攻击者可以构造一个恶意网站 B,其包含如下 HTML。

<!-- 恶意网站 B 的 HTML 代码 -->
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Malicious Website</title>
</head>
<body><h1>Click here to get a free gift!</h1><form action="http://bankA.com/change_password" method="POST" id="csrfForm"><input type="hidden" name="new_password" value="hacker123"><input type="submit" value="Claim Gift"></form><script>// 自动提交表单document.getElementById('csrfForm').submit();</script>
</body>
</html>

在这里插入图片描述

CSRF面试题

测你对 csrf 的了解,测试如何做csrf的测试

黑客能利用csrf漏洞来修改密码,转账,发qq空间等一系列操作。
我们对于一些重要的操作的地方进行测试,检测是否有二次确认机制,和特殊处理,比如修改密码没有二次确认,或者转账没有二次确认都可能存在csrf漏洞。

csrf的根本原因和原理

执行某项重要操作的时候没有进行二次确认,意思就是可以直接通过链接完成某一项操作。一旦中间有二次确认机制,那么改链接无法一次性执行完这次操作。

黑客如何利用,我们如何编写漏洞利用脚本来测试

直接复制重要操作的ur,修改里面的参数,比如密码和确认密码两个参数的值

我们如何预防csrf

预防 CSRF 攻击的方法包括实施 CSRF 令牌、同源策略、双重确认等防御措施,以确保请求的合法性和用户的安全。

安全测试漏洞

我发现了十多个三-多安全测试的 bugXss有十来个,提交数据的时候提交 payload,下次来访问这个页面的时候就弹出 alert,或者某个 ur 中的参数有 xss 洞,写入 payload 的时候有 alert 弹窗。
文件上传的有十来个,比如没有校验格式,或者前端校验了,后端没有校验,也可能没有校验大小,也可能没有去校验文件的具体内容。

xss和csrf的区别

特征XSS (跨站脚本)CSRF (跨站请求伪造)
定义攻击者在网站上注入恶意脚本,使其在其他用户的浏览器中执行。攻击者利用用户在其他站点已登录的会话来执行未经授权的操作。
目的盗取用户会话信息、执行恶意操作(如篡改页面内容、重定向到恶意网站等)。以用户身份执行敏感操作(如转账、修改密码等)而不需要用户的明确操作。
实现方式通过在网站的输入字段中注入恶意脚本,如输入框、URL 参数、Cookie 等。通过伪造请求,构造恶意的 URL 或表单,并诱使用户点击或提交。
例子1. 在论坛发帖中插入恶意脚本,当其他用户浏览帖子时执行。
2. 在输入框中注入脚本,盗取用户的会话 Cookie。
1. 诱使用户点击恶意链接,执行转账操作。
2. 在恶意网站上自动提交表单,修改用户密码。
防御措施1. 对用户输入进行充分验证和过滤,对输出进行适当的编码。
2. 使用 Content Security Policy (CSP) 限制脚本执行。
3. 使用 HTTP Only Cookie,减少会话 Cookie 被窃取的风险。
1. 使用 CSRF Token 防止伪造请求。
2. 使用 SameSite Cookie 属性限制跨站请求。
3. 在执行敏感操作前进行双重确认。

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

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

相关文章

4.2总结

了解了部分Api的使用并学习了接口的API API API包含了较多种类&#xff08;System,Runtime等&#xff09; System其实就是一个工具类&#xff0c;提供了一些与系统相关的方法 下面有一些常间的System方法 方法名说明public static void exit (int status)终止当前运行的ja…

深入浅出 -- 系统架构之微服务架构常见的六种设计模式

面向服务的架构&#xff08;SOA&#xff09; 面向服务的架构&#xff08;SOA&#xff09;是一种设计方法&#xff0c;也是一个组件模型&#xff0c;它将应用程序的不同功能单元&#xff08;称为服务&#xff09;通过这些服务之间定义良好的接口和契约联系起来。接口是采用中立的…

HarmonyOS应用开发ArkUI(TS)电商项目实战

项目介绍 本项目基于 HarmonyOS 的ArkUI框架TS扩展的声明式开发范式&#xff0c;关于语法和概念直接看官网官方文档地址&#xff1a;基于TS扩展的声明式开发范式&#xff0c; 工具版本&#xff1a; DevEco Studio 3.1 Canary1 SDK版本&#xff1a; 3.1.9.7&#xff08;API V…

春招3月面试题的总结--南京,山东,西安,东莞四家公司总结。

1.南京某公司 1.Java的几种基本数据类型&#xff1f;分别是多少字节&#xff1f; byte&#xff0c;8bit 1字节 char&#xff0c;16bit 2字节 short&#xff0c;16bit 2字节 int&#xff0c;32bit 4字节 float&#xff0c;32bit 4字节 long&#xff0c;64bit 8字节 doubl…

睿尔曼-具身智能双臂主从手项目方案

具身智能双臂主从手项目方案 一、公司介绍 成立于2018年&#xff0c;是一家专注于超轻量仿人机械臂研发、生产及销售的国家级高新技术企业。总部位于北京石景山区首特产业园&#xff0c;工厂坐落于江苏省常州科教城智能数字产业园&#xff0c;团队的核心成员毕业于北京航空航…

前端验证码

一、基础验证码 gVerify.js&#xff1a; !(function (window, document) {function GVerify(options) { //创建一个图形验证码对象&#xff0c;接收options对象为参数this.options { //默认options参数值id: "", //容器IdcanvasId: "verifyCanvas", //ca…

c++11 标准模板(STL)本地化库 - 平面类别 - (std::ctype) 定义字符分类表(三)

本地化库 本地环境设施包含字符分类和字符串校对、数值、货币及日期/时间格式化和分析&#xff0c;以及消息取得的国际化支持。本地环境设置控制流 I/O 、正则表达式库和 C 标准库的其他组件的行为。 平面类别 定义字符分类表 std::ctype template< class CharT > clas…

【nc工具信息传输】

nc&#xff0c;全名叫 netcat&#xff0c;它可以用来完成很多的网络功能&#xff0c;譬如端口扫描、建立TCP/UDP连接&#xff0c;数据传输、网络调试等等&#xff0c;因此&#xff0c;它也常被称为网络工具的 瑞士军刀 。 nc [-46DdhklnrStUuvzC] [-i interval] [-p source_po…

Linux系统Docker搭建Wiki.Js应用程序并结合cpolar实现公网访问内网知识库

文章目录 1. 安装Docker2. 获取Wiki.js镜像3. 本地服务器打开Wiki.js并添加知识库内容4. 实现公网访问Wiki.js5. 固定Wiki.js公网地址 不管是在企业中还是在自己的个人知识整理上&#xff0c;我们都需要通过某种方式来有条理的组织相应的知识架构&#xff0c;那么一个好的知识整…

腾讯云4核8G12M服务器和标准型S5服务器配置价格表

2024年腾讯云4核8G服务器租用优惠价格&#xff1a;轻量应用服务器4核8G12M带宽646元15个月&#xff0c;CVM云服务器S5实例优惠价格1437.24元买一年送3个月&#xff0c;腾讯云4核8G服务器活动页面 txybk.com/go/txy 活动链接打开如下图&#xff1a; 腾讯云4核8G服务器优惠价格 轻…

数据结构和算法:十大排序

排序算法 排序算法用于对一组数据按照特定顺序进行排列。排序算法有着广泛的应用&#xff0c;因为有序数据通常能够被更高效地查找、分析和处理。 排序算法中的数据类型可以是整数、浮点数、字符或字符串等。排序的判断规则可根据需求设定&#xff0c;如数字大小、字符 ASCII…

基于注意力整合的超声图像分割信息在乳腺肿瘤分类中的应用

基于注意力整合的超声图像分割信息在乳腺肿瘤分类中的应用 摘要引言方法 Segmentation information with attention integration for classification of breast tumor in ultrasound image 摘要 乳腺癌是世界范围内女性最常见的癌症之一。基于超声成像的计算机辅助诊断&#x…

prompt 工程案例

目录 prompt 工程是什么&#xff1f; 案例 vllm 推理加速框架 prompt 工程是什么&#xff1f; prompt&#xff1a;提示词&#xff0c;也就是我们使用网页版输入给大模型的内容就叫 prompt&#xff0c;那什么是 prompt 工程呢&#xff1f; 简单理解其实就是利用编写的 prom…

使用自己训练的superpoint与superglue模型进行图像配准

基于官方团队发布的预训练模型&#xff0c;使用SuperPoint与SuperGlue实现图像配准&#xff0c;可以参考https://blog.csdn.net/a486259/article/details/129093084 基于官方团队发布的代码训练自己的模型&#xff0c;可以参考https://blog.csdn.net/a486259/article/details/…

如何理解UDP 和 TCP? 区别? 应用场景?

文章目录 一、UDP二、TCP三、区别参考文献 一、UDP UDP&#xff08;User Datagram Protocol&#xff09;&#xff0c;用户数据包协议&#xff0c;是一个简单的面向数据报的通信协议&#xff0c;即对应用层交下来的报文&#xff0c;不合并&#xff0c;不拆分&#xff0c;只是在…

什么是运放噪声频率曲线?怎么算噪声有效值?只需要3个公式!

原文来自微信公众号&#xff1a;工程师看海&#xff0c;与我联系&#xff1a;chunhou0820 看海原创视频教程&#xff1a;《运放秘籍》 大家好&#xff0c;我是工程师看海&#xff0c;原创文章欢迎点赞分享&#xff01; 运放有哪些噪声源&#xff1f;什么是噪声频率曲线&#x…

使用Autodl与Xftp远程训练模型及管理远程文件

1 AutoDL网站登录创建实例 AutoDL网站:AutoDL算力云 | 弹性、好用、省钱。租GPU就上AutoDL 1&#xff09;进入算力市场&#xff0c;选取可用显卡&#xff08;工作日一般白天抢不到&#xff0c;晚上才能抢到&#xff09; 2&#xff09;选择配置环境 3&#xff09;创建成功实例…

蓝桥集训之阶乘分解

蓝桥集训之阶乘分解 核心思想&#xff1a;线性筛质数 筛出每一个质数后 只要将所有质数的1 2 3 … 次方个数都加上即可 #include <iostream>#include <cstring>#include <algorithm>#include <vector>using namespace std;const int N 1e610;int …

python中如何使用help()

help()函数帮助我们了解模块、类型、对象、方法、属性的详细信息。 1、帮助查看类型详细信息&#xff0c;包含类的创建方式、属性、方法 >>> help(list) Help on class list in module builtins: class list(object)| list() -> new empty list| list(iterable)…

企微知识库优缺点解析:如何让其效益最大化

企业搭建企微知识库&#xff0c;作为企业内部知识的集中存储和共享平台&#xff0c;为企业带来了很多便利。但是&#xff0c;任何事物都有其两面性&#xff0c;企微知识库也不例外。今天我们就来详细探讨搭建企微知识库的优点和缺点&#xff0c;如何在使用企微知识库时使其发挥…