首页 > 其他分享 >[Http] 跨站请求伪造(CSRF)

[Http] 跨站请求伪造(CSRF)

时间:2024-10-07 22:01:17浏览次数:10  
标签:跨站 Http 请求 用户 表单 Cookie CSRF 攻击者 浏览器

基本概念

当一个用户已经登录并且在当前域名下存储了相关的 Cookie(如身份验证信息等),如果打开一个伪造的 HTML 页面,并且该页面中的 <form> 元素的 action 属性包含完整的 API 请求全路径指向同一域名,浏览器在发送该表单请求时会自动携带该域名下存储的 Cookie

同一域名下的所有请求(包括表单提交、XHR、Fetch 请求等)都会自动附带浏览器中存储的 Cookie 信息,除非使用了 SameSite、HttpOnly 等安全设置来限制特定的 Cookie 行为。

攻击过程

  1. 用户登录可信站点:用户登录一个网站后,网站通常会在用户浏览器中设置一个认证 cookie,用于维持用户的会话。
  2. 攻击者伪造请求:攻击者创建一个恶意网页(或者一段恶意代码),该页面向用户已登录的网站发送请求。这些请求可能是通过 <form> 表单提交、图片链接、AJAX 请求等方式伪造的。
  3. 浏览器自动携带 cookie:由于请求的目标域名与用户登录的网站相同,浏览器会自动附带之前的认证 cookie(如 session cookie),服务器将其视为合法用户的请求。
  4. 服务器执行请求:如果网站没有足够的防护措施,服务器会执行该请求,认为这是由合法用户发出的,从而造成恶意操作,比如更改账户信息、进行转账等。

假设一个用户登录了银行网站 bank.com,并且银行网站在用户的浏览器中设置了认证 Cookie。攻击者发送给用户一个包含以下内容的恶意 HTML 页面:

<form action="https://bank.com/transfer" method="POST">
    <input type="hidden" name="to_account" value="attacker_account">
    <input type="hidden" name="amount" value="1000">
    <input type="submit" value="Submit">
</form>

用户一旦打开这个页面,表单会自动提交,并携带浏览器中的认证 Cookie。银行网站接收到请求后,认为这是用户自愿的转账操作,从而执行了转账。

防御 CSRF

  1. CSRF Token: 在表单中加入一个唯一的 Token(令牌),服务器在接收到请求时验证这个 Token 是否与用户会话中的一致。由于攻击者无法获取合法的 Token,因此伪造的请求会被拒绝。
  2. SameSite Cookie: 将 Cookie 的 SameSite 属性设置为 LaxStrict,限制 Cookie 在跨站请求中的传递。这样,攻击者无法在跨站请求中利用用户的 Cookie。
  3. 检查 Referer 和 Origin 头: 服务器端可以检查请求的 RefererOrigin 头,确保请求是来自同一站点,而不是第三方站点。

标签:跨站,Http,请求,用户,表单,Cookie,CSRF,攻击者,浏览器
From: https://www.cnblogs.com/Himmelbleu/p/18450748

相关文章

  • [Http] 跨源资源共享(CORS)
    基本概念CORS指的是跨源资源共享(Cross-OriginResourceSharing),默认情况下不允许从一个源(即一个域名、协议、端口号组合)加载页面执行跨源HTTP请求。也就是说,不允许A.com请求B.com的资源,通常发生在前后端分离项目,前端项目部署的服务器和后端部署的服务器不同源。举个例......
  • 为什么安装了SSL证书还是不能HTTPS访问?
    安装了SSL证书后仍然无法通过HTTPS访问网站可能有以下几个原因:证书未正确配置:确保在服务器上正确安装并配置了SSL证书。这包括将证书文件正确放置,并在服务器软件中启用HTTPS。域名不匹配:检查SSL证书绑定的域名是否与实际访问的域名一致。如果访问的域名不在证书覆盖范围内,则......
  • 使用yum安装报错:Could not retrieve mirrorlist http://mirrorlist.centos.org/?relea
    安装wget命令yum-yinstallwget报错,无法找到镜像 测试是否是网络问题抓包正常,网络没有问题;尝试更新yum又开始报错尝试分析问题原因出现这个错误是因为使用的CentOS7仓库已经被归档,当前的镜像地址无法找到所需的文件。CentOS7的官方支持已经结束,部分仓库已被移至归档......
  • 如何解决 构建dotnet docker镜像时报错:error NU1301: Unable to load the service ind
    我用的是dockerdesktop,Builders设置:desktop-linux以下是我的dotnet项目的Dockerfile内容FROMmcr.microsoft.com/dotnet/aspnet:6.0ASbaseWORKDIR/appEXPOSE80EXPOSE443FROMmcr.microsoft.com/dotnet/sdk:6.0ASbuildWORKDIR/srcCOPY["NuGet.Config","......
  • kube-ovn net/http TLS handshake timeout
    问题现象业务报错net/http:TLShandshaketimeout。容器IP跨节点访问kube-apiserverserviceclusterIP不通。问题分析kkotrace[ns]/[pod][ip]tcp443|grep对端主机ipkube-ovn在br-int网桥上刷流表实现了kube-proxy的dnat功能。kube-ovn监听service的endpoints,像kub......
  • CSRF 攻击
    CSRF(Cross-SiteRequestForgery)保护机制。CSRF攻击是指攻击者通过伪装成用户向应用发送恶意请求,而这些请求是用户在不知情的情况下发起的。例如,如果用户在一个银行网站上登录,然后访问了一个恶意网站,该恶意网站可能包含一个自动提交的表单,这个表单会向银行网站发送请求来转账......
  • 网站在后台启用了https协议之后重新登录就不进去后台的解决方法
    备份现有配置文件 在进行任何修改之前,请确保先备份e/config/config.php文件,以便如果修改后出现问题可以快速恢复。bash cpe/config/config.phpe/config/config.bak修改配置文件 使用文本编辑器打开e/config/config.php文件,并找到httptype这个配置项。将其值从1(......
  • HTTP请求过程
    http请求过程从源端到终端,请求报文和响应报文要经过四层关口,才可以传输,分为:应用层(如http)传输层(如TCP)网络层(如IP)链接层(设备驱动程序以及网卡)协议经过约定,使通信两端以相同规则来存储,接收,发送数据分层初探应用层应用程序将数据以相应规则进行包装,发给传输层【HTTP,......
  • delphi 12 利用TNetHTTPClient 解决post https问题注意事项
          在以前的版本中,如果需要向https接口交互数据,需要openssl的支持,特别时openssl版本太多,往往需要调试很长时间, 现在新版的DelphiXE8以上的版本,有了TNetHttpClient,可以简单的是实现和https接口的交互。usesSystem.Net.URLClient,System.Net.HttpClient......
  • 【C#】使用httpclient 实现HTTP请求
    ///<summary>///HTTPPOST请求///</summary>///<paramname="url">请求地址</param>///<paramname="value">参数</param>///<paramname="timeout">超时时间,默认5秒</param>///<returns>......