跨站请求伪造(CSRF)攻击及其防御措施
创作时间:
作者:
@小白创作中心
跨站请求伪造(CSRF)攻击及其防御措施
引用
CSDN
1.
https://m.blog.csdn.net/qq_44005305/article/details/145964850
CSRF攻击及其防御措施
跨站请求伪造(CSRF)是一种严重的安全漏洞,会危及网络应用。它诱使用户执行他们并不打算执行的操作,从而导致网站上出现未经授权的操作。
CSRF是什么?
CSRF是一种攻击类型,恶意网站会诱骗用户的浏览器向用户 已通过身份验证的不同网站 发出不必要的请求。例如,如果用户登录了自己的网上银行账户,CSRF攻击就会诱使浏览器在用户不知情的情况下转移资金。
CSRF是如何工作的
1: CSRF攻击步骤
- 用户验证:用户登录受信任的网站(如银行系统),通过cookie维持会话,这一步只有用户才能操作,这是攻击的前提。
- 恶意网站:黑客通过各种方式 诱骗 用户在不知情的情况下访问恶意网站。
- 未经授权的请求:恶意网站使用已认证用户的凭据(通常通过cookie)向受信任网站发送请求,这个请求被精心设计,以在受信任网站上执行操作,而用户对此并不知情或未经同意。
恶意网站的程序可能就是一张图片:
<img src="https://bank.example.com/transfer?amount=1000&to=attacker" />
图片中的脚本就会执行JavaScript脚本,携带受信任的网站的Cookie向受信任的网站发送请求。
2: 如何诱骗用户访问恶意网站
攻击的 核心 就是如何 诱骗 用户在不知情的情况下访问恶意网站,大概的方式如下:
- 钓鱼邮件
- 被种植木马的第三方网站
- 社交媒体上的恶意连接
核心的核心就是要触发访问恶意网站,不管是显示点击还是隐式访问。
CSRF的危害
- 未经授权的交易:转移资金、更改账户设置或执行其他敏感操作。
- 数据窃取:窃取个人或敏感数据,比如口令等。
- 用户体验:破坏用户信任,损害网站声誉。
如何避免CSRF攻击
所谓跨站攻击,且使用第三方网站诱骗,那涉及到跨域的问题,大部分解决方案业缘于此。
1: Anti-CSRF Tokens
在请求表单中包含一个唯一的、不可预测的令牌,并在服务器端验证该令牌。
服务器端代码:
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.stereotype.Controller;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class TransferController {
@PostMapping("/transfer")
public ModelAndView transferMoney(@RequestParam("amount") int amount, @RequestParam("to") String to, @RequestParam("csrfToken") String csrfToken) {
if (!validateCsrfToken(csrfToken)) {
throw new SecurityException("Invalid CSRF token");
}
return new ModelAndView("success");
}
private boolean validateCsrfToken(String token) {
return true;
}
}
客户端代码:
<form action="/transfer" method="post">
<input type="hidden" name="csrfToken" value="${csrfToken}">
<input type="number" name="amount" placeholder="Amount">
<input type="text" name="to" placeholder="Recipient">
<button type="submit">Transfer</button>
</form>
2: SameSite Cookies
Cookie同源策略的限制,SameSite是一个用于控制浏览器在跨站请求中发送cookie的属性,可以设置为以下三个值:
- Strict:只有在同一站点的请求中才会发送cookie。
- Lax:允许同一站点的请求发送cookie,并且在某些跨站请求中也会发送cookie,比如从外部站点点击链接允许,Ajax请求不允许。
- None:默认允许执行所有跨站请求。
服务器端代码:
import javax.servlet.http.Cookie;
public class MyServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Cookie csrfCookie = new Cookie("csrfToken", generateCsrfToken());
csrfCookie.setHttpOnly(true);
csrfCookie.setSecure(true);
csrfCookie.setPath("/");
csrfCookie.setMaxAge(3600);
csrfCookie.setSameSite("Strict"); // SameSite attribute
response.addCookie(csrfCookie);
}
private String generateCsrfToken() {
return "generatedToken";
}
}
3: Referer Header 校验
这也是一种方式,不过很容易伪造。
const express = require('express');
const app = express();
app.post('/transfer', (req, res) => {
const referer = req.headers.referer;
if (!referer || !referer.startsWith('https://yourwebsite.com')) {
return res.status(403).send('Forbidden');
}
res.send('Transfer successful');
});
CSRF攻击会带来严重后果,一方面编写代码的时候使用优秀的框架,里面内置了安全防护措施和最佳实践,另外定期对网站进行安全审计,减少攻击的可能性。
热门推荐
肠息肉术后中医食疗大揭秘!
肠息肉术后怎么吃?医生来支招!
宁波春晚黑科技大揭秘:机器人比心秀!
殷桃:不婚不育也能活出精彩人生
殷桃新恋情曝光:与初中同学重燃旧情,45岁终于找到归宿?
白玉兰奖得主殷桃:骆玉珠背后的高光时刻
殷桃新恋情曝光:从《人世间》到现实生活,一个演员的事业与生活平衡之道
创新年夜饭:让传统佳节更有新意
2024热门流行风格大盘点:十大女装风格解析
《星际穿越》:一场跨越星际的爱与探索之旅
《彗星来的那一夜》:多世界理论引发的哲学思考
中国科学家揭秘:量子纠缠新发现与平行宇宙猜想
霍金遗作揭秘:平行宇宙的科学与科幻之旅
红线引力:婚姻前期准备指南
春节家宴必备:6道特色菜肴制作全攻略!
企业家签订婚前协议的必要性
如何成功应对两国文化差异的挑战
失眠的药物治疗方案汇总
3大睡眠难题,正在损害心脑血管,你可能也中招了!
长期失眠会导致免疫力下降,这些方法或许能帮到你
李启芳:睡眠、失眠与心理健康的紧密联系
美国借记卡和储蓄账户的区别
借记卡和储蓄卡的安全性如何比较?
睡眠质量总是不好,试试从饮食方面改善
秋冬自驾游打卡:扬州最美自然景观
南京扬州自驾游:历史文化的深度体验
最新!2025版《糖尿病管理标准》发布,这几个建议一定要看
电动车充电器故障大揭秘:快修小侠教你轻松搞定!
中医调理助力大肠癌术后康复:饮食调理全攻略
肠息肉术后如何科学搭配营养?这份实用指南请收好