首页 文章 精选 留言 我的

精选列表

搜索[质量保障],共10002篇文章
优秀的个人博客,低调大师

从工具到实践:如何在GitHub上保障开源项目安全?

1998年,Christine Peterson创造了 “开源软件”这个词。她解释道:“这是刻意为之,为了让其他人更容易理解这个领域”。同年,O’Reilly组织了首届“开源峰会”。 开源软件受到更多人青睐原因在于,用户对软件拥有更多的控制权因为他们可以检查代码。对于长期项目来说,开源软件被认为是稳定的,因为这些项目遵循开放的标准,即便维护者停止工作,也不会凭空消失。活跃的开发者社区十分重要。 比起闭源软件,开源需要更多地考虑安全问题,因为任何人都可以查看并修改代码。贡献者可以发现错误并提交一个PR对代码进行变更。与此同时,这也伴随着一系列的安全问题。 什么是软件供应链攻击? 当有人利用外部供应商或能够访问你的企业的数据和系统的第三方组件来渗透你的数字基础设施时,就会发生软件供应链攻击。供应链攻击的类型多种多样,本文将聚焦于开源供应链。 任何人都可以通过开源举措为项目的开发做出贡献。利用这个切入点,黑客可以将漏洞编入开源项目中,当企业将该项目引入其软件中时也引入了新的威胁,而且往往是在不知情的情况下,通过遍历依赖或间接依赖引入。 Web 应用安全的重要性 Web 应用安全是一个概念,它涵盖了一系列嵌入Web应用程序的安全管控,以保护其资产免受潜在的恶意行为的影响。它涉及安全开发实践,在整个软件开发生命周期(SDLC)中实施安全措施,以发现项目及其配置中的安全漏洞。 好消息是你可以通过使用不同的应用程序及 action 在 GitHub 内实现安全保护,不管是一个简单的demo项目,还是大型开源项目。基于此,开源项目可以拥有与闭源软件相同的安全水平。 Section 1:GitHub Marketplace 及 GitGuardian 应用 什么是 GitHub Marketplace? 2016年的GitHub Universe上,首次引入GitHub Marketplace。它是一个开发者可以找到集成插件并将其落实到工作流程中的地方。 如何利用安全工具创建基础流水线并实现防护? 你可以利用GitHub Marketplace中的安全应用和action来保护你的流水线每个开发阶段的安全。 一个基础的流水线包括: 软件成分分析工具,专注于识别代码库中的开放源码,以便维护者和贡献者能够管理它们的安全和许可证合规问题 防止密钥泄露的工具 代码分析工具,它是一种在程序运行之前通过检查源代码进行调试的方法,一般根据一组编码规则分许一组代码 如何为你的项目选择相关应用?你需要考虑些什么? 选择工具、应用或是action 主要取决于你的项目或团队的工作流程。你们使用的是什么类型的技术栈?你们是部署到Docker还是使用K8S?在你们的流水线中有多少个步骤?你能在每个步骤都实施防护吗? 然后,你将会找到许多满足你需求的工具和应用。而对于开放源码软件的维护者来说,好消息是这些应用程序通常对公开的代码库或开源软件项目是免费的。 你可以在一个阶段中采用2个工具,比如 Synk 和 Mend 扫描你的依赖项。这两种工具在覆盖率方面都会有其优点和缺点,并会帮助你更好地了解你的项目的依赖项。如果你认为一个工具比另一个好,你仍然可以删除你不需要的那个。 让我们来看看OWASP Zap基线扫描这个GitHub action,它会扫描目标URL的漏洞,并在你提交PR时将其反馈给你的项目。 当你打算在项目中采用一个action或一个应用时,你应该在项目页上看到各种信息——GitHub是否验证该action?上图中显示为已验证,你可以在右侧看到一个蓝色的小勾。有多少贡献者在为这个项目工作?该项目获得了多少颗星?有多少issue和PR? 再导航到 GitHub 仓库,看看维护者和贡献者是如何积极推动这个项目的。它的文档是否完善?他们是否提供了基本的使用范例?(比如一个简单的YAML文件)是否容易实现?是否能与你项目的编程语言兼容? 接下来,我们来看看 GitGuardian 的实际用例。你可以直接在 Marketplace 中搜索到它。 点击产品页,你将获得更多信息。作为项目的维护者,你将会用 OWASP Action 检查我们前面提到的要求是否达标。我们可以看到 GitHub 是否验证了该应用、应用安装数量以及更多关于该组织的其他信息。 划到页面底部,你将看到价格及安装信息。GitGuardian为公开的代码库提供免费的监控。选择你想要安装的账号,并点击“Install it for free”。 你可以在所有代码库上都安装 GitGuardian 或者选择其中几个。你可以为需要安全防护的每个阶段重复这一过程。 Section 2:管理开源项目 当贡献者提交PR时,它将触发流水线中集成的所有应用和action。理想状况下,就GitGuardian而言,你希望凭证不被推送到源代码中,并且在贡献者提交PR之前停止这一行为。你可以在你的CLI上采用 GitGuardian Shield(ggsheild),并与预提交的 git hook集成以增强防护,确保凭证没有被推送到源码中。 如果没有设置 ggshield,在代码库上推送密钥的贡献者会在提交PR时收到告警。下图虚拟PR提交的过程中,你可以看到一些工具被触发。 你可以让其中一些工具在主干分支上是必须触发的。要做到这一点,需要进入项目设置,在【Code and automation】中点击【Branches】。在这里,你可以添加分支保护规则,要求在合并PR前必须通过状态检查。 如何从ChatOps中获取价值? ChatOps 是一个协作模型,将人、工具、流程和自动化连接到一个透明的工作流程中。使用Slack进行讨论,并为特定的工具设置专门的频道,这将有助于你了解项目中发生的事情。监控和设置告警是重要的一环,可以帮助开发人员获得正确的信息。 GitHub 项目:如何利用面板追踪安全任务 在开发开源项目时,你可以利用GitHub projects来列出你为某一特定功能所要做的所有任务。你可以创建标签和epics(milestones)来跟踪进度或用于提出问题。还可以创建一个安全标签来追踪你项目中的漏洞。 你可以使用自动化项目或面板,其中的卡片会根据PR的状态相应地移动。这个方式可以很好地展示功能开发进度以及你可能需要帮助的地方。 在 README 文件中展示项目的健康状态 如果你想为你的项目吸引更多的贡献者,不要忘记使用应用及action工作流程提供的标签或tag来展示项目的健康状态,并将其添加到项目的README文件顶部。你通过GitHub文档了解更多徽章设置: https://docs.github.com/en/actions/monitoring-and-troubleshooting-workflows/adding-a-workflow-status-badge Section 3:安全加固开源项目 除了在流水线各环节添加安全防护外,你还可以通过采用以下最佳实践加固开源项目: 采用最小权限: 在成员权限部分将基本权限设置为无权限,这样成员只能克隆和提取公共代码库。如果要给贡献者更多的权限,维护者需要把他们加入团队或让他们成为单个代码库的协作者。创建团队、添加用户,并将他们分配到具有特定权限的特定代码库中。 让所有维护者和贡献者都必须使用2FA。 到2023年底,GitHub将要求所有贡献代码的用户启用一种或多种形式的双因素认证。 保护主分支: 如上所述,一定要保护主分支,以免被维护者意外删除。 启用提醒和告警: 更新email地址以保证你能收到来自项目的提醒信息 添加正确的许可证: OSS许可证可以保护贡献者和用户。如果你不确定应该选择哪个许可证,可以查看这篇文章进行简单的入门,并且确保在你的代码库中有 LICENSE.md 或 LICENSE.txt 文件。 审查应用程序、工具和Webhooks的列表: 如果你在流水线中的一个步骤中使用了多个应用程序、工具或webhooks,请review 它们是否仍然适用,并删除任何陈旧过时的或未使用的组件。 如果你依赖 GitHub Actions 来构建、测试和部署你的项目,一定要检查你的工作流程配置。访问下方链接可以查看 GitHub Actions 安全最佳实践: https://blog.gitguardian.com/github-actions-security-cheat-sheet/ 总 结 开源组件可以成为大规模网络攻击的一个载体。去年我们已经看到了Apache Log4j 的漏洞,这是一个开源的Java包,用于支持许多Java应用程序的活动记录。虽然不是所有用Java编写的软件都有漏洞,但受影响的软件包被开发人员广泛使用,有许多应用程序和服务都使用这个库。大型科技公司,如微软、VMWare、亚马逊、IBM等都受到影响。 使用不同的工具和防护在整个流水线中拥有可见性对于减少攻击面至关重要,在本文中我们已经看到借助 GitHub Marketplace 的应用和Action可以帮助达成这一目标。软件供应链安全管理平台SEAL 也可以帮助用户获取项目的全局安全可见性,目前已开放免费试用:seal.io/trial。 作为维护者和贡献者,可以先创建一个小型流水线,并尝试试用其中一些工具,为每个贡献者安全加固GitHub项目。 不停地实践是保证安全的关键一环,但更重要的是,不要在GitHub上push你的密钥!

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

