您好,欢迎来到12图资源库!分享精神,快乐你我!我们只是素材的搬运工!!
  • 首 页
  • 当前位置:首页 > 开发 > WEB开发 >
    如何在软件开发中避免出现破绽
    时间:2020-03-01 21:24 来源:网络整理 作者:网络 浏览:收藏 挑错 推荐 打印

    【51CTO.com快译】随着数据泄露事情的频繁发作,创立和维护安全的软件产品关于每一个组织来说,都变得越来越重要了。虽然并非一切的攻击都可以被预期或防范,但是我们至少可以经过消减软件的破绽,来避免攻击的暴出面。

    如何在软件开发中避免出现破绽

    在本文中,您将了解一些最为常见的软件破绽,以及如何避免它们的办法。此外,您还会学习到如何采用一些通用的优秀实际,来确保软件和数据的安全。

    常见的软件破绽

    2019年,MITRE.org的CWE(Common Weakness Enumeration,通用缺陷列表)推出了25项最风险的软件错误列表,请参见:https://cwe.mitre.org/top25/archive/2019/2019_cwe_top25.html。虽然攻击者的手法五花八门,但实践上却是万变不离其宗地组合了各种常见的攻击方式。在此我们将重点讨论其中的几个常见软件破绽。

    缓冲区溢出(Buffer Overflow)

    当您的顺序试图读取或写入超出范围的缓冲区时,就会发作缓冲区溢出的错误。其直接的危害是:能够招致数据掩盖,或是在现有的代码中附加不该出现的数据。因此,缓冲区溢出可以使得攻击者经过执行代码,来更改顺序流,进而读取某种敏感数据,或形成系统的崩溃。

    缓冲区溢出破绽的典型示例包括:

    接受各种长度不受限制的输入

    允许从有效的索引处对数组停止读取操作

    缓冲区溢出破绽通常潜藏在软、硬件体系架构的设计、实施、以及操作阶段。这些破绽最常见于C、C ++和Assembly顺序中。当然,它也能够出如今缺乏对内存管理提供支持的任何一种编程言语里。

    针对缓冲区溢出破绽的预防措施

    如上文所述,我们应当尽量选择诸如:Java或Perl等具有防范,或降低此类破绽风险机制的言语。而在C#之类的编程言语中,我们千万不要禁用溢出保护的选项。即使如此,那些具有“免疫”功用的编程言语,也能够会在运转环境中的易受攻击的、原生代码交互时,产生不可预期的错误。

    为了避免缓冲区溢出破绽被应用,您可以运用诸如Visual Studio或StackGuard之类的编译器,来针对函数或扩展名停止输入的限制。同时,您还可以运用各种工具,在内存中随机地陈列顺序的不同组件,以使得地址更难以被辨认与预测,进而使攻击者难以应用到这些特定的组件。

    另外,请创立代码时确保正确地分配缓冲区空间,并运用各种办法和功用来限制输入的大小。

    不当的输入验证(Improper Input Validation)

    假设我们不可以在接纳端对用户的输入采取验证,或验证不足,那么就会产生所谓的“输入验证不当”。而不当的验证则会使得攻击者经过执行恶意代码,来更改顺序流,拜访敏感数据,以及滥用现有的资源分配。

    不当验证的典型示例包括:

    自以为攻击者无法拜访到隐藏的表单字段

    仅验证输入的字段的长度,而不是详细内容

    不当的验证异样会潜藏在软、硬件体系架构的设计和实施阶段。它可以发作在任何接受外部数据的编程言语或系统中。

    不当验证破绽的预防措施

    我们应该对任何用户采取“零信任(zero trust)”的准绳,并假定一切的输入都是可疑的,直到它们被证明是安全的为止。同时,我们可以运用白名单机制,来确保输入的内容仅包含了可接受的格式与信息。

    因此,在验证输入时,请评价其长度、类型、语法、以及逻辑上的契合性(即:输入能否具有语义)。您可以运用多种工具来确保完成了充沛的验证,例如:OWASP ESAPI Validation API(https://owasp.org/www-project-enterprise-security-api/)和RegEx(RegularExpression,正则表达式)。这些工具可以协助我们验证一切的输入源,包括:环境变量、查询、文件、数据库、以及API调用。

    此外,我们应当确保在客户端和效劳器端都执行相应的反省。为了避免出现客户端验证被绕过的状况,我们需求重点在效劳器端捕获各项输入,以辨认攻击者的潜在操纵。同时,在顺序代码停止任何必要的组合或转换后,也请您再次验证其输入。

    信息泄露(Information Exposure)

    数据被有意或有意地提供应潜在攻击者,被称为信息泄露。除了泄露敏感的数据信息,向攻击者提供能够被应用的软、硬件环境信息也是一种泄露。

    信息泄露的典型示例包括:

    错误地暴露文件或顺序的残缺途径

    顺序的错误、异常音讯中暴露了数据库中用户的相关信息

    信息泄露破绽依然会潜藏在软、硬件体系架构的设计和实施阶段。它跟编程言语有关,更大水平上取决于编程的习气。

    信息泄露破绽的预防措施

    为避免信息的泄露,您应当在设计顺序架构时,针对明白的信任边界区域(请参见:https://www.microsoft.com/en-us/itshowcase/implementing-a-zero-trust-security-model-at-microsoft),来保护敏感的信息;经过运用拜访控制,来保护和限制“安全”区域与各个端点之间的衔接。

    为了最大水平地避免该破绽,请在顺序中验证各类错误的提示音讯,以及用户正告信息中能否包含有不必要暴露的内容。同时,您还应该限制在URL和通讯包的头部(header)出现的敏感信息。例如:您可以隐藏残缺的途径称号,以及API密钥。

    特权或认证不当(Improper Privileges or Authentication)

    假设未能正确地分配,跟踪,修正或验证用户的相关权限和凭据,那么就能够发作特权或身份验证不当的状况。此类破绽可以让攻击者滥用特权,执行受限的义务,以及拜访受限的数据。

    特权或身份验证不当的典型示例包括:

    未及时回收暂时的提权

    仅经过黑名单、而不是白名单来限制特权

    允许较低的特权级别去影响较高的特权帐户,例如:重置管理员的密码

    限制登录尝试的次数或会话闲暇时间

    特权或身份验证破绽依然能够发作在软、硬件体系架构的设计、实施、以及操作阶段。它异样不限于某一种编程言语。

    特权或身份验证破绽的预防措施

    您应当将“最小特权准绳”,运用于与目的软件和系统交互的一切用户和效劳之中。只给真正需求某些资源和操作的用户或效劳,完成所需义务的最少权限。我们需求经过在整个顺序和环境中运用拜访控制,来限制用户和实体的权限。

    (责任编辑:admin)