• 构建安全的数据访问威胁与对策(一)


    威胁与对策

    要构建安全的数据访问代码,需要了解数据访问代码中的威胁是什么、常见漏洞是如何产生的以及如何使用适当的对策来降低风险。

    数据访问代码面临的主要威胁包括:

    •SQL 注入

    •配置数据的泄漏

    •敏感应用程序数据的泄漏

    •数据库架构和连接详细信息的泄露

    •未授权的访问

    •网络窃听

    图 14.1 阐明了这些主要威胁。

    数据访问代码面临的威胁和攻击

    图 14.1
    数据访问代码面临的威胁和攻击

    SQL 注入

    SQL 注入攻击利用易受攻击的数据访问代码,并允许攻击者在数据库中执行任意命令。如果应用程序使用数据库中不受限制的帐户,由于攻击者可以更自由地执行查询和命令,因此受到的威胁会更大。

    漏洞

    使数据访问代码容易受到 SQL 注入攻击的常见漏洞包括:

    •弱输入验证

    •在不使用类型安全的参数时动态构造 SQL 语句

    •使用特权过高的数据库登录

    对策

    要应对 SQL 注入攻击,请务必:

    •限制和净化输入数据。

    •使用类型安全的 SQL 参数进行数据访问。这些参数可以与存储过程一起使用,也可以是动态构造的 SQL 命令字符串。参数执行类型和长度检查,并同时确保注入数据库中的代码被视为文本数据(而非可执行语句)。

    •使用在数据库中具有有限权限的帐户。理想情况下,只应向数据库中的选定存储过程授予执行权限,且不提供直接的表格访问权限。

    配置数据泄露

    数据访问代码所使用的最敏感的配置数据是数据库连接字符串。如果泄漏的连接字符串包括用户名和密码,后果将不堪设想。

    漏洞

    下列漏洞会增加与泄漏的配置数据相关的安全风险:

    •使用 SQL 身份验证,这要求在连接字符串中指定凭据

    •代码中嵌入的连接字符串

    •配置文件中的明文连接字符串

    •无法加密连接字符串

    对策

    要防止配置数据的泄漏:

    •使用 Windows 身份验证,以便连接字符串中不包含凭据。

    •加密连接字符串,并限制对已加密数据的访问。

    敏感应用程序数据的泄漏

    许多应用程序都存储敏感的数据(如客户的信用卡号),一定要保护此类数据的私密性和完整性。

    漏洞

    下列编码做法可能会导致泄漏敏感的应用程序数据:

    •存储没有加密的数据

    •弱授权

    •弱加密

    对策

    要防止泄漏敏感的应用程序数据:

    •使用强加密机制来确保数据的安全。

    •在执行数据访问之前先为每个调用方授权,以便用户只能看到其各自的数据。

    数据库架构和连接详细信息的泄露

    如果您的代码向客户端返回异常详细信息,恶意用户可能会使用这些信息来攻击服务器。数据访问代码中的异常可能会透露敏感信息,如数据库架构详细信息、数据存储的特性以及 SQL 代码片断。

    漏洞

    下列漏洞可能会导致信息泄漏:

    •不充分的异常处理

    •薄弱的 ASP.NET 配置(允许未经处理的异常详细信息返回到客户端)

    对策

    要防止这种泄漏:

    •捕获、记录和处理数据访问代码中的数据访问异常。

    •向调用方返回一般的错误消息。这要求对 Web.config 或 Machine.config 配置文件中的 <customErrors> 元素进行适当的配置。

    未授权的访问

    在授权不足的情况下,用户也许能够看到另一个用户的数据,并且能够访问其他受限制的数据。

    漏洞

    下列做法可能会允许未授权的访问:

    •数据访问代码中缺乏授权,从而提供了不受限制的访问

    •数据库帐户的特权过高

    对策

    要防止未授权的访问:

    •按照主体权限需求为调用用户授权。

    •按照代码访问安全权限需求为调用代码授权。

    •使用受限制的权限来限制应用程序登录到数据库,并防止直接访问表格。

    网络窃听

    大多数应用程序的部署体系结构中都包括数据访问代码与数据库服务器之间的物理隔离。因此,必须防止窃听者通过网络窃听敏感数据(如应用程序特定的数据或数据库登录凭据)。

    漏洞

    下列做法会增加网络窃听的漏洞:

    •在 SQL 身份验证过程中通过网络传递的明文凭据

    •进出数据库服务器的未加密敏感应用程序数据

    对策

    要限制网络窃听的漏洞:

    •使用 Windows 身份验证来避免通过网络发送凭据。

    •在数据库服务器上安装一个服务器证书。这会导致自动加密网络上的 SQL 凭据。

    •在 Web 服务器和数据库服务器之间使用 SSL 连接来保护敏感的应用程序数据。这需要一个数据库服务器证书。

    •在 Web 和数据库服务器之间使用 IPSec 加密通道。

  • 相关阅读:
    MySQL日志15连问
    Call to undefined function cli_set_process_title,cli_set_process_title 信息/选项函数
    swoole 笔记
    linux 查找目录下的所有文件中是否包含某个字符串
    请说下redis命令的时间复杂度??(实际问的是redis底层结构)
    Elasticsearch:Fatal error: Uncaught Error: Class PsrLogNullLogger
    ElasticSearch近实时搜索的实现
    离职后心生不满,西安某医院运维“炫技性报复”破坏诊疗系统,被依法刑拘...
    报错: libmysqlclient.so.20: cannot open shared object file: No such file or directory(亲测可用)
    中国程序员有美国梦吗?
  • 原文地址:https://www.cnblogs.com/lanchong/p/1791375.html
Copyright © 2020-2023  润新知