Mold 1.7 发布,如继续无资金保障或将更改许可

Mold 1.7 现已发布。Mold 是现有 Unix 链接器的快速替代品,它比 LLVM lld 链接器快几倍。 开发人员 Rui Ueyama称,一直以来他都在全职从事该项目,并已持续了两年。原本以为随着项目的流行,或许可以获得一定的金钱收益,但事实却是一直在赔钱。因此他认为,需要采取行动使该项目长期可持续。所以想通知用户,除非之后获得大笔资金,否则他正在认真考虑将项目的许可证从 AGPL 更改为 source-available license,即个人可以免费使用但企业用户必须付费的模式。 Rui 还在他的Google Doc中指出: 甚至有点讽刺的是,有几家大公司曾问我,mold/macOS 什么时候可用,因为他们想把它用于他们价值数十亿美元的业务。但他们都没有给我资金支持。 获得财政支持的一个主要障碍是大多数公司没有一个内部程序来开始资助一个开源项目。如果他们需要为 license 付费,这很好,这是他们日常业务的一部分。但支持(或捐钱给)"自由"软件几乎是不可能的。它在各个管理级别提出了太多问题。它应该被归入什么财政项目?是否有任何法律上的影响?谁能首先批准它?最后但并非最不重要的是,如果它可以免费使用,他们为什么要这样做? 我一直在努力建立一个基于销售支持和获得财政支持的业务。但我需要承认,它并没有像我希望的那样做得很好。 Mold 1.7的更新内容包括: 新功能 [m68k] mold 现在支持摩托罗拉 68000 系列微处理器。它是 80 年代原始 Mac 或 Sun 工作站中的处理器。这项工作由 m68k 爱好者社区赞助。 错误修复和兼容性改进 修复了 Facebook/Meta 的 BOLT 优化器 的一些问题 (#789)。从下一个 LLVM 版本开始(需要llvm/llvm-project@20204db),BOLT 应该可以开箱即用地处理 mold-generated 的可执行文件。 修复了一个长期存在的符号解析问题,该问题涉及 GNU UNIQUE 符号,导致一些程序的链接失败。(730e970) 以前,如果版本脚本包含“C++”指令,并且符号匹配non-C++ 版本模式和 C++ 版本模式,则可能会为该符号分配错误的版本。已修复此问题,以便 mold 的行为与 GNU ld 匹配。(9875150) 更新说明:https://github.com/rui314/mold/releases/tag/v1.7.0

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

SpringBoot之整合Spring Security,为自己的系统提供安全保障

by 杨乐 需求: 1.权限控制:角色有多种角色,每个角色对应多个用户,每个角色又对应不同的菜单权限 2.资源控制: ①有些地址只能当用户登录之后才能访问 ②有些地址可以对无状态用户开放,例如API ③对不同角色的用户的访问的权限进行控制 ... 3.系统登录与注销:登录成功后将用户信息保存在系统中,转向成功页面,否则重新指向到登录页面,并提示错误信息 初步解决方案: 使用filter完成所有需求: ①将用户登录的信息保存在session中,在filter进行判断,请求的地址是否是在登录 之后才能访问,然后写一堆if判断,解决问题1 ②解决方法和问题①一样的,在filter中进行过滤 ③对不同角色有不同的权限则也可以在filter中操作,根据用户信息查到用户所属角 色,再进行判断,解决问题。 ④系统的登录和注销可以使用一个action,在action中进行这些逻辑处理。解决问题 遇到的问题: 在使用如上方法完成需求之后,反过来看,会发现有好多冗余代码,使系统变得臃肿,光 filter里面就会出现大量的if语句,而且系统代码并不能被下一个系统直接复用,没有将功能进行模块化的开发。 最终解决方案: 使用springboot 对spring security进行整合: 为什么使用security? ①Spring Security是能够为J2EE项目提供综合性的安全访问控制解决方案的安全框架; ②Spring Security 完美的解决了我以上的需求 ③有了security我可以更加便捷的管理我的系统,拦截一个地址,不再需要我去配置一 个filter,只需要添加一个配置就能搞定了,废话不多说进入正题吧: 开始coding吧 spring security的starterMaven包: security maven 一、首先进行安全入口的配置: WebSecurityConfig.java WebSecurityConfig 继承WebSecurityConfigurerAdapter重写config,configureGlobal方法 WebSecurityConfig.java 这里面可以配置不需要拦截的url,和登录,注销后的处理页面,还能添加认证数据源,再登录时获取额外的参数,例如后面提到的验证码等参数 WebSecurityConfig.java 这个方法用来加载 处理登录的逻辑代码(用户名,密码,验证码等逻辑验证) 二、用户验证 CustAuthenticationProvider.java 实现AuthenticationProvider接口中的authenticate方法进行登录认证 CustAuthenticationProvider.java 三、封装用户信息类 CustUserDetails.java 实现UserDetails接口 CustUserDetails.java 四、根据用户名获取用户信息 SnailUserDetailsService.java 实现UserDetailsService接口中的loadUserByUsername方法,从数据库中加载用户信息并封装到CustUserDetails中返回 SnailUserDetailsService.java 五、添加额外参数验证: 在普通的认证中,我们只能对用户名和密码进行验证,不能够获取表单中额外参数进行验证(如验证码),但是security给我们打开了一扇门,还记得步骤一中的authenticationDetailsSource这个源码,这个就是加载额外数据源参数,我们只需创建一个类实现AuthenticationDetailsSource接口中的buildDetails方法,将我们需要的额外参数加载进来即可 CustomAuthenticationDetailsSource.java实现AuthenticationDetailsSource接口 CustomAuthenticationDetailsSource.java 创建CustomWebAuthenticationDetails.java继承WebAuthenticationDetails加载参数 CustomWebAuthenticationDetails.java 六、到这里,所有代码都写完了,我们还有一个需求就是如何在项目中获取用户信息:security提供了SecurityContextHolder这个类,能够帮助我们获取用户的所有信息,使用方式如下: controller 附上所有代码下载链接,使用时请大家根据自己的开发环境进行相应的调整,如果没有积分的可以留言,我会上传到百度云中,提供你们下载。 csdn:https://download.csdn.net/download/weixin_34311210/10400629 百度云:https://pan.baidu.com/s/1NNgCgk_2iqjMgq6tgeJEog

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

嵌入式工控机保障港口靠泊零事故

工业4.0工控产品以智能制造为主导的第四次工业革命,是集成大量计算机、通信和控制技术为一体的智能系统,在各类新技术高度集成的行业发展背景下,工控机正处于新的技术转折点。 港口,是一个国家或地区经济现状的晴雨表。在中国经济水平高速增长的大背景下,我国各地的港口也是呈现出一派繁荣的景象。对于技术手段助力现代化、信息化港口的手段中,就不得不说港口辅助靠泊系统。在如今港口吞吐量逐年增长的态势下,传统的办法是捉襟见肘。现代化的港口辅助靠泊系统,就能大幅提升效率,有效降低事故发生率。 港口辅助靠泊系统将嵌入式计算机应用到辅助靠泊系统中,并采用红外线技术进行距离监测,以帮助加快船舶的靠岸与离岸速度,还能提升港口的安全通行系数。 鉴于港口所处的特殊环境,以及每天面对大量的船只出入,需要处理大量的控制任务与指令,对系统的高效、稳定、可靠、安全都有极高等级的要求。故而,在港口辅助靠泊系统计算机硬件中,必须选用更可靠耐用的工控产品。 选择高品质更稳定的嵌入式计算机作为整个辅助靠泊系统的“中枢大脑”——控制主机。这样控制主机就可以控制红外线检测系统实时检测船舶与港口码头之间的距离,并将这些位置信息实时反馈至港口显示屏及相关操作台,操作员就能高效及时地管理船舶的泊岸与离岸。在朗锐智科嵌入式方案中,可支撑港口辅助靠泊系统计算机系统的嵌入式工控机,具备多接口、双LANS、多 DI/DO和多串口等配置,可满足辅助靠泊系统的硬件技术要求。 机器视觉工控机2.jpg 未来,朗锐智科宗旨是为客户提供可靠的、高品质的计算机平台,包括工业主板和系统、强固型平板电脑、PC/104模块、PICMG和COM模块、嵌入式单板计算机、嵌入式控制器、机器视觉、网络设备及相关配件。将突破现有的技术架构,形成新一代的工控机,其特点是系统架构更开放、集成度更高、功能模块化、机器智能化等,将为整个“工业4.0”下的智能系统构建提供重要支撑。

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

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等操作系统。

用户登录
用户注册