XSS与CSRF
----xss
原理:用户在与数据库交互的地方写一些js脚本,提交给数据库,然后其他用户再访问的时候,服务器将这些js脚本作为字符串返回给页面,然后这些js脚本被浏览器解析,然后发生给xss攻击。
django默认已经防止xss攻击了。只要不在前端页面增加{{ msg |safe }}就不会发生xss攻击。
其他解决办法:
使用黑名单,在服务端将一些关键字进行过滤。
---CSRF
原理:假如用户同时打开两个网站,一个黑客网站,一个银行网站,然后在黑客网站设置一个按钮,点击这个按钮,这个网站会获取银行网站的cookie,然后想银行网站发送post请求。
django中csrf的配置
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware', #是否开启csrf防范
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
当开启csrf后,需要在每个模板中添加
{{ csrf_token }}

开启CSRF后,django会自动帮助你用get请求时,等你再post提交时,会携带这个随机字符串,他会检查这个字符串,如果不是原来的字符串,则会请求失败。
csrf的几种用法:
django规定csrf的token必须放到请求头中,并且django后台取的时候,只会认Key名为X-CSRFToken,如果key名不是这个,django会不认
ajax发送csrf请求的方法
方法一:
由于django开启csrf后,会在form表单中隐藏一个input的标签,其中的内容就是放置csrf-token的,我们可以通过jquery获取这个标签的值,然后放入ajax的data中,发送过去。注意,key值必须与标签值一致.
方法二:
由于django的csrf_token会在浏览器的cookie中包含,所以我们可以通过插件jquery_cookie获取csrf,然后将csrf_token放入到请求头中,再由ajax发送过去,但是django在后台取的时候,他只会认得key名叫X-CSRFToken,所以在请求头中,我们的key名必须与这个一致。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端