精华内容
下载资源
问答
  • 目录遍历(也称为文件路径遍历)一个Web安全漏洞,攻击者可以利用该漏洞读取运行应用程序的服务器上的任意文件。这可能包括应用程序代码和数据,后端系统的凭据以及敏感的操作系统文件。在某些情况下,攻击者可能...

    5a557e13d8b870366f31e73ea0018ed9.png

    目录遍历

    翻译文章,原文:Directory traversal


    在本节中,我们将解释什么是目录遍历,描述如何进行路径遍历攻击并规避常见障碍,并阐明如何防止路径遍历漏洞。

    7e88d4ec100376f53a077f0f329c108f.png

    什么是目录遍历漏洞?

    目录遍历(也称为文件路径遍历)是一个Web安全漏洞,攻击者可以利用该漏洞读取运行应用程序的服务器上的任意文件。这可能包括应用程序代码和数据,后端系统的凭据以及敏感的操作系统文件。在某些情况下,攻击者可能能够在服务器上写入任意文件,从而允许他们修改应用程序数据或行为,并最终完全控制服务器。

    通过目录遍历读取任意文件

    考虑一个显示要出售商品图像的购物应用程序。图像通过一些HTML加载,如下所示:

    <img src="/loadImage?filename=218.png">

    loadImage URL使用 filename 参数,并返回指定文件的内容。映像文件本身存储在磁盘上的 /var/www/images/ 位置。为了返回图像,应用程序将请求的文件名附加到此基本目录,并使用文件系统API读取文件的内容。在上述情况下,应用程序将从以下文件路径读取:

    /var/www/images/218.png

    该应用程序没有针对目录遍历攻击采取任何防御措施,因此攻击者可以请求以下URL从服务器的文件系统中检索任意文件:

    https://insecure-website.com/loadImage?filename=../../../etc/passwd

    这将导致应用程序从以下文件路径读取:

    /var/www/images/../../../etc/passwd

    顺序../在文件路径中有效,表示在目录结构中上一级。三个连续的../序列从/var/ www/images/升至文件系统根目录,因此实际读取的文件为:

    /etc/passwd

    在基于Unix的操作系统上,这是一个标准文件,其中包含在服务器上注册的用户的详细信息。

    在Windows上,../和..都是有效的目录遍历序列,而检索标准操作系统文件的等效攻击为:

    https://insecure-website.com/loadImage?filename=......windowswin.ini

    利用文件路径遍历漏洞的常见障碍

    许多将用户输入置于文件路径中的应用程序实施了某种针对路径遍历攻击的防御措施,而这些防御措施通常可以被规避。

    如果应用程序从用户提供的文件名中剥离或阻止目录遍历序列,则可能可以使用多种技术绕过防御。

    您也许可以使用文件系统根目录中的绝对路径(例如filename=/etc/passwd)直接引用文件,而无需使用任何遍历序列。

    您可能可以使用嵌套的遍历序列,例如....//..../,当内部序列被剥离时,它们将还原为简单的遍历序列。

    您可能可以使用各种非标准编码(例如..%c0%af..%252f)来绕过输入过滤器。

    如果应用程序要求用户提供的文件名必须以所需的基本文件夹(例如/var/www/images)开头,则可以包括所需的基本文件夹,后跟适当的遍历序列。例如:

    filename=/var/www/images/../../../etc/passwd

    如果应用程序要求用户提供的文件名必须以预期的文件扩展名(例如.png)结尾,则可能可以使用空字节有效地终止所需扩展名之前的文件路径。例如:

    filename=../../../etc/passwd%00.png

    如何防止目录遍历攻击

    防止文件路径遍历漏洞的最有效方法是避免将用户提供的输入完全传递给文件系统API。可以重写许多执行此操作的应用程序功能,以更安全的方式提供相同的行为。

    如果认为不可避免的是将用户提供的输入传递给文件系统API,则应同时使用两层防御,以防止受到攻击:

    • 应用程序应在处理之前验证用户输入。理想情况下,验证应与允许值的白名单进行比较。如果所需的功能无法做到这一点,则验证应验证输入内容仅包含允许的内容,例如纯字母数字字符。
    • 验证提供的输入后,应用程序应将输入附加到基本目录,并使用平台文件系统API规范化路径。它应验证规范化路径以预期的基本目录开头。

    以下是一些简单的Java代码示例,用于根据用户输入来验证文件的规范路径:

    File file = new File(BASE_DIRECTORY, userInput);
    if (file.getCanonicalPath().startsWith(BASE_DIRECTORY)) {
        // process file
    }
    展开全文
  • AD FS(联合身份验证)一种身份访问解决方案,即使用户帐户和应用程序位于完全不同的网络或组织中,它也可以为客户端计算机(网络内部...托管应用程序或服务的Web服务器通常需要它们,以便它可以做出最适当的授权决.

    AD FS(联合身份验证)是一种身份访问解决方案,即使用户帐户和应用程序位于完全不同的网络或组织中,它也可以为客户端计算机(网络内部或外部)提供对受保护的面向Internet的应用程序或服务的无缝SSO访问(单点访问)。

     

    概述

    1、AD FS概述

    当应用程序或服务位于一个网络中,而用户帐户位于另一网络中,通常,用户尝试访问该应用程序或服务时,系统会提示用户输入辅助凭据。这些辅助凭据代表应用程序或服务所在的领域中用户的身份。托管应用程序或服务的Web服务器通常需要它们,以便它可以做出最适当的授权决策。

     

    借助AD FS,组织可以通过提供信任关系(联合身份验证信任)来绕过对辅助凭据的请求,这些组织可以使用该信任关系来投影用户的数字身份和对可信合作伙伴的访问权限。在这种联合环境中,每个组织都继续管理自己的身份,但是每个组织也可以安全地投影并接受其他组织的身份。

     

    联合身份验证是一个跨组织和平台边界实现标识、身份验证和授权的过程。

     

    联合身份验证需要两个组织或实体之间的信任关系,并允许组织保留对资源访问和自己的用户和组帐户的控制权。当您希望跨该边界时(域服务作为组织边界),这是与 Active Directory 域服务相比一个不错的优势。它将包含您的组织的用户、计算机、组和其他对象。Active Directory 联合身份验证服务所允许的是一方面信任管理资源,一方面管理帐户。

     

    2、AD FS的应用场景概述

    AD FS可应用于何种场景?以应用对象来看,这会产生在企业之间、企业与员工之间、多个Web应用程序之间等等。因此会有如下的联合身份验证方案:

     

    企业到企业的联合:

    如果我要连接到某个合作伙伴组织并允许在我的应用程序中使用其帐户,或者在其应用程序中使用我的帐户。

     

    企业到消费者或企业到员工的联合(Web 单一登录方案):

    使企业能够为业务合作伙伴或拥有独立域的其他业务部门提供单一登录。此服务允许拥有外围网络域的企业提供对内部用户帐户的身份验证。

    例如,我在工作时可以轻松登录到内部网站。我已登录我的计算机;它使用的是已获得的身份验证凭据。我在一天结束后回家。我想访问这些相同的资源,可以实现这个想法吗?

     

    它允许我通过外部路径登录到这些资源并使用联合身份验证服务将我的内部域帐户连接到此外部资源来实现这个想法,同时允许我使用相同的凭据。

     

    跨多个Web 应用程序的组织内的联合:

    如果出于某些原因,您的组织具有使用不同的、可能不同的身份验证存储或无法通过 Windows 本身自动授权用户的不同身份验证机制的 Web 应用程序,则您可以使用这个方案。对于这种情况,您还可以使用联合身份验证服务。

     

    3、企业部署过程概述

    在AD FS的企业部署中,我们通常是在已有AD域中进行部署。关于加域部分将不再赘述,直接阐述AD FS的部署过程。建议AD FS代理服务器不加入域环境并部署在DMZ区域。在部署过程中,强烈建议关注证书、域要求、权限等内容。

     

    部署过程主要有以下步骤:

    • 部署ADFS 群集NLB
    • ADFS 安装与配置
    • 部署ADFS 代理服务器(WAP)群集NLB
    • ADFS 代理服务器(WAP)安装与配置

     

    关键概念

    AD FS管理台界面如下图所示:

    1、AD FS相关术语

    账户伙伴组织

    由联合身份验证服务中的声明提供方信任表示的联合身份验证伙伴组织。帐户伙伴组织包含将访问资源合作伙伴中基于Web的应用程序的用户。

     

    账户联合服务器

    账户伙伴组织中的联合服务器。账户联合服务器基于用户身份验证向用户颁发安全令牌。服务器对用户进行身份验证、从特性存储中提取相关属性和组成员身份信息、将此信息打包到声明中,并生成和签名安全令牌(包含声明)以返回给用户(可在以下两种情况下使用,自己的组织或将其发送给合作伙伴组织)。

     

    AD FS 配置数据库

    一个数据库,用于存储代表单个AD FS实例或联合身份验证服务的所有配置数据。此配置数据可以存储在SQL Server数据库中,也可以使用Windows Server 2016,Windows Server 2012和2012 R2以及Windows Server 2008和2008 R2附带的Windows内部数据库(WID)功能存储。

     

    可以使用Fsconfig.exe命令行工具为SQL Server创建AD FS配置数据库,也可以使用AD FS联合身份验证服务器配置向导为Windows内部数据库创建AD FS配置数据库。

     

    声明提供方

    向其用户提供声明的组织。请参阅账户伙伴组织。

     

    声明提供方信任

    在中的 AD FS 管理 "管理单元-中,声明提供方信任通常是在资源伙伴组织中创建的信任对象,以表示信任关系中的组织,该组织的帐户将访问该资源伙伴组织中的资源。声明提供方信任对象由多种标识符、名称和规则组成,这些标识符、名称和规则可标识此伙伴到本地联合身份验证服务。

     

    本地声明提供程序信任

    表示AD FS服务器场中基于AD LDS或第三方LDAP的目录的信任对象。本地声明提供程序信任对象由各种标识符、名称和规则组成,用于标识此基于LDAP的目录到本地联合身份验证服务。

     

    联合元数据

    用于在声明提供方和信赖方之间配置通信信息,以便正确配置声明提供方信任和信赖方信任的数据格式。数据格式在安全性声明标记语言(SAML)2.0中定义,并在WS-Federation中扩展。

     

    联合服务器

    已使用AD FS联合身份验证服务器配置向导配置为充当联合身份验证服务器角色的Windows Server。联合身份验证服务器颁发令牌,并作为联合身份验证服务的一部分。

     

    联合服务器代理

    已使用 AD FS 联合服务器代理配置向导进行配置,以充当 Internet 客户端和位于企业网络防火墙后面的联合身份验证服务之间的中间代理服务的 Windows 服务器。

    主联合服务器

    在联合服务器角色中使用 AD FS 联合服务器配置向导配置的 Windows Server,并且具有 AD FS 配置数据库的读/写副本。

     

    当您使用“ AD FS联合身份验证服务器配置向导”并选择用于创建新联合身份验证服务以使该计算机成为服务器场中的第一台联合身份验证服务器的选项时,将创建主联合身份验证服务器。

     

    此服务器场中的所有其他联合服务器必须将在主联合服务器上所做的更改复制到本地存储的AD FS配置数据库的只读副本。由于所有联合服务器可以平等地读取和写入到存储在 SQL Server 上的配置数据库,AD FS 配置数据库存储在 SQL 数据库时,术语“主联合服务器”不适用。

     

    信赖方

    接收和处理声明的组织。请参阅资源伙伴组织。

     

    信赖方信任

    在“AD FS管理”管理单元中,信赖方信任是通常在以下情况中创建的信任对象:

    • 帐户伙伴组织,代表信任关系中的组织,其帐户将访问资源合作伙伴组织中的资源。
    • 资源伙伴组织,用于表示联合身份验证服务与单个基web的应用程序之间的信任。

     

    信赖方信任对象由各种标识符、名称和规则组成,用于此伙伴或本地联合身份验证服务的Web应用程序。

     

    资源联合服务器

    资源伙伴组织中的联合服务器。资源联合服务器通常基于由帐户联合服务器颁发的安全令牌来向用户颁发安全令牌。

     

    服务器接收安全令牌、验证签名、将声明规则逻辑应用到未打包的声明以产生所需的传出声明,并根据传入的安全令牌中的信息生成新的安全令牌(带有传出声明),并对新的令牌进行签名以返回到用户,最终返回到 Web 应用程序。

     

    资源伙伴组织

     

    由联合身份验证服务中的信赖方信任表示的联合身份验证伙伴。资源伙伴颁发基于声明的安全令牌,其中包含帐户伙伴中的用户可以访问的基于 Web-发布的应用程序。

    2、特性存储-角色

    Active Directory 联合身份验证服务使用术语“特性存储”来指代组织用来存储其用户帐户及其相关属性值的目录或数据库。

     

    在身份提供者组织中进行配置后,AD FS 从存储中检索这些属性值并基于该信息创建声明,以便在信赖方组织中托管的Web应用程序或服务可以在联合用户(其帐户存储在身份提供者组织中的用户)尝试访问该应用程序或服务时做出适当的授权决策。

     

    特性存储如何符合 AD FS 部署目标

    用户特性存储的位置以及用户进行身份验证的位置决定了如何设计AD FS以支持用户身份。根据特性存储库的位置以及用户访问应用程序的位置(在Intranet或Internet中),可以使用以下部署目标之一:

    • 为您的Active Directory用户提供对声明感知的应用程序和服务的访问权限:在此目标中,组织用户在以下情况下访问受AD FS保护的应用程序或服务(您自己的应用程序或服务或合作伙伴的应用程序或服务) 登录到公司Intranet中的Active Directory。
    • 为您的Active Directory用户提供对其他组织的应用程序和服务的访问权限:在此目标下,组织用户可以在以下情况下访问受AD FS保护的应用程序或服务(您自己的应用程序或服务或合作伙伴的应用程序或服务),当他们登录到公司Intranet中的特性存储以及从Internet远程登录。
    • 向另一组织中的用户提供对声明感知应用程序和服务的访问权限:在此目标中,另一个组织中位于该组织企业 intranet 上特性存储中的用户帐户必须访问 AD FS-组织中受保护的应用程序。当位于组织外围网络特性存储中的基于使用者的用户帐户必须提供对您组织中受 AD FS 保护的应用程序的访问权限时,此目标也适用。

     

    AD FS 支持的特性存储

    AD FS 支持范围广泛的目录和数据库存储,可用于提取管理员-定义的属性值并使用这些值填充声明。AD FS 支持任何以下目录或数据库作为特性存储:

    • Windows server 2003 中的 Active Directory, (Active Directory 域服务) windows server 2008 中的 AD DS,windows server 2012 和 2012 R2,以及 windows server 2016 中的 AD DS。
    • 所有版本的 Microsoft SQL Server 2005、SQL Server 2008、SQL Server 2012、SQL Server 2014 和 SQL Server 2016。
    • 自定义特性存储。

     

    3、声明-角色

    在基于声明的身份模型中,声明在联合过程中起着至关重要的作用。它们是确定所有基于Web的身份验证和授权请求结果的关键组件。此模型支持组织以一种标准化方法跨安全和企业界限安全地投影数字标识和权限或声明。

     

    什么是声明?以最简单的形式来说,声明是关于用户的简单声明(例如,名称,身份,组),主要用于授权访问Internet上任何位置的基于声明的应用程序。每个语句对应一个存储在声明中的值。

     

    获取声明来源

    Active Directory 联合身份验证服务 (AD FS) 中的联合身份验证服务定义哪些声明在联合伙伴之间交换。但是,在它可以执行此操作前必须首先借助检索到的或计算的值填充或获取声明来源。每个声明值表示用户、组或实体的值,并且以下列两种方式之一获取来源:

    • 从特性存储中检索构成声明的值时,例如,从 Active Directory 用户帐户的特性中检索销售部门的属性值时。
    • 在传入声明的值转换为另一个基于在规则中表示逻辑的值时。例如,当具有域管理员值的传入声明作为传出声明发送之前,转换为管理员的新值时。

     

    声明可以包含诸如电子-邮件地址、用户主体名称 (UPN)、组成员身份和其他帐户属性之类的值。

     

    声明流

    其他方依赖于声明的值来为其所托管的基于 Web 的应用程序执行授权任务。这些参与方在“AD FS管理”管理单元中称为“信赖方”。

     

    联合身份验证服务负责协调许多不同参与方之间的信任关系。它被设计为用于处理和流动来自最初源声明(也称为-AD FS声明提供方)的受信任声明交换,并将其传递给信赖方。然后信赖方使用这些声明做出授权决定。

     

    使用此过程的声明流称为声明管道。通过声明管道的声明流有三个步骤:

    • 从声明提供方收到的声明由声明提供方信任上的接受转换规则进行处理。这些规则可确定哪些声明接受自声明提供方。
    • 接受转换规则的输出用作颁发授权规则的输入,这些规则可确定是否允许用户访问信赖方。
    • 接受转换规则的输出用作颁发转换规则的输入,这些规则可确定将发送到信赖方的声明。

     

    声明颁发的方式

    在编写声明规则时,声明规则根据传入声明源是在声明提供方信任还是在信赖方信任上,编写规则不同。在为声明提供方信任编写声明规则时,传入声明是从受信任声明提供方发送到联合身份验证服务的声明。在为信赖方信任编写规则时,传入声明是由适用的声明提供方信任的声明规则输出的声明。

     

    声明说明

    声明说明表示 AD FS 支持且可在联合元数据中发布的声明类型的列表。

     

    将发布到联合元数据的声明说明集合存储在 AD FS 配置数据库中。这些声明说明用于联合身份验证服务的各个组件。

     

    每个声明说明包括声明类型 URI、名称、发布状态和描述。您可以使用“ AD FS管理”管理单元中的“声明描述”节点来管理声明描述集合。您可以使用管理单元修改声明说明的发布状态。可以使用以下设置:

    • 在联合元数据中发布此声明作为此联合身份验证服务可以接受(发布为已接受)的声明类型:指示此联合身份验证服务将从其他声明提供方接受的声明类型。
    • 在联合元数据中发布此声明作为此联合身份验证服务可以发送(发布为已发送)的声明类型:指示此联合身份验证服务提供的声明类型。它们作为联合身份验证服务愿意发送给其他服务的声明类型。声明提供方发送的实际声明类型通常是此列表的子集。

    4、声明规则-角色

    声明的转换规则(通过 Claim Engine执行),规则即:如果服务器收到声明A,则颁发声明B,ADFS向外(relying party应用)发出的声明受claim rule约束,需要在claim rules事先约定(需要进行转换/映射)。

    5、声明管道-角色

    Active Directory 联合身份验证服务(ADFS)中的声明管道表示声明在发出之前必须遵循联合身份验证服务的路径。该联合身份验证服务管理通过声明管道的各个阶段(也包括声明规则引擎处理声明规则)对声明进行流动的整个端到端过程。

     

    声明管道过程由三个高级-阶段组成。此过程中的每个阶段都初始化声明规则引擎以处理特定于该阶段的声明规则。这些阶段(的出现)顺序如下:

    • 接受传入声明 — 声明管道中的此阶段用于从令牌中提取传入声明并消除不需要或受信任的声明。提取这些声明之后,会运行组成声明提供方信任的接受转换规则集的接受规则。这些规则可以用于传递或添加新声明,这些声明随后可以在声明管道的后续阶段中使用。此阶段的输出用作第二个和第三个阶段的输入。
    • 授权声明请求者 — 此阶段由声明引擎用于基于是否允许令牌请求者获取给定信赖方的令牌来发出允许或拒绝声明。但是,需要先运行组成信赖方信任的发出授权规则集或委派授权规则集的授权规则,然后才能进行此阶段。
    • 发出传出声明 — 此阶段用于发出传出声明并沿管道发送它们(它们在管道中会打包为安全令牌)。但是,需要先运行组成信赖方信任的发出转换规则集的发出规则(这会确定将作为传出声明发出的声明),然后才能进行此阶段。

     

    上面所有三个阶段都执行声明规则处理,但使用不同的规则集。如上所述,每个阶段都有一组基于传入声明的发布者(受理规则)或为其发布声明的目标服务(授权和发布规则)的关联规则。

     

    声明与令牌无关,但通过封装在安全令牌中的网络传输。不管传入或传出安全令牌的格式如何,声明规则都会对声明进行操作。

     

    声明规则包含管理员-定义的逻辑,声明引擎通过该逻辑接受传入声明、基于请求者的身份授权声明,并颁发信赖方所需的声明。最后,由声明引擎确定哪些声明将进入在声明流过声明管道之后颁发的安全令牌中。

     

    如下图所示,声明管道负责将声明流过各个管道阶段的整个-端-到端过程,以便最终获得发出的声明,该声明将通过信赖参与方信任。图中的传出声明表示发出的声明。

    6、声明引擎-角色

    声明引擎(Claims Engine)是联合身份验证服务中的唯一实体,负责在您配置的所有联合信任关系中运行每个规则集(Claims Rule),并将输出结果移交给声明管道(Claims Pipeline)。

    7、AD FS 中的URL

    统一资源标识符(URI)是用作唯一标识符的字符串。在 AD FS 中,URI 用于标识合作伙伴网络地址和配置对象。用于标识合作伙伴网络地址时,URI 始终是 URL。用于标识配置对象时,URI 可以是 URN,也可以是 URL。

     

    用作合作伙伴网络地址的URI

    下表介绍了 AD FS 中的管理员最常处理的标识符:

    信赖方标识符的URI 前缀匹配

    URI 的路径语法按层次结构组织,并由所有 "/" 字符或所有 ":" 字符分隔。因此,该路径可以基于分隔字符拆分为多个路径部分。当前缀匹配时,每个部分必须与这些规则控制匹配大小写的匹配规则完全匹配。

     

    在向联合身份验证服务发出的请求中标识信赖方时,AD FS 将使用前缀匹配逻辑来确定 AD FS 配置数据库中是否有匹配的信赖方信任。

     

    例如,如果 AD FS 配置(数据库 URI1)中的信赖方标识符是传入请求(URI2)中信赖方标识符的前缀,则必须满足以下条件:

    • 必须忽略(结尾分隔符斜杠)和路径节或颁发机构的冒号。
    • URI1 和 URI2 的方案和授权部分必须完全匹配(不区分大小写)。
    • URI1 的每个路径部分必须与 URI2 的(相应路径部分所选)的区分大小写完全匹配。
    • URI2 的路径部分可以比 URI1 多,但 URI1 的路径部分不能比 URI2 多。
    • URI1 的路径部分不能比 URI2 多。
    • 如果 URI1 具有查询字符串,它必须与 URI2 查询字符串完全匹配。
    • 如果 URI1 具有片段,它必须与 URI2 片段完全匹配。

     

    AD FS 原理

    下图为ADFS的整体过程(集成了Azure环境):

    1、关键原理

    • 用户向ADFS为访问APPX请求令牌(有生存周期)。
    • ADFS验证用户身份,向AD进行验证。
    • 验证通过,为其颁发可访问APPX的安全令牌(该安全令牌中包含了此用户的声明)。
    • 用户用此安全令牌可访问该应用程序。

    2、企业到员工的联合

    1. 用户浏览app(信任STS),身份未得到验证。
    2. 重定向到ADFS的STS以请求安全令牌。
    3. AD FS向AD进行该用户的验证,验证通过,查询其用户属性并颁发带有声明的安全令牌。
    4. 用户用此安全令牌进行对app的访问。
    5. 验证通过,app向用户返回cookies和页面。

    3、企业到企业的联合

    用户-合作伙伴的、app-你的环境中的:

    • 伙伴用户浏览你的app,身份未得到验证,但获知你ADFS STS的URL。
    • 重定向到你的STS(Security Token Service),该用户非你组织的,你的ADFS通过主领域发现将其组织的ADFS STS的URL返回。
    • 重定向到其组织的STS为其请求ST(安全令牌)。
    • 其组织的STS向其AD进行验证。
    • 验证通过,返回其组织STS颁发的ST。
    • 再次重定向到你的STS,你的STS对其组织颁发的ST进行处理。
    • 返回一个新的可用于访问你的app的ST。
    • 伙伴用户向你的app 发送新ST。
    • app验证通过,为伙伴用户返回cookies和页面。

     

    总结

    前面为大家介绍联合身份验证是一个跨组织和平台边界实现标识、身份验证和授权的过程,极大的扩充了web应用的能力,并梳理了AD FS相关的概念和知识,最后展示其运作的原理,希望借由了解AD FS能帮助到大家日常的IT运维和运营工作。下期我们将继续扩大为大家分享AD FS的企业部署,把部署前的各种要求、准备及实施进行讨论。

     

    其他优质文章

    【并发操作】协程,线程,进程是什么,在python中怎么应用?

    恭喜!蓝鲸DevOps平台助力中国人保财险通过DevOps持续交付标准3级!

    【爱婴岛】千店千面多元母婴零售,云化系统支持业务发展!

    持续集成频繁的代码检查怎么办,了解下自动化的静态代码检查!

    【深度分析】关于SPN不正确导致SQL数据库连接失败

     

    展开全文
  • 用于与ParoxityEcon交互的Web界面,ParoxityEconPocketMine-MP服务器的插件,提供对多种货币的支持。 当前仅支持基于MySQL的数据库。 如何使用? 在继续进行任何操作之前,请确保至少已运行一次插件。 接下来,...
  • 2020/07/06Hey,今天给大家介绍一款生产力工具jupyter notebook,这一款强大的web应用,具体如下:一、什么是Jupyter Notebook?1. 简介Jupyter Notebook基于网页的用于交互计算的应用程序。其可被应用于全过程...

    2020/07/06

    Hey,今天给大家介绍一款生产力工具jupyter notebook,这是一款强大的web应用,具体如下:

    一、什么是Jupyter Notebook?

    1. 简介

    Jupyter Notebook是基于网页的用于交互计算的应用程序。其可被应用于全过程计算:开发、文档编写、运行代码和展示结果。——Jupyter Notebook官方介绍

    简而言之,Jupyter Notebook是以网页的形式打开,可以在网页页面中直接编写代码和运行代码,代码的运行结果也会直接在代码块下显示的程序。如在编程过程中需要编写说明文档,可在同一个页面中直接编写,便于作及时的说明和解释。

    2. 组成部分

    ① 网页应用

    网页应用即基于网页形式的、结合了编写说明文档、数学公式、交互计算和其他富媒体形式的工具。简言之,网页应用是可以实现各种功能的工具。

    ② 文档

    即Jupyter Notebook中所有交互计算、编写说明文档、数学公式、图片以及其他富媒体形式的输入和输出,都是以文档的形式体现的。

    这些文档是保存为后缀名为.ipynbJSON格式文件,不仅便于版本控制,也方便与他人共享。

    此外,文档还可以导出为:HTML、LaTeX、PDF等格式。

    3. Jupyter Notebook的主要特点

    ① 编程时具有语法高亮、缩进tab补全的功能。

    ② 可直接通过浏览器运行代码,同时在代码块下方展示运行结果。

    ③ 以富媒体格式展示计算结果。富媒体格式包括:HTML,LaTeX,PNG,SVG等。

    ④ 对代码编写说明文档或语句时,支持Markdown语法。

    ⑤ 支持使用LaTeX编写数学性说明。

    二、安装Jupyter Notebook

    0. 先试用,再决定

    如果看了以上对Jupyter Notebook的介绍你还是拿不定主意究竟是否适合你,那么不要担心,你可以先免安装试用体验一下,戳这里,然后再做决定。

    值得注意的是,官方提供的同时试用是有限的,如果你点击链接之后进入的页面如下图所示,那么不要着急,过会儿再试试看吧。

    3b8ccdf679935362eea90e204a55e24d.png

    试用满线

    如果你足够幸运,那么你将看到如下界面,就可以开始体验啦。

    78804bc0b5d6c67b7ef8e96c940b0758.png

    主界面

    465a74118c16c61c7b49e680e18fac63.png

    编辑页面

    1. 安装

    ① 安装前提

    安装Jupyter Notebook的前提是需要安装了Python(3.3版本及以上,或2.7版本)。

    ② 使用Anaconda安装

    如果你是小白,那么建议你通过安装Anaconda来解决Jupyter Notebook的安装问题,因为Anaconda已经自动为你安装了Jupter Notebook及其他工具,还有python中超过180个科学包及其依赖项。

    你可以通过进入Anaconda的官方下载页面自行选择下载

    常规来说,安装了Anaconda发行版时已经自动为你安装了Jupyter Notebook的,但如果没有自动安装,那么就在终端(Linux或macOS的“终端”,Windows的“Anaconda Prompt”,以下均简称“终端”)中输入以下命令安装:

    conda install jupyter notebook

    ③ 使用pip命令安装

    如果你是有经验的Python玩家,想要尝试用pip命令来安装Jupyter

    Notebook,那么请看以下步骤吧!接下来的命令都输入在终端当中的噢!

    1. 把pip升级到最新版本

    Python 3.x

    pip3 install --upgrade pip

    Python 2.x

    pip install --upgrade pip

    注意:老版本的pip在安装Jupyter Notebook过程中或面临依赖项无法同步安装的问题。因此强烈建议先把pip升级到最新版本。

    2. 安装Jupyter Notebook

    Python 3.x

    pip3 install jupyter

    Python 2.x

    pip install jupyter

    三、运行Jupyter Notebook

    0. 帮助

    如果你有任何jupyter notebook命令的疑问,可以考虑查看官方帮助文档,命令如下:

    jupyter notebook --help

    jupyter notebook -h

    1. 启动

    ① 默认端口启动

    在终端中输入以下命令:

    jupyter notebook

    执行命令之后,在终端中将会显示一系列notebook的服务器信息,同时浏览器将会自动启动Jupyter Notebook。

    启动过程中终端显示内容如下:

    $ jupyter notebook
    [I 08:58:24.417 NotebookApp] Serving notebooks from local directory: /Users/catherine
    [I 08:58:24.417 NotebookApp] 0 active kernels
    [I 08:58:24.417 NotebookApp] The Jupyter Notebook is running at: http://localhost:8888/
    [I 08:58:24.417 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).

    注意:之后在Jupyter Notebook的所有操作,都请保持终端不要关闭,因为一旦关闭终端,就会断开与本地服务器的链接,你将无法在Jupyter Notebook中进行其他操作啦。

    浏览器地址栏中默认地将会显示:http://localhost:8888。其中,“localhost”指的是本机,“8888”则是端口号。

    fbdb00f8c92822e6eaa78ae0d15a8686.png

    URL

    如果你同时启动了多个Jupyter Notebook,由于默认端口“8888”被占用,因此地址栏中的数字将从“8888”起,每多启动一个Jupyter Notebook数字就加1,如“8889”、“8890”……

    ② 指定端口启动

    如果你想自定义端口号来启动Jupyter Notebook,可以在终端中输入以下命令:

    jupyter notebook --port <port_number>

    其中,“<port_number>”是自定义端口号,直接以数字的形式写在命令当中,数字两边不加尖括号“<>”。如:jupyter notebook --port 9999,即在端口号为“9999”的服务器启动Jupyter Notebook。

    ③ 启动服务器但不打开浏览器

    如果你只是想启动Jupyter Notebook的服务器但不打算立刻进入到主页面,那么就无需立刻启动浏览器。在终端中输入:

    jupyter notebook --no-browser

    此时,将会在终端显示启动的服务器信息,并在服务器启动之后,显示出打开浏览器页面的链接。当你需要启动浏览器页面时,只需要复制链接,并粘贴在浏览器的地址栏中,轻按回车变转到了你的Jupyter Notebook页面。

    5c368be1d6180c4c75b3efa5284dc413.png

    例图中由于在完成上面内容时我同时启动了多个Jupyter Notebook,因此显示我的“8888”端口号被占用,最终分配给我的是“8889”。

    2. 主页面

    ① 主页面内容

    当执行完启动命令之后,浏览器将会进入到Notebook的主页面,如下图所示。

    803969d43704ed6f186bcfec0255cd1a.png

    默认主页面

    如果你的主页面里边的文件夹跟我的不同,或者你在疑惑为什么首次启动里边就已经有这么多文件夹,不要担心,这里边的文件夹全都是你的家目录里的目录文件。你可以在终端中执行以下2步来查看:

    cdcd -cd ~cd /Users/<user_name>

    这个命令将会进入你的家目录。“<user_name>” 是用户名。用户名两边不加尖括号“<>”。

    ls

    这个命令将会展示你家目录下的文件。

    ② 设置Jupyter Notebook文件存放位置

    如果你不想把今后在Jupyter Notebook中编写的所有文档都直接保存在家目录下,那你需要修改Jupyter Notebook的文件存放路径。

    ⑴ 创建文件夹/目录

    Windows用户在想要存放Jupyter Notebook文件的磁盘中新建文件夹并为该文件夹命名;双击进入该文件夹,然后复制地址栏中的路径。Linux/macOS用户在想要存放Jupyter Notebook文件的位置创建目录并为目录命名,命令为:mkdir <directory_name>;进入目录,命令为:cd <directory_name>;查看目录的路径,命令为:pwd;复制该路径。注意:“<directory_name>”是自定义的目录名。目录名两边不加尖括号“<>”。

    ⑵ 配置文件路径

    一个便捷获取配置文件所在路径的命令:

    jupyter notebook --generate-config

    注意: 这条命令虽然可以用于查看配置文件所在的路径,但主要用途是是否将这个路径下的配置文件替换为默认配置文件。 如果你是第一次查询,那么或许不会出现下图的提示;若文件已经存在或被修改,使用这个命令之后会出现询问“Overwrite /Users/raxxie/.jupyter/jupyter_notebook_config.py with default config? [y/N]”,即“用默认配置文件覆盖此路径下的文件吗?”,如果按“y”,则完成覆盖,那么之前所做的修改都将失效;如果只是为了查询路径,那么一定要输入“N”。

    a794ffc1a8156406b2c60bd123ac3182.png

    配置文件所在路径

    常规的情况下,Windows和Linux/macOS的配置文件所在路径和配置文件名如下所述:

    Windows系统的配置文件路径:C:Users<user_name>.jupyterLinux/macOS系统的配置文件路径:/Users/<user_name>/.jupyter/~/.jupyter/配置文件名:jupyter_notebook_config.py

    注意:

    ① “<user_name>”为你的用户名。用户名两边不加尖括号“<>”。

    ② Windows和Linux/macOS系统的配置文件存放路径其实是相同的,只是系统不同,表现形式有所不同而已。

    ③ Windows和Linux/macOS系统的配置文件也是相同的。文件名以“.py”结尾,是Python的可执行文件。

    ④ 如果你不是通过一步到位的方式前往配置文件所在位置,而是一层一层进入文件夹/目录的,那么当你进入家目录后,用ls命令会发现找不到“.jupyter”文件夹/目录。这是因为凡是以“.”开头的目录都是隐藏文件,你可以通过ls -a命令查看当前位置下所有的隐藏文件。

    ⑶ 修改配置文件

    Windows系统的用户可以使用文档编辑工具或IDE打开“jupyter_notebook_config.py”文件并进行编辑。常用的文档编辑工具和IDE有记事本、Notepad++、vim、Sublime
    Text、PyCharm等。其中,vim是没有图形界面的,是一款学习曲线较为陡峭的编辑器,其他工具在此不做使用说明,因为上手相对简单。通过vim修改配置文件的方法请继续往下阅读。Linux/macOS系统的用户建议直接通过终端调用vim来对配置文件进行修改。具体操作步骤如下:

    ⒜ 打开配置文件

    打开终端,输入命令:

    vim ~/.jupyter/jupyter_notebook_config.py

    c1709b297f3d4723525508760f8f475e.png

    命令详解

    执行上述命令后便进入到配置文件当中了。

    ⒝ 查找关键词

    进入配置文件后查找关键词“c.NotebookApp.notebook_dir”。查找方法如下:

    进入配置文件后不要按其他键,用英文半角直接输入/c.NotebookApp.notebook_dir,这时搜索的关键词已在文档中高亮显示了,按回车,光标从底部切换到文档正文中被查找关键词的首字母。

    ⒞ 编辑配置文件

    按小写i进入编辑模式,底部出现“--INSERT--”说明成功进入编辑模式。使用方向键把光标定位在第二个单引号上(光标定位在哪个字符,就在这个字符前开始输入),把“⑴ 创建文件夹/目录”步骤中复制的路径粘贴在此处。

    ⒟ 取消注释

    把该行行首的井号(#)删除。因为配置文件是Python的可执行文件,在Python中,井号(#)表示注释,即在编译过程中不会执行该行命令,所以为了使修改生效,需要删除井号(#)。

    ⒠ 保存配置文件

    先按esc键,从编辑模式退出,回到命令模式。

    再用英文半角直接输入:wq,回车即成功保存且退出了配置文件。

    注意:

    冒号(:) 一定要有,且也是英文半角。w:保存。q:退出。

    ⒡ 验证

    在终端中输入命令jupyter notebook打开Jupyter Notebook,此时你会看到一个清爽的界面,恭喜!

    a4c0100b2d0ca57b77b65d7d62ce8c62.png

    配置后主页面

    ⒢ 注意

    以上所有命令均以英文半角格式输入,若有报错,请严格检查这两个条件,英文且半角。这里仅介绍了vim编辑器修改配置文件的方法,没有对vim编辑器的详细使用进行讲解,所以无需了解vim编辑器的具体使用方法,只需要按照上述步骤一定可以顺利完成修改!推荐有时间和经历时学习一下vim编辑器的使用。这款强大的编辑器将会成为你未来工作中的利器。

    四、Jupyter Notebook的基本使用

    1. Files页面

    c1be95541b963e38c03d41ec47e0344a.png

    Files页面

    此时你的界面当中应该还没有“Conda”和“Nbextensions”类目。不要着急,这两个类目将分别在“五、拓展功能”中的“1.关联Jupyter Notebook和conda的环境和包——‘nb_conda’”和“2.Markdown生成目录”中安装。

    Files页面是用于管理和创建文件相关的类目。

    对于现有的文件,可以通过勾选文件的方式,对选中文件进行复制、重命名、移动、下载、查看、编辑和删除的操作。

    同时,也可以根据需要,在“New”下拉列表中选择想要创建文件的环境,进行创建“ipynb”格式的笔记本、“txt”格式的文档、终端或文件夹。如果你创建的环境没有在下拉列表中显示,那么你需要依次前往“五、拓展功能”中的“1.关联Jupyter Notebook和conda的环境和包——‘nb_conda’”和“六、增加内核——‘ipykernel’”中解决该问题。

    ① 笔记本的基本操作

    0656b5147af8b25245f62467325ec715.png

    笔记本页面注解图

    上图展示的是笔记本的基本结构和功能。根据图中的注解已经可以解决绝大多数的使用问题了!

    工具栏的使用如图中的注解一样直观,在此不过多解释。需要特别说明的是“单元格的状态”,有Code,Markdown,Heading,Raw NBconvert。其中,最常用的是前两个,分别是代码状态,Markdown编写状态。Jupyter Notebook已经取消了Heading状态,即标题单元格。取而代之的是Markdown的一级至六级标题。而Raw NBconvert目前极少用到,此处也不做过多讲解。

    菜单栏涵盖了笔记本的所有功能,即便是工具栏的功能,也都可以在菜单栏的类目里找到。然而,并不是所有功能都是常用的,比如Widgets,Navigate。Kernel类目的使用,主要是对内核的操作,比如中断、重启、连接、关闭、切换内核等,由于我们在创建笔记本时已经选择了内核,因此切换内核的操作便于我们在使用笔记本时切换到我们想要的内核环境中去。由于其他的功能相对比较常规,根据图中的注解来尝试使用笔记本的功能已经非常便捷,因此不再做详细讲解。

    ② 笔记本重命名的两种方式

    ⑴ 笔记本内部重命名

    在使用笔记本时,可以直接在其内部进行重命名。在左上方“Jupyter”的图标旁有程序默认的标题“Untitled”,点击“Untitled”然后在弹出的对话框中输入自拟的标题,点击“Rename”即完成了重命名。

    ⑵ 笔记本外部重命名

    若在使用笔记本时忘记了重命名,且已经保存并退出至“Files”界面,则在“Files”界面勾选需要重命名的文件,点击“Rename”然后直接输入自拟的标题即可。

    ⑶ 演示

    9906fde51ceb746971837943f8b6fe07.png

    笔记本重命名演示图

    2. Running页面

    Running页面主要展示的是当前正在运行当中的终端和“ipynb”格式的笔记本。若想要关闭已经打开的终端和“ipynb”格式的笔记本,仅仅关闭其页面是无法彻底退出程序的,需要在Running页面点击其对应的“Shutdown”。更多关闭方法可以查阅“八、关闭和退出”中的“1.关闭笔记本和终端”。

    fd42d20f3a7fafcff9c7909cdbb7413e.png

    Running页面功能演示图

    3. Clusters页面

    Clusters tab is now provided by IPython parallel. See 'IPython parallel' for
    installation details.

    Clusters类目现在已由IPython parallel对接,且由于现阶段使用频率较低,因此在此不做详细说明,想要了解更多可以访问IPython parallel的官方网站。

    4. Conda页面

    Conda页面主要是Jupyter Notebook与Conda关联之后对Conda环境和包进行直接操作和管理的页面工具。详细信息请直接查阅“五、拓展功能”中的“1.关联Jupyter Notebook和conda的环境和包——‘nb_conda’”。这是目前使用Jupyter Notebook的必备环节,因此请务必查阅。

    5. Nbextensions页面

    Nbextensions页面提供了多个Jupyter Notebook的插件,使其功能更加强大。该页面中主要使用的插件有nb_conda,nb_present,Table of Contents(2)。这些功能我们无需完全掌握,也无需安装所有的扩展功能,根据本文档提供的学习思路,我们只需要安装Talbe of Contents(2)即可,该功能可为Markdown文档提供目录导航,便于我们编写文档。该安装指导请查阅“五、拓展功能”中的“2.Markdown生成目录”。

    8712e3a7c98c0c4a18cfec0e56ae71d0.png

    Nbextensions页面

    五、拓展功能

    1. 关联Jupyter Notebook和conda的环境和包——“nb_conda”☆

    ① 安装

    conda install nb_conda

    执行上述命令能够将你conda创建的环境与Jupyter Notebook相关联,便于你在Jupyter Notebook的使用中,在不同的环境下创建笔记本进行工作。

    ② 使用

    可以在Conda类目下对conda环境和包进行一系列操作。

    3648fe4e58faea5d3dec0d5188bc8e04.png

    Conda页面注解图

    可以在笔记本内的“Kernel”类目里的“Change
    kernel”切换内核。

    65b9e1d1b754b78b2fd67d782a91d394.png

    切换内核

    ③ 卸载

    canda remove nb_conda

    执行上述命令即可卸载nb_conda包。

    2. Markdown生成目录

    不同于有道云笔记的Markdown编译器,Jupyter Notebook无法为Markdown文档通过特定语法添加目录,因此需要通过安装扩展来实现目录的添加。

    conda install -c conda-forge jupyter_contrib_nbextensions

    执行上述命令后,启动Jupyter Notebook,你会发现导航栏多了“Nbextensions”的类目,点击“Nbextensions”,勾选“Table
    of Contents ⑵”

    8712e3a7c98c0c4a18cfec0e56ae71d0.png

    Nbextensions页面

    之后再在Jupyter Notebook中使用Markdown,点击下图的图标即可使用啦。

    ee437fe52906ba7aa629f9304a03c207.png

    目录

    3. Markdown在文中设置链接并定位

    在使用Markdown编辑文档时,难免会遇到需要在文中设定链接,定位在文档中的其他位置便于查看。因为Markdown可以完美的兼容html语法,因此这种功能可以通过html语法当中“a标签”的索引用法来实现。

    语法格式如下:

    [添加链接的正文](#自定义索引词)
    <a id=自定义索引词>跳转提示</a>

    注意:

    语法格式当中所有的符号均是英文半角。“自定义索引词”最好是英文,较长的词可以用下划线连接。“a标签”出现在想要被跳转到的文章位置,html标签除了单标签外均要符合“有头(<a>)必有尾(</a>)”的原则。头尾之间的“跳转提示”是可有可无的。“a标签”中的“id”值即是为正文中添加链接时设定的“自定义索引值”,这里通过“id”的值实现从正文的链接跳转至指定位置的功能。

    例:

    99e9000e8b897a4b67955eb906479c87.png

    有跳转提示语

    1c083e801bca7d9e42d1ee3caa0da2f9.png

    无跳转提示语

    4. 加载指定网页源代码

    ① 使用场景

    想要在Jupyter Notebook中直接加载指定网站的源代码到笔记本中。

    ② 方法

    执行以下命令:

    %load URL

    其中,URL为指定网站的地址。

    ③ 例

    dce537b6e853719413fc778f1e61aa64.png

    加载网络代码

    5. 加载本地Python文件

    ① 使用场景

    想在Jupyter Notebook中加载本地的Python文件并执行文件代码。

    ② 方法

    执行以下命令:

    %load Python文件的绝对路径

    ③ 注意

    Python文件的后缀为“.py”。“%load”后跟的是Python文件的绝对路径。输入命令后,可以按CTRL 回车来执行命令。第一次执行,是将本地的Python文件内容加载到单元格内。此时,Jupyter Notebook会自动将“%load”命令注释掉(即在前边加井号“#”),以便在执行已加载的文件代码时不重复执行该命令;第二次执行,则是执行已加载文件的代码。

    ④ 例

    9761052ce6b9a177b432c47b860a11bd.png

    加载本地Python文件

    6. 直接运行本地Python文件

    ① 使用场景

    不想在Jupyter Notebook的单元格中加载本地Python文件,想要直接运行。

    ② 方法

    执行命令:

    %run Python文件的绝对路径

    !python3 Python文件的绝对路径

    !python Python文件的绝对路径

    ③ 注意

    Python文件的后缀为“.py”。“%run”后跟的是Python文件的绝对路径。“!python3”用于执行Python
    3.x版本的代码。“!python”用于执行Python
    2.x版本的代码。“!python3”和“!python”属于 !shell命令 语法的使用,即在Jupyter Notebook中执行shell命令的语法。输入命令后,可以按 control return 来执行命令,执行过程中将不显示本地Python文件的内容,直接显示运行结果。

    ④ 例

    0fc6c5d07faf3c8b6d216258c0c2d777.png

    运行本地Python文件

    7. 在Jupyter Notebook中获取当前位置

    ① 使用场景

    想要在Jupyter Notebook中获取当前所在位置的绝对路径。

    ② 方法

    %pwd

    !pwd

    ③ 注意

    获取的位置是当前Jupyter Notebook中创建的笔记本所在位置,且该位置为绝对路径。“!pwd”属于 !shell命令 语法的使用,即在Jupyter
    Notebook中执行shell命令的语法。

    ④ 例

    292af029c49e93395cca3ed80d0e1cfa.png

    获取当前位置的绝对路径

    8. 在Jupyter Notebook使用shell命令

    ① 方法一——在笔记本的单元格中

    ⑴ 语法

    !shell命令

    在Jupyter Notebook中的笔记本单元格中用英文感叹号“!”后接shell命令即可执行shell命令。

    ⑵ 例

    e01daf631086fc584b52297b8e78a447.png

    Shell命令的使用

    ② 方法二——在Jupyter Notebook中新建终端

    ⑴ 启动方法

    在Jupyter Notebook主界面,即“File”界面中点击“New”;在“New”下拉框中点击“Terminal”即新建了终端。此时终端位置是在你的家目录,可以通过pwd命令查询当前所在位置的绝对路径。

    ⑵ 关闭方法

    在Jupyter Notebook的“Running”界面中的“Terminals”类目中可以看到正在运行的终端,点击后边的“Shutdown”即可关闭终端。

    ⑶ 例

    89f44e9905fac863cacd561a9dc7e331.png

    笔记本中的终端使用

    9. 隐藏笔记本输入单元格

    ① 使用场景

    在Jupyter Notebook的笔记本中无论是编写文档还是编程,都有输入(In [])和输出(Out [])。当我们编写的代码或文档使用的单元格较多时,有时我们只想关注输出的内容而暂时不看输入的内容,这时就需要隐藏输入单元格而只显示输出单元格。

    ② 方法一

    ⑴ 代码

    from IPython.display import display
    from IPython.display import HTML
    import IPython.core.display as di # Example: di.display_html('<h3>%s:</h3>' % str, raw=True)
    
    
    # 这行代码的作用是:当文档作为HTML格式输出时,将会默认隐藏输入单元格。
    di.display_html('<script>jQuery(function() {if (jQuery("body.notebook_app").length == 0) { jQuery(".input_area").toggle(); jQuery(".prompt").toggle();}});</script>', raw=True)
    
    
    # 这行代码将会添加“Toggle code”按钮来切换“隐藏/显示”输入单元格。
    di.display_html('''<button onclick="jQuery('.input_area').toggle(); jQuery('.prompt').toggle();">Toggle code</button>''', raw=True

    在笔记本第一个单元格中输入以上代码,然后执行,即可在该文档中使用“隐藏/显示”输入单元格功能。

    缺陷:此方法不能很好的适用于Markdown单元格。

    ⑵ 例

    f95e1dd2e661188c24e4e36019cf68a1.png

    方法一:隐藏/显示输入单元格

    ③ 方法二

    ⑴ 代码

    from IPython.display import HTML
    
    
    HTML('''<script>
    code_show=true; 
    function code_toggle() {
    if (code_show){
    $('div.input').hide();
    } else {
    $('div.input').show();
    }
    code_show = !code_show
    } 
    $( document ).ready(code_toggle);
    </script>
    <form action="javascript:code_toggle()"><input type="submit" value="Click here to toggle on/off the raw code."></form>''')

    在笔记本第一个单元格中输入以上代码,然后执行,即可在该文档中使用“隐藏/显示”输入单元格功能。

    缺陷:此方法不能很好的适用于Markdown单元格。

    ⑵ 例

    29896dfc694dc8e2e220bdf385eaf87a.png

    方法二:隐藏/显示输入单元格

    10. 魔术命令

    由于目前暂时用不到过多的魔术命令,因此暂时先参考官网的文档。

    六、增加内核——“ipykernel” ☆

    1. 使用场景

    场景一:同时用不同版本的Python进行工作,在Jupyter Notebook中无法切换,即“New”的下拉菜单中无法使用需要的环境。场景二:创建了不同的虚拟环境(或许具有相同的Python版本但安装的包不同),在Jupyter Notebook中无法切换,即“New”的下拉菜单中无法使用需要的环境。

    接下来将分别用“命令行模式”和“图形界面模式”来解决以上两个场景的问题。顾名思义,“命令行模式”即在终端中通过执行命令来一步步解决问题;“图形界面模式”则是通过在Jupyter Notebook的网页中通过鼠标点击的方式解决上述问题。

    其中,“图形界面模式”的解决方法相对比较简单快捷,如果对于急于解决问题,不需要知道运行原理的朋友,可以直接进入“3. 解决方法之图形界面模式”来阅读。

    “命令行模式”看似比较复杂,且又划分了使用场景,但通过这种方式来解决问题可以更好的了解其中的工作原理,比如,每进行一步操作对应的命令是什么,而命令的执行是为了达到什么样的目的,这些可能都被封装在图形界面上的一个点击动作来完成了。对于想更深入了解其运作过程的朋友,可以接着向下阅读。

    2. 解决方法之命令行模式

    ① 同时使用不同版本的Python

    ⑴ 在Python 3中创建Python 2内核

    ⒜ pip安装

    首先安装Python 2的ipykernel包。

    python2 -m pip install ipykernel

    再为当前用户安装Python 2的内核(ipykernel)。

    python2 -m ipykernel install --user

    注意:“--user”参数的意思是针对当前用户安装,而非系统范围内安装。

    ⒝ conda安装

    首先创建Python版本为2.x且具有ipykernel的新环境,其中“<env_name>”为自定义环境名,环境名两边不加尖括号“<>”。

    conda create -n <env_name> python=2 ipykernel

    然后切换至新创建的环境。

    Windows: activate <env_name>
    Linux/macOS: source activate <env_name>

    为当前用户安装Python 2的内核(ipykernel)。

    python2 -m ipykernel install --user

    注意:“--user”参数的意思是针对当前用户安装,而非系统范围内安装。

    ⑵ 在Python 2中创建Python 3内核

    ⒜ pip安装

    首先安装Python 3的ipykernel包。

    python3 -m pip install ipykernel

    再为当前用户安装Python 2的内核(ipykernel)。

    python3 -m ipykernel install --user

    注意:“--user”参数的意思是针对当前用户安装,而非系统范围内安装。

    ⒝ conda安装

    首先创建Python版本为3.x且具有ipykernel的新环境,其中“<env_name>”为自定义环境名,环境名两边不加尖括号“<>”。

    conda create -n <env_name> python=3 ipykernel

    然后切换至新创建的环境。

    Windows: activate <env_name>
    Linux/macOS: source activate <env_name>

    为当前用户安装Python 3的内核(ipykernel)。

    python3 -m ipykernel install --user

    注意:“--user”参数的意思是针对当前用户安装,而非系统范围内安装。

    ② 为不同环境创建内核

    ⑴ 切换至需安装内核的环境

    Windows: activate <env_name>
    Linux/macOS: source activate <env_name>

    注意:“<env_name>”是需要安装内核的环境名称,环境名两边不加尖括号“<>”。

    ⑵ 检查该环境是否安装了ipykernel包

    conda list

    执行上述命令查看当前环境下安装的包,若没有安装ipykernel包,则执行安装命令;否则进行下一步。

    conda install ipykernel

    ⑶ 为当前环境下的当前用户安装Python内核

    若该环境的Python版本为2.x,则执行命令:

    python2 -m ipykernel install --user --name <env_name> --display-name "<notebook_name>"

    若该环境的Python版本为3.x,则执行命令:

    python3 -m ipykernel install --user --name <env_name> --display-name "<notebook_name>"

    注意:

    1. “<env_name>”为当前环境的环境名称。环境名两边不加尖括号“<>”。

    2. “<notebook_name>”为自定义显示在Jupyter Notebook中的名称。名称两边不加尖括号“<>”,但双引号必须加。

    3. “--name”参数的值,即“<env_name>”是Jupyter内部使用的,其目录的存放路径为~/Library/Jupyter/kernels/。如果定义的名称在该路径已经存在,那么将自动覆盖该名称目录的内容。

    4. “--display-name”参数的值是显示在Jupyter Notebook的菜单中的名称。

    ⑷ 检验

    使用命令jupyter notebook启动Jupyter Notebook;在“Files”下的“New”下拉框中即可找到你在第⑶步中的自定义名称,此时,你便可以尽情地在Jupyter Notebook中切换环境,在不同的环境中创建笔记本进行工作和学习啦!

    3. 解决方法之图形界面模式

    ① 你创建了一个新的环境,但却发现在Jupyter Notebook的“New”中找不到这个环境,无法在该环境中创建笔记本。

    d3ffa1217ebb969ad9b68c98b269afbc.png

    问题发现

    ② 进入Jupyter Notebook → Conda → 在“Conda

    environment”中点击你要添加ipykernel包的环境 → 左下方搜索框输入“ipykernel”

    → 勾选“ipykernel” → 点击搜索框旁的“→”箭头 → 安装完毕 → 右下方框内找到“ipykernel”说明已经安装成功

    bee73795a92def0804b65a665098bb1b.png

    解决方法

    ③ 在终端control c关闭Jupyter Notebook的服务器然后重启Jupyter Notebook,在“File”的“New”的下拉列表里就可以找到你的环境啦。

    963cef5deb748697c2942047b775c56a.png

    验证

    七、Jupyter Notebook快捷键

    1. Mac与Windows特殊按键对照表

    88c0a45d2a42e6a780828124839daa1f.png

    Mac和Windows特殊按键对照表

    2. Jupyter Notebook笔记本的两种模式

    ① 命令模式

    命令模式将键盘命令与Jupyter Notebook笔记本命令相结合,可以通过键盘不同键的组合运行笔记本的命令。按esc键进入命令模式。命令模式下,单元格边框为灰色,且左侧边框线为蓝色粗线条。

    405e4c67140dc8f274e58728d826406f.png

    命令模式

    ② 编辑模式

    编辑模式使用户可以在单元格内编辑代码或文档。按enterreturn键进入编辑模式。编辑模式下,单元格边框和左侧边框线均为绿色。

    c0805c57b4114e368b26772570e578b7.png

    编辑模式

    3. 两种模式的快捷键

    ① 命令模式

    3c36edc5baa2efe387f37f8768b4457b.png

    命令模式快捷键

    ② 编辑模式

    88c0a45d2a42e6a780828124839daa1f.png

    编辑模式快捷键

    4. 查看和编辑快捷键

    ① 查看快捷键

    ① 进入Jupyter Notebook主界面“File”中。

    ② 在“New”的下拉列表中选择环境创建一个笔记本。

    ③ 点击“Help”。

    ④ 点击“Keyboard Shortcuts”。

    ② 编辑快捷键

    ⑴ 方法一

    ① 进入Jupyter Notebook主界面“File”中。

    ② 在“New”的下拉列表中选择环境创建一个笔记本。

    ③ 点击“Help”。

    ④ 点击“Keyboard Shortcuts”。

    ⑤ 弹出的对话框中“Command Mode (press Esc to enable)”旁点击“Edit

    Shortcuts”按钮。

    ⑵ 方法二

    ① 进入Jupyter Notebook主界面“File”中。

    ② 在“New”的下拉列表中选择环境创建一个笔记本。

    ③ 点击“Help”。

    ④ 点击“Edit Keyboard Shortcuts”。

    ③ 例

    cc172e15ae8f83e21d383dd655bf1c9b.png

    查看和编辑快捷键

    八、关闭和退出

    1. 关闭笔记本和终端

    当我们在Jupyter Notebook中创建了终端或笔记本时,将会弹出新的窗口来运行终端或笔记本。当我们使用完毕想要退出终端或笔记本时,仅仅关闭页面是无法结束程序运行的,因此我们需要通过以下步骤将其完全关闭。

    ① 方法一

    ⑴ 进入“Files”页面。

    ⑵ 勾选想要关闭的“ipynb”笔记本。正在运行的笔记本其图标为绿色,且后边标有“Running”的字样;已经关闭的笔记本其图标为灰色。

    ⑶ 点击上方的黄色的“Shutdown”按钮。

    ⑷ 成功关闭笔记本。

    注意:此方法只能关闭笔记本,无法关闭终端。

    ② 方法二

    ⑴ 进入“Running”页面。

    ⑵ 第一栏是“Terminals”,即所有正在运行的终端均会在此显示;第二栏是“Notebooks”,即所有正在运行的“ipynb”笔记本均会在此显示。

    ⑶ 点击想要关闭的终端或笔记本后黄色“Shutdown”按钮。

    ⑷ 成功关闭终端或笔记本。

    注意:此方法可以关闭任何正在运行的终端和笔记本。

    ③ 注意

    ⑴ 只有“ipynb”笔记本和终端需要通过上述方法才能使其结束运行。

    “txt”文档,即“New”下拉列表中的“Text

    File”,以及“Folder”只要关闭程序运行的页面即结束运行,无需通过上述步骤关闭。

    ④ 演示

    259487493d9ad71d710e0e59ea3c48d6.png

    关闭笔记本或终端程序

    2. 退出Jupyter Notebook程序

    如果你想退出Jupyter Notebook程序,仅仅通过关闭网页是无法退出的,因为当你打开Jupyter Notebook时,其实是启动了它的服务器。

    你可以尝试关闭页面,并打开新的浏览器页面,把之前的地址输进地址栏,然后跳转页面,你会发现再次进入了刚才“关闭”的Jupyter Notebook页面。

    如果你忘记了刚才关闭的页面地址,可以在启动Jupyter Notebook的终端中找到地址,复制并粘贴至新的浏览器页面的地址栏,会发现同样能够进入刚才关闭的页面。

    因此,想要彻底退出Jupyter Notebook,需要关闭它的服务器。只需要在它启动的终端上按:

    Mac用户:control cWindows用户:ctrl c

    然后在终端上会提示:“Shutdown this notebook server (y/[n])?”输入y即可关闭服务器,这才是彻底退出了Jupyter Notebook程序。此时,如果你想要通过输入刚才关闭网页的网址进行访问Jupyter Notebook便会看到报错页面。

    好啦,今天的jupyter notebook就给大家介绍到这里。接下来再给大家介绍一下租用GPU做实验的方法,因为没法回实验室,所以我们是在智星云租用的GPU,使用体验很好,具体大家可以参考:智星云官网: http://www.ai-galaxy.cn/,淘宝店:https://shop36573300.taobao.com/公众号: 智星AI,

    4fa0b6cf16d0ba8baf01f28c9986f715.png

    PEACE

    参考资料

    https://zhuanlan.zhihu.com/p/33105153

    https://www.zhihu.com/question/46309360/answer/254638807?utm_source=wechat_session&utm_medium=social

    https://jupyter-notebook.readthedocs.io/en/stable/notebook.html

    https://www.anaconda.com/download/#macos

    https://blog.csdn.net/tina_ttl/article/details/51031113#21-%E6%96%B9%E5%BC%8F%E4%B8%80

    http://jupyter.org/documentation

    https://blog.csdn.net/lawme/article/details/51034543

    https://stackoverflow.com/questions/27934885/how-to-hide-code-from-cells-in-ipython-notebook-visualized-with-nbviewer

    https://ipython.readthedocs.io/en/stable/interactive/magics.html

    展开全文
  • 什么是僵尸网络?

    2018-06-22 10:30:00
    其中包含:分布式拒绝服务攻击(DDoS)会造成应用程序意外假死核实泄露凭据清单(凭据填充攻击)会导致账户接管发动 Web 应用程序攻击,盗取数据提供给攻击者设备访问权限及网络连接如何阻止僵尸网络现在市面上有很...

    僵尸网络由诸如智能手机或物联网设备的众多联网设备组成,每个设备包含一个或多个僵尸程序。僵尸网络所有者使用命令和控制 (C&C) 软件来操控网络,执行各种需要大规模自动化的(恶意)行动。其中包含:

    • 分布式拒绝服务攻击(DDoS)会造成应用程序意外假死
    • 核实泄露凭据清单(凭据填充攻击)会导致账户接管
    • 发动 Web 应用程序攻击,盗取数据
    • 提供给攻击者设备访问权限及网络连接
    • 如何阻止僵尸网络
    1. 现在市面上有很多提供网络安全的服务商比如Incapsula可以帮助用户阻止僵尸网络,僵尸(bot)程序缓解通过建立一个包含数百万浏览器和僵尸程序签名变体的数据库,来帮助准确识别大多数僵尸程序。
    2. 当遇到一个新的僵尸程序变体时,会根据以下项对其进行描述:

    HTTP/S标题内容

    IP和ASN信息

    行为模式和技术指纹

    如果新的bot有可疑行为,则会发出一系列透明的挑战,例如持有Cookie和解析JavaScript。 Imperva避免常规使用 CAPTCHA以确保对合法用户的中断最小化。

    展开全文
  • SSO-WebDemo

    2013-08-12 20:25:57
    随着互联网的高速发展,WEB应用几乎统治了绝大部分的软件应用系统,因此WEB-SSOSSO应用当中最为流行。WEB-SSO有其自身的特点和优势,实现起来比较简单易用。很多商业软件和开源软件都有对WEB-SSO的实现。其中值得...
  • 是什么? TasmoCompiler是一个简单的Web GUI,可让您使用自己的设置来编译出色的固件: 您可以选择要使用的Tasmota固件的功能/传感器 您的IOT WiFi网络的凭据,因此即使在设备出现意外问题(配置完全丢失)之后...
  • https://github.com/yorubadeveloper/flask-admin-boilerplate该Web应用程序使用Python Flask Framework和SB Admin 2 Theme(免费版)构建的在深入了解如何构建此管理仪表板的全部详细信息和指南之前,让我们知道...
  • Java SSM框架代码审计、SSM框架各个成之间的关系tomcat启动后会自动加载web.xml中的设置,首先天生DispatcherServlet类,将我们的请求转发至我们的SpringMVC中去,交由我们SpringMVC的Controller来举行接下来的...
  • 跨站点脚本(XSS)通常在Web应用程序中发现的一种计算机安全漏洞。...为了展示利用XSS漏洞攻击者可以做什么,我们在预制的Ubuntu VM映像中设置了名为Elgg的Web应用程序。Elgg社交网络非常受欢迎的开源Web应用程序
  • 是什么? Anime Orbiter是一个Web应用程序,用于跟踪您喜欢的动漫标题。 我可以使用吗? 绝对地! 欢迎任何人使用自己的电子邮件地址创建一个帐户。 或者,如果您只想对其进行测试,请随时使用“公共用户”帐户...
  • 您已经需要一个数据库凭据文件,因此所有内容都可以存储在一个位置.文件缺点:>在负载平衡环境中配置很困难.>在开发中添加设置时,最常记得将它们移动到生产中的每个服务器上的文件中.>如果要编写控制面板以...
  • lang桶 Slang Bucket使用Meteor构建的简单实时应用程序。 在阅读完整的教程。 运行样本 确保meteor已安装在您的计算机上。 ... Windows用户应首先安装 : choco install meteor ...什么是Auth0? A
  • 14.1 什么是重放攻击 所谓重放攻击就是攻击者发送一个目的主机已接收过的包,来达到欺骗系统的目的,主要用于身份认证过程。 攻击者利用网络监听或者其他方式盗取认证凭据,之后再把它重新发给认证服务器。从这个...
  • 报错提示: 您未被授权查看该页  您不具备使用所提供的凭据查看该目录或页的权限 ...查找网上的各种资料,都说在IIS里配置成允许匿名访问,但配置后仍然不能访问 ...其它都相同的,找不出有什么
  • 适用于42 intra的简单bot与discord一起使用 将certificate.yml复制到secret.credentials.yml并填写您的api和bot凭据 只需运行bundle install && ruby​... 这一种进步,只有在您知道自己在做什么的情况下,才可以使用
  • 概述 跨站请求伪造一种攻击,它强制终端用户在当前对其进行身份验证后的web应用程序上执行非本意的操作。 CSRF攻击的着重点在于伪造更改状态的请求,而不是盗取数据,因为攻击者无法查看对伪造请求的响应。 对于...
  • ape_api_key 您是否将钥匙留在大型停车场的车内? 如果没有,那么为什么要在Github项目中公开API_KEY? 通常使用Cloud服务部署... 一种非常普遍的做法扫描Web和公共工具(例如GitHub),以在不知不觉中公开访问...
  • 因为HTTP协议无状态的,即服务器不知道用户上一次做了什么,这严重阻碍了交互式Web应用程序的实现。在典型的网上购物场景中,用户浏览了几个页面,买了一盒饼干和两饮料。最后结帐时,由于HTTP的无状态性,不通过...
  • 理解xss shell是什么之前,让我们一起回顾一下一些基本的xss(跨站脚本),xss是最常见的一个漏洞,存在于今天许多的web应用程序。xss是***者试图通过web应用程序执行恶意脚本的技术,***者通过突破同源策略的web应用...
  • 理解xss shell是什么之前,让我们一起回顾一下一些基本的xss(跨站脚本),xss是最常见的一个漏洞,存在于今天许多的web应用程序。xss是***者试图通过web应用程序执行恶意脚本的技术,***者通过突破同源策略的web...
  • Django中的JWT身份验证

    2020-06-19 02:27:07
    什么是JWT? JWT一个编码的JSON字符串,该字符串在标头中传递以验证请求。 通常通过使用密钥对JSON数据进行散列来获得的。 这意味着服务器不需要每次都查询数据库来检索与给定令牌关联的用户。 JSON Web令牌...
  • 什么存在这个工具 在DEGIRO上,无法创建目标价格与最近价格明显不同的限价单。 该工具会在当前价格超过创建订单的阈值时立即创建订单。 局限性 仅在使用Finnhub.io免费帐户时对美国证券有效。 稳定性未知。 配置 ...
  • 是什么? 这是一个渗透测试工具,旨在利用Apache Tomcat凭据来自动生成和部署JSP后门,并在之后调用它并提供不错的外壳(通过Web gui,绑定在远程计算机上的侦听端口或作为反向tcp负载重新连接到对手)。 实际上...
  • Laravel 6.x 和 JSON Web 令牌(tymon/jwt-auth) - 用户认证1.token是什么2.jwt是什么3、jwt安装&配置3.1 通过composer安装3.2 发布配置3.3、生成加密密钥3.4、更新User模型3.5.修改 auth.php4、控制器4.1、...
  • 什么是.env? 您永远不要在代码中存储敏感的凭据。 存储的宗旨之一。 在部署环境之间可能发生任何更改的所有内容,例如数据库凭据或第三方服务的凭据,都应从代码中提取到环境变量中。 基本上, .env文件...
  • wfh.vote-源码

    2021-02-12 03:24:50
    wfh.vote Web服务的前端/后端源实时运行: : 先决条件 ...AWS CLI 使用IAM用户(管理员权限)创建并在您的... 我可以在其中创建此DNS记录的Route53区域ID是什么? ( ***CustomDomainZoneId*** ) 4.(可选)是否要对
  • 目录遍历(也称为文件路径遍历)一个Web安全漏洞,攻击者可以利用该漏洞读取运行应用程序的服务器上的任意文件。这可能包括应用程序代码和数据,后端系统的凭据以及敏感的操作系统文件。在某些情况下,攻击者可能...
  • 对于Web服务器,这一个相对耗时的任务,因此S3引入了另一种选择:临时访问权限。 此备用模式有两个步骤。 首先, 函数通过我们的IAM凭据向S3请求一个公共链接,该链接将使浏览器将文件直接上传到S3存储桶。 它将...
  • 什么是Tomcat? (通常称为Tomcat)由开发的开源Web服务器和servlet容器。 Tomcat实现了几种Java EE规范,包括Java Servlet,JavaServer Pages(JSP),Java EL和WebSocket,并提供了运行Java代码的“纯Java” ...

空空如也

空空如也

1 2 3 4 5
收藏数 83
精华内容 33
关键字:

web凭据是什么