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名必须与这个一致。
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号