如何确保 GitHub 上的安全
来源:
DZone GitHub 当之无愧地被认为是最受欢迎的团队开发平台。根据去年秋天的数据,超过 4000 万程序员使用了这项服务。由于他们中的大多数人都使用开源来创建软件,因此在 Github 上工作时的安全性应该是您的首要任务。重用代码会增加传播漏洞的风险。这意味着每个 GitHub 用户都应该高度重视创建安全的开发环境。
为了保证 GitHub 代码的安全,您需要遵循 8 条规则。
提供访问控制
访问控制是提高安全性的最佳方法之一,不仅在 GitHub 上,而且在任何其他需要代码保护的环境中也是如此。GitHub 提供了多种降低工作风险的方法。首先,养成授予最小权限的习惯——仅向存储库用户授予他们完成工作所需的权限。您还应该遵循其他访问控制方法:
- 限制存储库的创建,以防止用户在公共存储库中泄露有关该组织的信息;
- 启用分支保护和状态检查,以便用户可以安全地合并提交或管理分支;
- 允许或禁用私有存储库的分叉,以确保用户不会泄露或与他人共享您的代码;
- 撤销所有不再是社区成员或公司员工的不活跃用户的访问权限;
- 定期检查您的项目在 GitHub 上的访问权限;
- 确保用户不与他人共享 GitHub 帐户访问权限或密码;
- 确保每个存储库用户在其帐户中使用双因素身份验证;
- 定期更改个人访问令牌和 SSH 密钥。
切勿将访问数据存储在 GitHub 文件中
通过代码、配置文件或提交消息泄露对 GitHub 存储库的访问信息可用于攻击。为了防止敏感数据被添加到您的存储库中,请使用访问控制工具,例如
git-secrets或
Vault。这些工具会扫描您的代码库,并在代码或配置文件中发现敏感信息时更改访问权限。如果您在 GitHub 存储库中发现敏感信息,应立即将其删除。但由于 GitHub 保留了存储库中所有提交的历史记录,因此仅删除数据是不够的。您需要从 GitHub 存储库历史记录中
删除文件。提高安全性的一个重要步骤是替换以前公开的所有密码和令牌。
为易受攻击的依赖项启用警报
随着 GitHub 用户处理越来越多的项目,控制越来越多的依赖对象变得越来越困难。幸运的是,GitHub为存储库中发现的
易受攻击的依赖项提供自动警报。这些警报基于
国家漏洞数据库(NVD)、
GitHub 安全公告和 WhiteSource 漏洞数据库,支持 200 多种编程语言。GitHub 警报让使用开源库变得更加轻松、安全。
检查从 GitHub 添加的应用程序
GitHub Marketplace 包含由第三方开发人员和公司编写的数百个应用程序。因此,仔细检查添加到存储库的每个应用程序非常重要。从 GitHub Marketplace 安装应用程序时,请遵循以下准则:
- 强制执行最小特权原则。切勿给予应用程序超出其所需的访问权限;
- 始终质疑应用程序请求的访问权限或权限。考虑一下这种级别的访问可能会造成的损害;
- 在授予公司或应用程序开发人员访问您的 GitHub 存储库之前验证他们是否确实存在;
- 检查应用程序的功能和安全性。如果其中包含漏洞,您可能会成为黑客攻击的受害者;
应用程序的安全性是通过其最薄弱的部分来判断的。这也适用于 GitHub 存储库。因此,在授予应用程序访问您的存储空间之前,请确保您信任它并且它与其请求的访问级别相匹配。
检查所有从GitHub导入的代码
开发人员经常使用其他人的代码。每次将别人的部分代码复制到您的项目中时,请对其进行全面审查。这似乎是浪费时间,特别是对于小型项目,但如果忽略此规则,您可能会在存储库中引入漏洞。与导入代码相关的另一个风险是它可能包含敏感信息,例如访问数据。如果它们存储在 GitHub 文件中,则会产生另一个安全风险。在复制代码之前对其进行审核有助于识别此类漏洞。不要因为其他人的代码位于私有存储库中而认为它是安全的。它很可能会损害您的代码库。
对您的存储库使用自动静态源代码分析
您可以使用多种第三方工具来分析存储库中的漏洞。其中之一是
WhiteSource Bolt,它是来自 GitHub Marketplace 的免费工具。WhiteSource Bolt 会扫描您的存储库以查找所有公开代码中的漏洞。它还提供有关漏洞的详细信息并建议修复选项。
使用适合您需求的 GitHub 计划
许多公司都有政策阻止开发人员在 GitHub 等平台上发布代码。这些限制在政府部门和金融机构中尤其常见。如果您在高度监管的环境中工作,请使用
GitHub Enterprise,这是一种允许您在本地服务器上托管存储库的企业计划。这提供了更高级别的安全性,因为它允许公司的开发人员访问所有项目,而不必担心未经授权的 GitHub 用户。
在您的项目中遵循全面的安全策略
安全是一项集体责任。如果您在团队中工作,制定所有利益相关者都必须遵守的安全规则非常重要。理想情况下,您应该在规划阶段将网络安全和开发团队聚集在一起,以确保他们同步工作。这将更容易确保开发过程中的保护。如果您的团队成员之一不小心存储密码或其他敏感信息,则可能会使整个存储库面临风险。为了避免这种情况,请清楚地记录所有同事必须遵循的安全程序。
结论
保护 GitHub 上的代码很容易。您只需要利用 GitHub 的内置安全功能来确保适当的访问控制。如果您对最大程度的保护感兴趣,请集成其他工具,以提高开发各个阶段的代码安全性。我们还建议您查看文档的 GitHub
商业和
免费用户安全部分。通过这种方式,您可以获得有关代码安全和保护的更多信息。
快速调试 Java 代码的有用技巧
来源:
Hackernoon 除了编写高效的代码之外,提高调试能力是让 Java 开发人员的生活变得更轻松的最有用的事情之一。这在现代软件开发条件下尤其重要,因为软件世界正在积极转向分布式架构和异步代码。
虽然软件错误是不可避免的,但在复杂的构建中检测和修复它们变得越来越困难。而当进入产品发布阶段时,调试过程就成为一个更加严重的问题。不幸的是,没有办法避免这种情况——调试是必要的。为了帮助您,我决定分享一些在不同开发阶段调试 Java 应用程序的有用技巧。
使用控制点
让我们从断点开始,这是任何调试过程中一个明显但非常重要的点。检查点允许您停止应用程序的执行,以便您可以分析程序的状态并找出代码无法正常工作的原因。每个调试器都提供多个断点选项,包括条件断点、异常断点、观察点和跟踪点。了解如何以及何时使用不同类型的断点可以使调试过程更加顺利。值得一提的是,一些现代工具支持检查点而不中断应用程序。这样就可以在代码中设置点并收集调试数据,而无需停止程序执行。
显示逻辑结构
在监视 Java 类中的内容时,显示逻辑结构功能非常有用。如果启用此功能,变量列表将显示一个数组,这在调试上下文中更有用。这非常方便,特别是当您的代码缺少对象的 toString() 方法时。变量视图还允许您在调试时直接更改变量的值。由于不必使用更改的输入数据重新启动调试会话,因此可以节省大量时间。
学习浏览代码库
任何 Java 调试器都可以使用多个函数,这些函数允许您在调试时浏览代码的不同部分。其中一些包括“跑到线”、“跨过”、“步入”和“步入”。除了这些之外,还可以考虑另外两个选项:
- 下降到帧 - 此函数用于返回到堆栈帧中的某个点。如果您错过了某个点并需要返回,只需使用“Drop to Frame”功能即可。
- 步骤过滤 - 允许您在调试期间跳过某些数据包。当您可以简单地过滤掉不需要的类型时,您不必浏览 JDK 系统中的所有类。
为了提高代码导航速度,您需要掌握功能键组合:
- F5 - “步入”。
- F6 - “跨过”。
- F7 - 用于“步骤返回”。
- F8 - 运行到下一个检查点。
尽管不同 IDE 的热键可能有所不同,但如果您记住它们,您就不必更频繁地使用鼠标。
学会避免死锁
当两个或多个线程在形成循环依赖关系后发生阻塞时,就会出现死锁情况。由于一组 Java 线程通常正在等待另一个资源,这可能会导致应用程序完全停止。调试 jstack 死锁可能非常困难,因为它们不显示内存峰值、CPU 负载等问题指标。有多种方法可以解决 jstack 死锁情况。首先,您可以捕获 JVM 集群中的多个线程转储来推断线程模式。在这种情况下,分析静态线程转储可能还不够。根据 JVM 集群的大小,可能需要搜索多个文件,这通常是一个劳动密集型且耗时的过程。最好使用应用程序监视解决方案,该解决方案提供隔离线程死锁所需的 JV 层和代码层。幸运的是,有一些创新工具可以帮助解决这种情况,包括一些现代调试器以及商业 APM 工具。这些工具可以提高 Java 代码的透明度,同时识别错误。
利用生产调试器的强大功能
大多数开发人员通常遵循的典型调试过程包括复制环境、隔离错误,然后修复它。然而,这并不适用于所有情况。如果是这种情况,开发人员应该使用强大的生产调试器。Rookout 就是这样的工具之一。它允许您从应用程序收集调试数据,而无需更改其状态或流量控制。使用 Rookout,您可以设置不间断断点来获取完整的堆栈跟踪、捕获实时变量或调试所需的任何其他应用程序数据。因此,无需使用高开销的监控解决方案进行生产调试,只需使用 Rookout,它提供了调试应用程序所需的一切,而无需重新部署或编写新代码。无论您是在服务器端还是容器化应用程序上工作,Rookout 都是您调试工具库的绝佳补充。
不要忘记远程调试
绝大多数 IDE(例如 NetBeans、Eclipse、IntelliJ IDEA 和 Visual Studio)都支持远程调试,这是一种允许您修复位于另一台计算机上的 Java 代码的技术。当您的系统不支持本地调试,或者您的计算机没有足够的资源来运行调试器时,这一点尤其重要。要执行远程调试,您必须提供调试器将用于连接到远程端口的配置信息。远程调试对于异地开发人员需要连接到应用程序来修复错误的故障排除也很有用。请记住,有时调试可能比实际实现花费更长的时间。当您磨练 Java 调试技能时,始终努力编写干净、高效的代码 - 当修复错误时,它会得到回报。如果您感觉事情正在失去控制,那么休息一下总是个好主意。bug 是一个编程难题,许多程序员已经设法在不靠近计算机的情况下解决这个问题。使用上述策略来消除 Java 调试问题。快乐编码!
GO TO FULL VERSION