跨站请求伪造(Cross-Site Request Forgery,CSRF) 是一种网络攻击技术,它允许攻击者诱导用户(通常是受害者)在已登录的Web应用程序上执行未经授权的操作。这些操作通常是以受害者的身份执行的,因为攻击者会利用受害者在应用程序中已经建立的会话(session)。
在CSRF攻击中,攻击者通常不会直接访问受害者的账户,而是通过发送一个恶意的链接或脚本到受害者,诱使受害者在未察觉的情况下执行特定的请求。这个请求看起来像是受害者自己发出的,因为它包含了受害者的会话信息(如cookie),而受害者此时已经登录到目标应用程序。
为了防止CSRF攻击,开发者可以采取以下措施:
-
验证令牌(Token):在表单或AJAX请求中包含一个随机的、不可预测的令牌(token),并在服务器端验证这个令牌。由于攻击者无法获取到受害者的令牌,因此他们无法伪造有效的请求。
-
检查请求来源(Referer):虽然这种方法不是完全可靠的(因为Referer头可以被伪造或禁用),但它可以作为一种额外的安全措施。服务器可以检查请求的Referer头是否来自受信任的来源。
-
使用安全的HTTP方法:只允许GET和HEAD请求进行无副作用的操作。对于可能更改数据或状态的请求(如POST、PUT、DELETE等),需要额外的验证。
-
设置SameSite属性的Cookie:通过设置Cookie的SameSite属性为"Strict"或"Lax",可以防止第三方网站访问这些Cookie。
-
使用CSP(内容安全策略):CSP是一种安全机制,允许网站管理员定义哪些内容来源是可信任的,并限制浏览器加载来自未受信任来源的内容。
-
教育用户:教育用户不要随意点击来自不可信来源的链接或下载未知来源的文件。
-
限制敏感操作的访问权限:确保只有经过身份验证和授权的用户才能执行敏感操作。
检测跨站请求伪造(CSRF)的方法主要有以下几种:
- 识别易受攻击的API端点:
- 审查Web应用程序的所有API端点,特别是那些执行敏感操作的端点,如账户设置、资金转移、权限更改等。
- 确定这些端点是否接受来自用户浏览器的请求,而不需要进行额外的验证。
- 构造CSRF攻击向量:
- 创建一个恶意网页或应用程序,其中包含指向目标API端点的请求,这些请求在用户访问恶意页面时自动执行。
- 请求中应包含所有必要的认证信息,如Cookie、Token或会话ID,这些信息通常由用户的浏览器自动发送。
- 执行测试:
- 诱导目标用户访问恶意网页或点击恶意链接,触发CSRF攻击。
- 观察Web应用程序的响应,检查是否执行了预期之外的操作。
- 使用自动化工具:
- 利用自动化工具,如Burp Suite的CSRF Scanner、OWASP ZAP等,可以帮助发现和验证CSRF漏洞。
- 直接请求测试:
- 抓取一个正常请求的数据包,去掉Referer字段后再重新提交。如果该提交还有效,那么基本上可以确定存在CSRF漏洞。
- 使用CSRF漏洞检测工具:
- 随着对CSRF漏洞研究的不断深入,不断涌现出一些专门针对CSRF漏洞进行检测的工具,如CSRFTester、CSRF Request Builder等。
- 这些工具的原理是:首先抓取在浏览器中访问过的所有链接以及所有的表单等信息,然后通过在工具中修改相应的表单等信息,重新提交,这相当于一次伪造客户端请求。如果修改后的测试请求成功被网站服务器接受,则说明存在CSRF漏洞。
项目实训
打开我们的dvwa难度改为low
查看源码
服务器收到修改密码的请求后,会检查参数password_new与password_conf是否相同,如果相同,就会修改密码,并没有任何的防御机制。
输入新的密码之后就会在地址栏出现相应的链接提示修改成功修改成功
总结,这个漏洞不常用,需要的条件太多
完结撒花~