当前位置: 首页 > 网络应用技术

如何安全地设置Django(2023年的最新完成)

时间:2023-03-07 23:41:45 网络应用技术

  简介:许多朋友问有关Django如何安全设置的问题。本文的首席CTO注释将为您提供详细的答案,以供您参考。我希望这对每个人都会有所帮助!让我们一起看看!

  Django Post的解决方案为403。据说从Django1.x中添加了CSRF保护。

  CSRF(跨站点请求伪造的跨站点请求伪造,也称为“一次点击攻击”或骑行,通常被缩写为CSRF或XSRF,这是对网站的恶意使用。尽管听起来像是跨站点脚本(XSS),但它与XSS大不相同,并且攻击方法几乎留在左侧。XSS使用网站中的信任用户,而CSRF使用受信任用户的请求使用Comouflage的信任网站。与之相比。XSS攻击,CSRF攻击通常经常攻击攻击。并不是很受欢迎(因此,预防的资源非常稀缺),也难以防止它,因此被认为比XSS更危险。

  错误:禁止(403)

  CSRF序言失败了。请求中止

  失败的原因:CSRF代币任务或不正确。

  通常,当有Geenuine Cross Site请求伪造或Django的CSRF机制之前,这可能会发生这种情况。对于帖子表格,您需要诱使:

  您的浏览器正在访问cookie。

  视图函数使用模板而不是上下文使用RequestContext。

  在模板中,每个针对内部URL的帖子表单中都有一个{%CSRF_Token%}模板标签。

  如果您不使用CSRFViewMiddleware,则必须在使用CSRF_Token Template标签的任何视图上使用CSRF_PROTECT,作为接受时间的一个。

  您正在查看此页面的帮助部分,因为您在Django设置文件中debug = true。将其更改为false,只有初始错误消息才会潜水。

  您可以使用CSRF_FAILURE_VIEW设置来汇总此页面。

  在线查找解决方案,说提交参数中必须有CSRF_Token才能成功。但是Internet是1.3或1.4版本的解决方案,可以在1.5版中使用。

  在1.5.1版中,可行解决方案有三种类型:

  一:

  关闭CSRF Protection函数。ADD@CSRF_EXEMPT修饰符至视图功能。

  来自django.views.decorators.csrf导入csrf_exempt@csrf_exemptdef视图(请求):#your代码...当然不要那么安全。

  二:在模板文件中,每个表单提交域都添加了{%csrf_token%}标签,并使用渲染函数返回视图,或强行使用requestContext代替contect.example.example:from Django.shortcuts import renderdef联系(请求replect RenderDef Contact(请求)):form = contactform()#here i使用django表返回渲染(请求,'contact.html',{'form':form})

  或者:

  

  content.html内容:

  htmlheadstyle type =“ text/css” ul.errorlist {margin:0;填充:0;} .Errorlist li {background-color:red;白颜色;显示:块;;填充:4px 5px;}/style titlesend/headbody h1contact us/h1 form action =“ method =”}/div class =“ field” {{form.email.errrs}}} babel for =“ id_email”:/label {form.email}}/div div class =“ field” field'field'field.message.error}}} labelfor =“ id_message”消息: /label {{form.message} /div Input type =“ submit” value =“ submit” / /form /form /form /hody /html

  三:

  方法2显然只能在Django模板中受到限制。如果我们使用JavaScript或Ajax怎么办?如何添加CSRF_Token怎么办?

  我们可以使用JavaScript在cookie中提取CSRF_Token。

  ;i ++){var cookies = jquery.trim(cookies [i]);if(cookie.substring(0,name.length + 1)==(name +'=')){cookievalue =解码(cookinenenenenenenenenenenenenenenenenentname.length + 1)));break;}}}返回cookievalue;}

  否则这很容易理解:

  函数getCookie(name){var ancookie = document.cookie.split(“;”);for(var i = 0; iacookie.length; i ++){var ancrumbie [i] .split(“ =”);if(name == acrumb [0])返回(acrumb [1]);} return null;}

  在ajax:$ .post(url,{“ csrfmiddletoken”:getCookie('csrftoken')},function(data){alert(data);});

  但有一个问题。当有新用户访问此页面时,cookie中没有CSRFTOKEN。仅通过执行第二种方法可以在cookie中生成CSRFTOKEN值。解决此问题的方法然后进行更新。

  它可以完全满足简单电台的需求。

  先决条件

  1.为Python应用程序安装Virtualenv和Virtualenv包装器,目的是为Python项目创建一个独立的环境。

  ●安装PIP

  sudo apt-get安装python pip

  ●安装Virtualenv

  sudo pip安装virtualenv

  ●创建一个目录以存储您的Virtualenv

  mkdir?/.virtualenvs

  ●安装VirtualenWrapper

  sudo pip安装virtualenvwrapper

  ●将workon_home设置为您的Virtualenv目录

  export workon_home =?/.virtualenvs

  ●将workon_home设置为您的Virtualenv目录

  export workon_home =?/.virtualenvs

  ●添加virtualenvwrapper.sh到.bashrc

  将此行添加到?/.bashrc的末尾,以加载virtualenvwrapper命令./usr/local/bin/bin/virtualenvwrapper.sh

  退出,然后打开外壳,或使用.bashrc或source?/.bashrc命令重新加载.bashrc,然后一切准备就绪。

  2.安装git。

  apt-get安装git

  3.将NGINX作为Web服务器安装,以便您以后运行应用程序。

  sudo apt-get安装nginx

  启动您的第一个Linux实例

  接下来,我将介绍使用阿里巴巴云管理控制台运行ECS实例的相关步骤。

  1.登录到您的帐户,然后导航到“产品和服务”部分下的“云服务器”。单击侧baroon菜单的概述。这显示了在操作中的实例列表。单击“购买实例”来自任何区域的示例,或继续在下一步中创建一个新示例。

  2.单击“侧边栏”菜单中的实例。选择示例列表中所需的区域,然后单击“上限”中的创建实例。

  3.系统将使您重组为“产品购买”控制台。在这里,您需要选择首选的资源软件包,为ECS实例和数据传输提供特殊定价的主要资源包,或者提供两个高端购买资源包,并带有两个定价模型,您可以根据自己的需求选择订阅(每月或年度)- 年)或付款。在这种情况下,我们选择“按数量付款”。

  4.在此窗口中,在此窗口中选择ECS实例的数据中心区域和可用性区域。如果选择该区域,但是未选择可用区域,则系统将随机将实例放置在任何区域中。

  5.现在您需要选择要创建的实例类型。根据您自己的需求,从“生成”选项卡中选择表单类型类型。生成类型代表基于配置使用的计算能力和使用的计算。

  6.接下来,选择网络类型以启动您的ECS实例。您可以根据自己的需要选择经典网络或专有网络。在经典网络中,阿里巴巴云以分布式方式分配IP地址。它适合用户谁需要简单,快速地使用EC。专有网络更像是一个逻辑隔离的专用网络,它支持专用连接。它适合熟悉网络管理的用户。选择适当的网络类型后,选择在线计费类型:数据传输或固定带宽。在这两种情况下,您需要设置一个网络频段范围峰值(最大数据传输速率)。

  7.现在您需要选择操作系统。每个选项下提供了不同操作系统版本的列表。选择Ubuntu。

  8.根据您自己的需求,从drop -down菜单中选择系统磁盘类型。您还可以通过单击“添加磁盘”将更多磁盘添加到此列表中。

  9.在“安全设置”部分中,您可以创建一个密码以提高安全性,或在此阶段跳过此步骤,并在后来从管理控制台执行此操作。

  10.在“采购计划”部分中,输入您的实例名称并设置要启动的实例数。

  11.在“概述”部分中查看配置详细信息和总价格,然后单击立即购买。

  12.单击以打开确认业务订单并开始实例。

  13.启动实例后,您可以在“控制台实例”选项卡中查看实例。

  安装和部署Django应用程序

  您已经使用了阿里巴巴云管理控制台来创建和启动ECS实例,并让我们了解如何安装和部署Django应用程序。

  1.使用SSH命令登录到您的服务器

  2.输入密码

  3.通过创建一个新的Virtualenv来部署Django应用程序来设置环境:

  mkvirtualenv djangoapp

  要退出新的Virtualenv,请使用停用。

  您可以使用workon。在环境之间进行切换。加载或在virtualenv之间切换,使用workon命令:workon djangoapp

  4.在您当前的环境中安装Django

  PIP安装Django

  5.使用django-admin命令创建示例项目,然后将目录更改为项目文件夹。

  django-admin startproject todoapp

  CD TodoApp/

  6.迁移或指导您的数据库。

  python manage.py迁移

  7.创建超级用户以访问管理面板。

  python manage.py createSuperuse

  8.设置用户后,通过运行由manage.py操作的RunServer命令来测试您的应用程序

  python manage.py runserver 0.0.0.0:8000

  您将看到以下在端口8000上运行的内容

  转到 /管理员,这是您的管理面板,您可以在此处管理应用程序。

  现在,使用NGINX将应用程序放置在Web服务器后面。

  9.创建一个数据库体系结构以打开Python环境。

  ●将目录更改为Django Project目录

  ●运行以下命令

  python manage.py迁移

  10.收集所有静态文件(CSS,JS等)

  ●运行以下命令以在任何特定位置收集所有静态文件

  python manage.py collectstatic -noinput

  ●开发人员负责将static_url路径设置为收集所有静态文件的位置。

  ●这些变量在项目目录中的设置中定义。

  1. static_url

  2. staticfiles_dirs

  3. static_root

  11.使用UWSGI服务器安装UWSGI库并启动服务器。

  PIP安装UWSGI

  ●创建ini file vim uwsgi.ini,部署到部署Django应用程序

  ●将其保存到应用程序目录上的uwsgi.ini。有关如何编写INI文件的更多了解,请参阅Python/wsgi应用程序以快速启动。运用此命令来启动您的应用程序。

  uwsgi uwsgi.ini(您的INI文件)

  12.更改应用程序的NGINX配置文件。

  /UWSGI.SOCK;}}

  13.重新启动nginx,然后您的应用程序将在端口80上启动和运行。

  以下是两个线程:

  导入Java.util。*;

  公共类Thread_list_operation {

  //假设有这样的队列

  静态列表= new LinkedList();

  公共静态void main(string [] args){

  线程t;

  t =新线程(new T1());

  t.start();

  t =新线程(new T2());

  t.start();

  }

  }

  //线程T1,用于添加新元素以列出

  T1类实现运行{

  void getelemt(object o){

  thread_list_operation.list.add(o);

  system.out.println(thread.currentthread()。getName() +“将元素添加到队列”);

  }

  @Override

  public void run(){

  for(int i = 0; i 10; i ++){

  getelemt(新Integer(1));

  }

  }

  }

  //线程T2,用于添加新元素以列出

  T2类实现运行{

  void getelemt(object o){

  thread_list_operation.list.add(o);

  system.out.println(thread.currentthread()。getName() +“将元素添加到队列”);

  }

  @Override

  public void run(){

  for(int i = 0; i 10; i ++){

  getelemt(新Integer(1));

  }

  }

  }

  //结果(混乱)

  thread-0将元素添加到队列

  Thread-1将元素添加到队列中

  thread-0将元素添加到队列

  Thread-1将元素添加到队列中

  Thread-1将元素添加到队列中

  Thread-1将元素添加到队列中

  Thread-1将元素添加到队列中

  Thread-1将元素添加到队列中

  Thread-1将元素添加到队列中

  Thread-1将元素添加到队列中

  Thread-1将元素添加到队列中

  Thread-1将元素添加到队列中

  thread-0将元素添加到队列

  thread-0将元素添加到队列

  thread-0将元素添加到队列

  thread-0将元素添加到队列

  thread-0将元素添加到队列

  thread-0将元素添加到队列

  thread-0将元素添加到队列

  thread-0将元素添加到队列

  结论:以上是首席CTO的所有内容都注明了Django如何安全地为所有人设置。感谢您阅读本网站的内容。我希望这对您有帮助。有关如何安全地设置Django的更多相关内容,请不要忘记此网站上的信息。