WEB安全(八)什么是CSRF攻击?为什么说Token可以防止CSRF攻击?

CSRF攻击原理及Token防攻击解析

CSRF攻击概述

**CSRF(Cross Site Request Forgery)**是 跨站请求伪造

Cookie 有一个过期时间,在这段时间内,Cookie 是存储在客户端的,当再次访问相同的网站时,浏览器会自动在 HTTP 请求中自动带上该网站用户登录后的 Cookie

CSRF 攻击也正是利用这点,借用用户的 Cookie,去执行非用户本意的操作。

举个例子:

小明登录了某网上银行,他来到了网上银行的帖子区,看到一个帖子下面有一个链接写着“科学理财,年盈利率过万”,小壮好奇的点开了这个链接,结果发现自己的账户少了 10000 元。这是这么回事呢?原来黑客在链接中藏了一个请求,这个请求直接利用小明的身份给银行发送了一个转账请求,也就是通过你的 Cookie 向银行发出请求。

<a src=http://www.mybank.com/Transfer?bankId=11&money=10000>科学理财,年盈利率过万</>

所以单纯的使用Cookie,会受到CSRF攻击。

那为什么说Token可以防止CSRF攻击呢?

token 验证的规则是,服务器从请求体(POST)或者请求参数(GET)中获取设置的 token,然后和 Cookie 中的 token 进行比较,一致之后才执行请求。

而 CSRF 攻击只是借用了 Cookie,并不能获取 Cookie 中的信息,所以不能获取 Cookie 中的 token,也就不能在发送请求时在 POST 或者 GET 中设置 token,把请求发送到服务器端时,token 验证不通过,也就不会处理请求了。

所以,token 可以防止 CSRF 攻击。

CSRF防护策略

CSRF通常从第三方网站发起,被攻击的网站无法防止攻击发生,只能通过增强自己网站针对CSRF的防护能

CSRF攻击,即跨站请求伪造(英语:Cross - site request forgery),也被称为one - click attack或者session riding,通常缩写为CSRF或者XSRF,是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。攻击者诱导受害者进入第三方网站,在第三方网站中向被攻击网站发送跨站请求,利用受害者在被攻击网站已获取的注册凭证,绕过后台的用户验证,冒充用户对被攻击网站执行某项操作[^3]。 XSS攻击,即跨站脚本(Cross - site scripting),是内容没有过滤导致浏览器将攻击者的输入当代码执行,本质上是代码注入问题[^3]。 CSRF攻击的防范方法如下: - 验证码:强制用户必须与应用进行交互才能完成最终请求,能很好地遏制CSRF,但用户体验较差[^3]。 - Referer check:进行请求来源限制,此方法成本最低,但不能保证100%有效,因为服务器并非总能取到Referer,且低版本浏览器存在伪造Referer的风险[^3]。 - token:在HTTP请求中以参数形式加入随机产生的token,并在服务器端建立拦截器验证该token,若请求中无tokentoken内容不正确,则可能是CSRF攻击,拒绝该请求。不过若网站同时存在XSS漏洞,该方法可能失效[^3][5]。 XSS攻击的防范可从内容过滤入手,避免浏览器将攻击者输入当作代码执行。例如使用内容安全策略(CSP),限制页面可以加载哪些资源,防止恶意脚本注入;对用户输入进行严格的验证和过滤,对输出进行编码处理等。虽然文档中未详细提及XSS防范的具体内容,但在实际应用中这些是常见的防范手段。 ```python # 示例代码展示简单的输入过滤 def filter_input(input_str): # 简单过滤可能的脚本标签 filtered = input_str.replace('<script>', '').replace('</script>', '') return filtered user_input = "<script>alert('XSS')</script>" safe_input = filter_input(user_input) print(safe_input) ```
评论 8
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值