Django项目部署中的服务器安全详解

maiziedu · · 3162 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

  跨站脚本安全保护(Cross site scripting protection)   跨站脚本攻击(XSS)通常发生于站点存储和使用不安全的内容,例如数据库里存储的用户内容是用户的脚本,这些脚本读取后未经处理便执行导致了网站的不安全。例如:   <style class={{ var }}>...</style>   当var是来自用户类似于这样的内容:   'class1 onmouseover=javascript:func()'   这样就可能导致浏览器执行不安全的脚本。为了避免这类问题,Django的模版有一些自动过滤特殊字符的机制,类似于 ‘<’和>’之类的字符都会被过滤。如果你确定某些内容是完全安全的,不是来自用户的非法输入,想展示在页面上,你得在调用这些字符串的时候用safe过滤器,并且在合适的地方用双引号: <style class=”{{ var|safe }}”>...</style>   跨站请求伪造保护(Cross site request forgery (CSRF) 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 %}   值得注意的是,当你把'django.middleware.csrf.CsrfViewMiddleware' 加入到MIDDLEWARE_CLASSES的时候,该设置会对全站生效,如果你只是想保护某些特殊的view(例如用户登录、注册的表单),那么你可以单独在该view函数前加上:   @csrf_protect   另外,还有一个设置只允许来自指定站点的POST请求:   CSRF_COOKIE_DOMAIN = '.example.com'   如果请求没有按照这些规范来做,则服务器会返回403 Forbidden错误,有些文章指出解决办法是在view里的相关函数前面加上:   @csrf_exempt   这是不对的,因为该修饰符的意义是指定某些view不用考虑CSRF,Django的文档认为只有特别特殊的情形下,才用该修饰符,如果在提交表单的地方用这个修饰符那么就会有CSRF攻击。   SQL注入攻击保护(SQL injection protection)   SQL注入是在SQL里面隐藏一些用户故意附带的脚本去数据库里执行的行为,Django的QuerySet会跳过大部分这类隐藏的脚本。   点击劫持攻击保护(Clickjacking)   点击劫持通常发生在一个站点A把站点B的内容放在一个frame里来伪装,例如,站点B是一个购物站点,里面有个‘确定购买’的按钮,站点A有个按钮‘赞’,站点A把站点B包装在一个frame里,调整这个frame让用户看不到,然后当用户点了A站点的‘赞’,A站点就自动调用Javascript去点击B站点的‘确定购买’。   Django防止此类劫持攻击的方法是在MIDDLEWARE_CLASSES里面加上:   'django.middleware.clickjacking.XFrameOptionsMiddleware',   开启SSL/HTTPS   需要根据自己的情况来开启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是允许访问的   原文链接:http://www.maiziedu.com/wiki/django/safe/

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

3162 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传