*跨站脚本安全保护 Cross site scripting protection
跨站脚本攻击(XSS)通常发生于站点存储和使用不安全的内容,例如数据库里存储的用户的内容是用户的脚本,这些脚本读取后未经处理便执行导致了网站的不安全。例如
<style class={{var}}>...</style>
当var是来自用户类似于这样的内容:
‘class1 οnmοuseοver=javascript:func()’
这样就可能导致浏览器执行不安全的脚本。为了避免这类问题,django模板会自动过滤特殊字符,类似 ‘<’, '>'之类的字符会被过滤。
如果你确定安全不需要过滤,可以使用safe过滤器,并在合适的地方用双引号。
<style class="{{var|safe}}">...</style>
*跨站请求伪造保护 CSRF(cross site request forgery)protection
未知用户伪装成登陆用户去提交表单
A站的javascript 在用户打开B站后, 提交了B站的一个表单到B站(因为这时用户已经登陆了B站,所以B站以为这是用户提交的),但这不是用户的行为
django有CSRF保护模块,必须在MIDDLEWARE_CLASSES里加上:
'django.middleware.csrf.CsrfViewMiddleware'
在form里必须加上{% csrf_token%}才能通过服务器验证,
<form action="" method = "post"> {% csrf_token%}
默认全站有效
如果只想保护特殊的view, 请单独在view函数前加上@csrf_protect
还有一个设置允许来自指定站点的POST请求
CSRF_COOKIE_DOMAIN = '.example.com'
如果view 不考虑CSRF, 可在view前加@csrf_exempt
*SQL注入攻击保护 SQL injection protection
SQL注入式在SQL里隐藏附带的脚本去数据库里执行的行为,django的QuerySet会跳过打本这类隐藏脚本
*点击劫持攻击保护 Clickjacking
如A站点把B站点的内容放在了一个frame里来伪装,当用户点击A的‘赞’按钮会自动调用js去点击B的‘确定购买’按钮
django防止攻击的方法是在中间件加上
‘django.middleware.clickjacking.XFrameOptionsMiddleware’
*开启SSL/HTTPS
根据需要开启 HTTPS设置,提高服务器安全性
SESSION_COOKIE_SECURE=True
CSRF_COOKIE_SECURE=True
SECURE_PROXY_SSL_HEADER=('HTTP_X_FORWARDED_PROTO', 'https')
SECURE_SSL_REDIRECT=True
*在ALLOWED_HOSTS里指定哪些HOST是可以访问的