首页 文章 精选 留言 我的

精选列表

搜索[环境],共10000篇文章
优秀的个人博客,低调大师

YoyoGo v1.8.1 发布,更新配置读取环境变量

Features Get config value for DSL, that support key or ref object. Such as YAML: env: ${CUSTOM_ENV} profile: dns: ${REMOTE_HOST} ip: ${REMOTE_IP:10.0.1.12} namespace: ${MYNAMESPACE:space.localhost} Go Example type Profile struct { DNS string `config:"dns"` IP string `config:"ip"` NS string `config:"namespace"` } config := abstractions.NewConfigurationBuilder(). AddEnvironment(). AddYamlFile("config").Build() config.GetConfigObject("profile", &profile) assert.Equal(t, profile.NS, "space.yoyogo.run") assert.Equal(t, profile.DNS, "my host") assert.Equal(t, profile.IP, "10.0.1.12") or env := config.Get("env") dns := config.Get("profile.dns") ip := config.Get("profile.ip") assert.Equal(t, env, "my env variable") assert.Equal(t, dns, "my host") assert.Equal(t, ip, "10.0.1.12") YoyoGo 是一个用 Go 编写的简单,轻便,快速的微服务框架,目前已实现了Web框架的能力,但是底层设计已支持多种服务架构。 特性 漂亮又快速的路由器 中间件支持 (handler func & custom middleware) 对 REST API 友好 支持 MVC 模式 受到许多出色的 Go Web 框架的启发

优秀的个人博客,低调大师

30个类手写Spring核心原理之环境准备(1)

本文节选自《Spring 5核心原理》 1 IDEA集成Lombok插件 1.1 安装插件 IntelliJ IDEA是一款非常优秀的集成开发工具,功能强大,而且插件众多。Lombok是开源的代码生成库,是一款非常实用的小工具,我们在编辑实体类时可以通过Lombok注解减少getter、setter等方法的编写,在更改实体类时只需要修改属性即可,减少了很多重复代码的编写工作。 首先需要安装IntelliJ IDEA中的Lombok插件,打开IntelliJ IDEA后单击菜单栏中的File→Settings(如下图所示),或者使用快捷键Ctrl+Alt+S进入设置界面。 单击设置界面中的Plugins进行插件的安装,在右侧单击Browse repositories按钮,如下图所示。 然后在搜索界面中输入lombok可以查询到下方的Lombok Plugin,单击Lombok Plugin可在右侧看到Install按钮,单击该按钮便可开始安装,如下图所示。 我们在如下安装界面可以看到Lombok支持的所有注解。 在安装过程中有Downloading Plugins的提示,安装过程中进度条会变化。需要提醒的是,在安装过程中一定要保证网络连接可用且良好,否则可能会安装失败。 安装成功后可以看到下图右侧的Restart IntelliJ IDEA按钮,此时可先不操作,因为还有后续的配置工作。 回到Plugins,此时在下图右侧可以搜索到Lombok(而安装前搜索不到)。 1.2 配置注解处理器 在如下设置界面单击Build, Execution, Deployment→Compiler→Annotation Processors,然后在右侧勾选Enable annotation processing复选项即可。 1.3 使用插件 使用前需要说明的是,安装的插件只是一个调用,就像我们使用maven插件一样,本机需要安装maven才行。我们在使用Lombok前也需要在pom.xml文件中添加Lombok的依赖。 #托管的类扫描包路径# <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.10</version> </dependency> 接下来编辑一个Config测试类,添加两个属性,最后在类上添加@Data属性,这个注解可以帮我们在.class文件中生成类中所有属性的get/set、equals、canEqual、hashCode、toString方法等,如下图所示。 我们还可以通过下面的方式查看Lombok生成的方法。在菜单栏中单击View→Tool Windows→Structure,便可以看到类中所有的方法,这些都是Lombok自动生成的,如下面两图所示。 2 从Servlet到ApplicationContext 在“用300行代码手写提炼Spring核心原理”一章中,我们已经了解Spring MVC的入口是DispatcherSerlvet,并实现了DispatcherServlet的init()方法,在init()方法中完成了IoC容器的初始化。而在使用Spring的过程中,见得最多的是ApplicationContext,似乎Spring托管的所有实例Bean都可以通过调用getBean()方法来获得。那么ApplicationContext又是从何而来的呢?从Spring源码中可以看到,DispatcherServlet的类图如下图所示。 DispatcherServlet继承了FrameworkServlet,FrameworkServlet继承了HttpServletBean,HttpServletBean继承了HttpServlet。在HttpServletBean的init()方法中调用了FrameworkServlet的initServletBean()方法,在initServletBean()方法中初始化WebApplicationContext实例。在initServletBean()方法中调用了DispatcherServlet重写的onRefresh()方法。在DispatcherServlet的onRefresh()方法中又调用了initStrategies()方法,初始化Spring MVC的九大组件。 其实,通过上面复杂的调用关系可以得出一个结论:在Servlet的init()方法中初始化了IoC容器和Spring MVC所依赖的九大组件。 在手写之前先将框架类关系画出来,如下图所示,顺便也回顾一下我们之前讲过的IoC容器结构。 3 准备基础配置 在开始手写之前我们先做一个约定,所有的手写类都以GP开头,以区别于Spring框架中的原生类,方便对比理解。如DispatcherServlet在这个Mini版本中会命名为GPDispatcherServlet,所有的方法名尽量和原生Spring保持一致,可能有些参数列表会做一些微调,主要目的是理解设计思路。 3.1 application.properties配置 还是先从application.properties文件开始,用application.properties来代替application.xml,具体配置如下: #托管的类扫描包路径# scanPackage=com.gupaoedu.vip.spring.demo 3.2 pom.xml配置 接下来看pom.xml的配置,主要关注jar包依赖: <properties> <!-- dependency versions --> <servlet.api.version>2.4</servlet.api.version> </properties> <dependencies> <!-- requied start --> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>${servlet.api.version}</version> <scope>provided</scope> </dependency> <!-- requied end --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.10</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.25</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.3</version> </dependency> </dependencies> 3.3 web.xml配置 web.xml配置如下: <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:javaee="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"> <display-name>Gupao Spring Application</display-name> <servlet> <servlet-name>gupaomvc</servlet-name> <servlet-class>com.gupaoedu.vip.spring.formework.webmvc.servlet.GPDispatcherServlet </servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:application.properties</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>gupaomvc</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping> </web-app> 3.4 GPDispatcherServlet GPDispatcherServlet代码如下: package com.gupaoedu.vip.spring.formework.webmvc.servlet; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; //Servlet只是作为一个MVC的启动入口 public class GPDispatcherServlet extends HttpServlet { @Override public void init(ServletConfig config) throws ServletException { } @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { this.doPost(req,resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { } } 用30个类手写一个Spring的准备阶段就到此为止,大家一定要记得自己动手操作。光看不练假把式。 关注微信公众号『 Tom弹架构 』回复“Spring”可获取完整源码。 本文为“Tom弹架构”原创,转载请注明出处。技术在于分享,我分享我快乐! 如果本文对您有帮助,欢迎关注和点赞;如果您有任何建议也可留言评论或私信,您的支持是我坚持创作的动力。关注微信公众号『 Tom弹架构 』可获取更多技术干货! 原创不易,坚持很酷,都看到这里了,小伙伴记得点赞、收藏、在看,一键三连加关注!如果你觉得内容太干,可以分享转发给朋友滋润滋润!

