微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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

(我认为正确的术语是 与 ),那是指 不要寻找邪恶或无效的东西扔掉 (有太多的写法了)或伪装),而是寻找有效的东西来包含 和抛弃其他所有内容

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

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

解决方法

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

我提出了以下实施规则:

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

我有什么想念的吗?

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。