22.-CSRF攻击

2022-12-23,,

一、CSRF-跨站伪造请求攻击
某些恶意网站上包含链接、表单按钮或者JavaScript,它们会利用登录过的用户在浏览器中的认证信息视图在你的网站上完成某些操作
这就是跨站请求伪造(CSRF,即Cross-Site Request Forgey)
 
 
二、CSRF流程:
第一步:用户c浏览并登录信任的站点A
第二步:A验证通过,在用户c浏览器产生A的cookie
第三步:用户c在没有退出站点A的情况下访问攻击网站B
第四步:B要求访问第三方的站点A,发出一个请求
第五步:用户浏览器根据B网站的请求,携带cookie访问站点A
第六步:A不知道5中的请求是用户c发出的,还是B发出的,由于浏览器会自动带上用户C的cookie,所以A会根据用户C的权限处理5的请求,这样B就达到了模拟用户登录的过程。
 
三、钓鱼网站掉银行接口骗钱案例
网站业务流程:

 

钓鱼网站搭建一个和银行一模一样的网站页面,你以为是银行的网站,当你访问钓鱼网站时
钓鱼网站向向银行发送请求:

 

 
四、如何防止csrf攻击
Django采用‘对比暗号’机制防范攻击
cookies中存储暗号1,模版中表单藏着暗号2,用户只有在本网站下提交数据,暗号2才会随表单提交给服务器
Django对比两个按钮,对比成功,则认为是合法请求,否则是违法请求-403响应码

 
五、CSRF防范配置步骤

1.settings.py中确认MIDDLEWARE(中间件)中 Django.middleware.csrf.CsrfViewMiddleware是否打开
2.模版中,form标签下添加 {% csrf_token%} 标签

示例

<form action="/user/login/" method="post" {% csrf_token %}>

    <p>用户名 :<input type="text" name="username"></p>
<p> 密码:<input type="text" name="password"></p>
<p><input type="submit" value="登录"></p> </form>

六、如果开启了csrf验证,局部不需要进行csrf保护
如果某个视图不需要Django进行csrf保护,可以使用装饰器关闭对此视图的检查

from django.views.decorators.csrf import  csrf_exempt

@csrf_exempt
def my_view(request):
pass

七、如果关闭了csrf验证,局部需要进行csrf保护

from django.views.decorators.csrf import csrf_protect

@csrf_protect
def my_view(request):
pass

 

22.-CSRF攻击的相关教程结束。

《22.-CSRF攻击.doc》

下载本文的Word格式文档,以方便收藏与打印。