优秀的个人博客,低调大师

电子邮件环境下STARTTLS的安全性分析

STARTTLS,是一种明文通信协议的扩展,能够让明文的通信连线直接成为加密连线(使用SSL或TLS加密),而不需要使用另一个特别的端口来进行加密通信,属于机会性加密。 电子邮件客户端和服务器之间的连接提供了两种使用 TLS 保护的方法:隐性 TLS 从一开始就对连接进行加密并在单独的端口上运行,而 STARTTLS 提供了一种将现有未加密连接升级到 TLS 的机制。 有时 STARTTLS 被视为一种机会加密模式,仅在可用时提供 TLS 保护。这很容易受到降级攻击。但是,现代电子邮件客户端通常期望强制执行 STARTTLS,并且在启用时,不可能进行未加密的通信。 通过STARTTLS升级连接是很脆弱的,容易受到许多安全漏洞和攻击的影响。我们在 STARTTLS 实现中发现了 40 多个漏洞。我们的结论是,这些漏洞是如此普遍,所以我们建议尽可能避免使用STARTTLS。 我们假设中间人 (MitM) 攻击者可以修改电子邮件客户端和提供商的电子邮件服务器之间建立的连接。 通过命令注入使用 SMTP 和 IMAP 窃取登录凭据 2011 年,Postfix 开发人员 Wietse Venema 描述了 STARTTLS 实现中的一个漏洞,该漏洞允许注入服务器将其解释为加密连接的一部分的明文命令。这是通过使用 STARTTLS 命令向同一 TCP 段中的服务器发送附加命令来实现的。 我们发现,尽管自2011年以来人们就知道这个漏洞,但它仍然非常普遍。截止目前共发现了15个易受攻击的实现场景,在扫描中,2%的邮件服务器显示了这个漏洞。 此命令注入可用于通过 SMTP 和 IMAP 协议窃取凭据。 我们的攻击需要一个中间人 (MitM) 攻击者,该攻击者可以修改网络流量并在同一服务器上拥有自己帐户的登录凭据。攻击者可以注入对其进行身份验证的命令,然后开始发送 (SMTP) 或存储 (IMAP) 电子邮件,受害者发送的登录凭据将存储在攻击者可以访问的电子邮件中。 命令注入还可用于跨协议攻击,以使用邮件服务器的证书提供 HTTPS 内容。 通过响应注入伪造邮箱内容 我们发现了一种类似于电子邮件客户端应用程序中的命令注入的攻击,称之为响应注入。此漏洞影响了许多流行的邮件客户端,包括 Apple Mail、Mozilla Thunderbird、Claws Mail 和 Mutt。 通过在 TLS 握手之前向服务器消息注入额外的内容以响应 STARTTLS 命令,我们可以注入服务器命令,客户端将处理这些命令,就好像它们是加密连接的一部分一样,这可用于伪造邮箱内容。 通过 PREAUTH 和 REFERRAL 窃取凭据的 IMAP 连接降级 在 IMAP 协议中,服务器可以通过 PREAUTH 命令在第一条消息中通知客户端它已经通过了身份验证。该协议禁止在已验证状态下使用 STARTTLS 命令。因此,如果客户端应用程序接受 PREAUTH,则它无法强制执行 STARTTLS。 中间人攻击者可以使用它来阻止 STARTTLS 升级连接并强制客户端使用未加密的连接。该漏洞最初于2014年在Trojitá中被发现。我们发现,其他多个电子邮件客户端应用程序也容易受到同一漏洞的攻击。 此漏洞与 IMAP 功能登录引用和邮箱引用结合使用时尤其严重,这些命令允许服务器指示客户端登录到另一个 IMAP 服务器。通过使用 PREAUTH 来防止加密连接,攻击者可以使用引用来强制客户端将凭据发送到攻击者控制的服务器。幸运的是,许多客户端不支持推荐功能。我们发现只有一个客户—— Alpine,容易受到这种 PREAUTH 和推荐组合的影响。 总结 本文描述的所有漏洞都依赖于不安全连接到安全连接的转换,隐性 TLS 没有这样的转换,因此不容易受到这些攻击。因此,我们认为隐性 TLS 比 STARTTLS 更安全。 我们还指出 STARTTLS 总是引入至少一个额外的连接,所以隐性 TLS 通常提供更好的性能。 安全影响 我们认为本文所讲的攻击难以大规模执行,主要用于有针对性的攻击。因此,你应该始终更新软件并重新配置电子邮件客户端以只使用隐性 TLS。 安全建议 对于电子邮件客户端用户 如果可能,我们建议用户检查并配置他们的电子邮件客户端,以在专用端口上使用带有隐性 TLS 的 SMTP、POP3 和 IMAP,即SMTP/Submission端口465,POP3端口995,IMAP端口993。某些邮件服务提供商,尤其是 Microsoft 和 Apple,不支持SMTP/Submission的隐式TLS。我们建议用户让他们的邮件服务提供商提供更安全的隐性 TLS 选项。 对于应用程序开发人员 默认情况下,电子邮件服务器和客户端应用程序都应提供隐性 TLS。从长远来看,软件开发人员可能会决定根本不支持 STARTTLS,从而简化他们的代码和配置对话框和文件。 我们建议在服务器端和客户端审核所有支持 STARTTLS 的应用程序,因为应用程序需要确保没有未加密的内容作为加密连接的一部分被处理。 IMAP 应用程序必须确保它们不允许将 PREAUTH 与 STARTTLS 结合使用,可以使用EAST 工具包,它允许测试应用程序。 对于邮件服务器管理员 确保你使用的服务器支持所有支持的协议的隐性 TLS,如果可能,请考虑为 IMAP、POP3 和 SMTP 提交禁用 STARTTLS。 如果你确实需要支持 STARTTLS,建议使用建议的工具针对所有支持的协议的命令注入漏洞测试服务器。如果服务器软件易受攻击,立马应该进行安全更新。 常见问题 STARTTLS不安全吗? STARTTLS有两种“模式”,“机会主义模式”和“强制模式”。电子邮件客户端在提交新邮件或访问现有邮件之前必须使用用户名和密码进行身份验证。对于这些连接,必须严格执行通过STARTTLS传输到TLS的转换,因为降级将暴露用户名和密码,并给予攻击者对电子邮件帐户的完全访问权。 如何测试使用的软件是否易受攻击? 我们了提供允许测试电子邮件客户端和服务器的 EAST 工具包。 使用我们的命令注入测试器测试电子邮件服务器的命令注入相对容易。 testssl.sh(开发版)和 TLS-Attacker/TLS-Scanner也会检查命令注入。 其他支持 STARTTLS 或类似机制的协议是否受到影响? 我们希望在其他使用 STARTTLS 的协议中看到类似的漏洞,例如 XMPP、FTP、IRC 或 LDAP。因此,我们建议避免 STARTTLS 并尽可能使用隐性 TLS。 邮件服务器之间的通信(MTA到MTA)如何处理? 传统上,电子邮件服务器之间的 STARTTLS 只能防止被动攻击,容易受到主动攻击,例如 STARTTLS 攻击。 【责任编辑:未丽燕 TEL:(010)68476606】

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册