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名必须与这个一致。

posted @   powfu  阅读(29)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示