分享
  1. 首页
  2. 主题
  3. Python

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

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

跨站脚本安全保护(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

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

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)