csrf跨站请求伪造详解

【1】csrf跨站请求伪造的解释及解决方法

  • CSRF(Cross-Site Request Forgery)跨站请求伪造是一种常见的网络攻击方式。
  • 攻击者通过诱导受害者访问恶意网站或点击恶意链接
    • 将恶意请求发送到目标网站上
    • 利用受害者在目标网站中已登录的身份来执行某些操作
    • 从而达到攻击的目的。
  • 举个例子
    • 假设受害者在一家网银网站上登录账户,然后继续浏览其他网页。
    • 同时,攻击者通过电子邮件等方式向受害者发送了一封包含恶意链接的邮件。
    • 当受害者点击该链接时,潜在的威胁就会变得非常现实。
    • 该链接指向一个由攻击者操纵的网站,该网站上的恶意代码会自动向网银网站发送一个请求,请求转账到攻击者的账户。
    • 由于受害者在网银网站中已经登录,所以该请求会被认为是合法的,这样攻击者就可以成功地进行转账操作。
  • 要保护自己免受CSRF攻击,网站开发者可以采取以下措施:
    • 使用CSRF令牌:
      • 在用户的请求中添加随机生成的令牌,并将该令牌保存在用户会话中。
      • 每次提交请求时都会验证该令牌,以确保请求是合法的。
    • 启用SameSite属性:
      • 将Cookie的SameSite属性设置为Strict或Lax,以限制跨站请求。
      • 这可以在一定程度上缓解CSRF攻击。
    • 严格验证请求来源:
      • 服务器端可以验证请求的来源是否为预期的网站域名
      • 例如检查HTTP Referer头部。
    • 使用验证码:
      • 在敏感操作(如转账、更改密码等)上使用验证码
      • 增加用户身份验证的防护。

【2】自定义csrf跨域请求伪造

  • 钓鱼网站
    • 搭建一个类似正规网站的页面
    • 用户点击网站链接,给某个用户打钱
    • 打钱的操作确确实实提交给了中国银行的系统,用户的钱也确实减少
    • 但是唯一不同的是,账户打钱的账户不是用户想要打钱的目标账户,变成了其他用户
  • 内部本质
    • 在钓鱼网站的页面针对对方账户,只给用户提供一个没有name属性的普通input框
    • 然后在内部隐藏一个已经写好带有name属性的input框
  • 如何避免上面的问题
    • csrf跨域请求伪造校验
      • 网站在给用户返回一个具有提交数据功能的页面的时候会给这个页面加一个唯一标识
      • 当这个页面后端发送post请求的时候,我们后端会先校验唯一标识
        • 如果成功则正常执行
        • 如果唯一标识不符合则拒绝连接(403 forbidden)

【2.1】创建两个服务端

【2.1.1】创建正常服务端
  • 前端
<h1>这是正规的网站</h1>

<form action="" method="post">
    <p>当前账户 :>>>> <input type="text" name="start_user"></p>
    <p>目标账户 :>>>> <input type="text" name="end_user"></p>
    <p>转账金额 :>>>> <input type="text" name="money"></p>
    <input type="submit">
</form>
  • 后端
def transform_normal(request):
    if request.method == "POST":
        user_start =
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值