gpt4 book ai didi

c# - 防止非执行 SQL 中的 SQL 注入(inject)

转载 作者:行者123 更新时间:2023-11-30 22:29:38 25 4
gpt4 key购买 nike

我正在调用一个 Web 服务并向它传递一串动态生成的 SQL。此字符串包含用户输入。它目前是使用简单的字符串连接构建的,因此容易受到 SQL 注入(inject)攻击。我不能使用普通的参数化 SQL 解决方案,因为我没有从我的应用程序中执行命令。

我的第一次尝试是构建一个参数化的 SqlCommand 对象。但是,似乎没有任何方法可以提取最终的 SQL 语句。我的第二次尝试是使用 sp_executesql ,但这似乎与我的原始代码存在相同的问题:将 SQL 命令与用户输入连接在一起。

那么,如何在不求助于编写自己的输入清理逻辑的情况下生成 SQL(即 .Replace("'", "''") ?是否有内置类或好的第三方库可用?

最佳答案

正如我所理解的问题......如何在不诉诸编写我自己的输入清理逻辑的情况下生成 SQL。有几种 sql 注入(inject)缓解技术可以考虑使用。
其中一些是基于后端的安全性,另一些是由数据库引擎强制执行的业务和应用程序开发规则。

后端安全:始终应用“最低权限”规则:设置低权限的数据库帐户
用于访问 DBMS 的应用程序。
服务器端卫生:在服务器端。验证用户提供的数据——以及从潜在不安全来源获得的任何数据客户端输入验证可以
有用

客户端:不要向用户返回 SQL 错误消息,因为它们包含对以下方面有用的信息
攻击者,例如有关目标表甚至其内容的查询或详细信息。
在 Java 中使用异常处理可以很容易地防止这种情况。

客户端:将可能包含有问题字符的文本输入字段编码为
使用双向函数的字母数字版本,例如 Base64。

客户端:积极编写代码以防止 SQL 注入(inject)。通过两步过程过滤所有输入数据。首先,对用户应用白名单过滤
输入集合(例如,Web 表单):仅允许字段相关的字符、字符串格式
和数据类型;限制字符串长度。然后,黑名单过滤或转义应该是
在生成 SQL 查询之前应用于数据访问层:转义 SQL 元字符
和关键字/运算符。

客户端或中间层。:使用严格的白名单过滤验证动态生成的数据库对象名称(例如表名称)。

客户端避免使用引号/分隔标识符,因为它们会使所有白名单显着复杂化,
黑名单和逃避努力。

开发:强制执行流程,让开发人员拥有一个安全的 API,以确保安全并避免 SQL 注入(inject)。这样做而不是依靠开发人员来实现复杂的防御性编码技术。

API:开发在编译时分析数据库模式的 API 或中间层
并为一组自定义的 SQL 查询构造类编写代码(然后
集成到 IDE 中并由开发人员直接调用以构建 SQL 查询)。
结果是一个基于通用模板的树状结构,映射
根据表和列定义的 SQL 查询的可能变化。
有 3 种主要类型的类:SQL 语句、表列和 where
状况。这些类具有映射数据类型的强类型方法
数据库架构。攻击面减少。建议的 API 不会执行您在问题中指定的查询,它只会生成 SQL。在提交输入值时,提议的 API 将根据其映射检查数据类型。其次,查询将由
DBMS 特定驱动程序使用 JDBC 的 PreparedStatement 接口(interface)与绑定(bind)
变量。任一步骤中的任何错误都会阻止查询的执行。

开发人员使用的提议 API 设计将解决服务器端验证、SQL 错误拦截问题。直接强制执行强类型,而不需要文本输入编码和两步输入验证,因为动态输入是通过单独的 protected 数据注入(inject)的
channel (绑定(bind)变量)通过 PreparedStatement 接口(interface)。对象名称不是由用户输入的,而是定期验证的。但是,仍应向建议的 API 提供低权限的数据库帐户。

在提议的 API 中,不需要识别数据输入入口点,因为在数据库交互之前就应用了保护。完全支持分段查询;他们的
由于每个查询修改都由 API 验证,因此确保了安全性。白色过滤
和黑名单是不必要的,因为动态输入是使用绑定(bind)变量指定的。

在提议的 API 中,列长度(例如 varchar 字段)可以存储在 DB 类中(如
名称和数据类型)允许解决方案执行边界验证
输入数据,从而提高其保护级别和整体准确性。

类似 API 设计的基于 Java 的原型(prototype)正在进行中,目前正在研究中。

关于c# - 防止非执行 SQL 中的 SQL 注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10114424/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com