当前位置: 首页 > 面试题库 >

如何防止对用户生成的SQL查询进行Sql注入

堵龙野
2023-03-14
问题内容

我有一个项目(私有,ASP.net网站,使用https保护的密码),其中一项要求是用户能够输入将直接查询数据库的Sql查询。我需要能够允许这些查询,同时防止它们对数据库本身造成损害,以及防止访问或更新它们不应该访问/更新的数据。

我提出了以下实施规则:

  1. 使用 具有“选择表/视图”和“更新表”权限的db用户(因此,其他任何命令(例如drop / alter / truncate / insert / delete都将不会运行))。
  2. 验证语句是否以单词“选择”或“更新”开头
  3. 验证(使用Regex)语句中没有分号的实例,该实例没有被单引号,空格和字母包围。(这里的想法是,它们可以包括第二个查询的唯一方法是用不属于输入字符串的分号结束第一个查询)。
  4. 验证(使用Regex)用户是否有权访问正在查询/更新的表,包括在联接等中。这包括所有子查询。(完成此操作的部分方法是,用户将使用数据库中实际上不存在的一组表名,查询解析的一部分将是在查询中替换正确的对应表名) 。

我有什么想念的吗?

目的是使用户能够以他们认为合适的任何方式查询/更新他们有权访问的表,并防止任何意外或恶意的尝试来破坏数据库。(并且由于要求用户生成sql,所以我无法使用我所知道的任何内置工具来对查询进行参数化或清理)。


问题答案:

好吧,您已经有足够多的人告诉您 “不要这样做” ,因此,如果他们不能说服您,则有一些建议:

包括好,不要试图排除坏
(我认为正确的术语是 白名单黑名单 ),那是指 不要寻找邪恶或无效的东西扔掉 (有太多的写法了)或伪装),而是寻找
有效的东西来包含 和抛弃其他所有内容。

您已经在另一条评论中提到,您正在寻找一个用户友好的表名列表,并替换实际的模式表名。这就是我在说的-如果您要执行此操作,那么也要使用字段名称。

不过,我仍然倾向于某种图形用户界面:选择要在此处查看的表,选择要在此处查看的字段,使用一些下拉列表来构建where子句等。



 类似资料:
  • 问题内容: 这个问题的答案是 社区的努力。编辑现有答案以改善此职位。它目前不接受新的答案或互动。 如果将用户输入未经修改地插入到SQL查询中,则应用程序容易受到SQL注入的攻击,如以下示例所示: 这是因为用户可以输入类似的内容,并且查询变为: 如何防止这种情况的发生? 问题答案: 使用准备好的语句和参数化查询。 这些是独立于任何参数发送到数据库服务器并由数据库服务器解析的SQL语句。这样,攻击者就

  • 问题内容: 我当前使用c语言处理http事件,并且我需要使用mysql进行SQL操作,然后如何防止SQL注入,有没有c库供您使用,谢谢? 问题答案: 防止SQL注入(或外壳转义注入等)的方法没有将未加引号的文字字符串传递到将某些字符视为特殊字符的接口。您需要先将字符串数据转换为安全的带引号的形式,然后再将其包含在较大的“命令字符串”中,该字符串将由SQL数据库,shell,外部命令,采用URI字符

  • 问题内容: 我目前正在使用以下查询来使用php获取mysql中的值: 该代码正在运行,但是现在我担心sql注入。 如何防止SQL注入? 这样安全吗? 问题答案: 来自WordPress Codex,关于保护查询免受SQL注入攻击 : 如果进一步向下滚动,则有一些示例。 您还应该阅读数据库验证文档 ,以更全面地了解WordPress中的SQL转义。

  • 问题内容: 如果将用户输入未经修改地插入到SQL查询中,则应用程序容易受到SQL注入的攻击,如以下示例所示: 这是因为用户可以输入类似的内容value’); DROP TABLE table;–,并且查询变为: 可以采取什么措施来防止这种情况的发生? 问题答案: Use prepared statements and parameterized queries. These are SQL sta

  • 问题内容: 是否有可能以与PHP具有防止它们攻击的Prepared语句相同的方式来防止在Node.js(最好是使用模块)中进行SQL注入。 如果是这样,怎么办?如果没有, 那么有哪些示例 可以绕过我提供的代码(请参见下文)。 一些上下文: 我正在使用node-mysql模块制作一个包含Node.js+MySql的后端堆栈的Web应用程序。从可用性的角度来看,该模块很棒,但是它还没有实现类似于PHP

  • 注意:但凡是sql注入漏洞的程序,都是因为程序要接受来自客户端用户输入的变量或URL传递的参数,并且这个变量或参数是组成sql语句的一部分,对于用户输入的内容或传递的参数,我们应该要时刻保持警惕,这是安全领域里的【外部数据不可信任】的原则,纵观web安全领域的各种攻击方式,大多数都是因为开发者违反了这个原则而导致的,所以自然能想到,就是变量的检测、过滤、验证下手,确保变量是开发者所预想的。 1、检