【问题标题】:How can I allow SQL Injection safely如何安全地允许 SQL 注入
【发布时间】:2013-10-11 16:05:53
【问题描述】:

所以我想知道是否有可接受的方法来允许 SQL 注入。

例子:

限制表/数据库的权限

你为什么问?

我的雇主想设计一种方法来测试申请人的技能,一个建议是允许通过 SQL 注入提交简历。

有什么想法吗?建议?

【问题讨论】:

  • 我认为你的老板需要把技术工作交给专业人士。
  • 不要误会我的意思,但是人们正在寻找防止 SQL 注入的方法,而您的老板正在寻找方法来实现它!奇怪:)
  • 你工作的公司多么有趣。我猜角色有限的孤立实例应该可以解决问题
  • 这只是一个想法,超出了你需要知道如何执行的规范。
  • 这有帮助吗:- trainsignal.com/blog/videos/… ?

标签: sql sql-injection


【解决方案1】:

您可以使用角色。为用于连接数据库的 Web 应用程序(或其他)创建一个角色。将此角色限制为仅允许 INSERT 并访问必要的表以进行申请。通过应用程序访问您的数据库的申请人只能使用 SQL 注入来添加他们的简历。

SQL 方面更有才华的人可能会以增加角色权限的方式使用注入。但我认为如果该角色只能访问特定表并且没有CREATEGRANT 权限,则用户将无法创建新角色。

以下是一些帮助您入门的角色信息:

Adding Roles to MySQL with MySQL Workbench

Creating Roles in PostgreSQL

GRANT command - 用于在表、数据库等上为用户添加权限。此页面适用于 PostgreSQL,但 MySQL 非常相似(参见this SO answer

【讨论】:

  • 难道申请人不需要SQL注入就可以插入简历吗?
  • 如果您只有一个表格供申请人输入姓名和电子邮件,以便在发布职位时收到提醒。没有直接上传简历的方法,但表格提供了与数据库的联系。然后与漫画类似,您可以在名称字段中输入Matt'); INSERT resume...。我不太清楚你为他们设置了什么或给出了什么说明。
  • 或者,您可以只为申请人提供一个单独的数据库来注入他们的信息。申请人可以绕过最初的有限访问权限,并尽可能多地造成损害,而您的雇主不会丢失他们需要的任何信息。然后有一个脚本将信息保存在别处(这样一个申请人就不会删除其他简历),并将数据库权限重置为他们最初的有限访问权限。
  • 谢谢,我喜欢限制输入字段的方法
【解决方案2】:

鉴于这背后的原因是为了测试人们的能力,请创建一个包含您可以承受丢失的数据的数据库。设置一个表单,发布到 Coldfusion、php、java 或 .net 或连接到该数据库的其他类型的页面。

在表单上,​​放置一个文本区域并提交按钮。在表单目标页面上,记录他们在 textarea 中放置的内容。将日志与数据库进行比较,看看结果如何。

然后随心所欲地测试。

【讨论】:

    猜你喜欢
    • 2010-10-06
    • 2011-04-16
    • 2011-01-21
    • 2023-02-08
    • 2020-06-10
    • 2021-03-16
    • 1970-01-01
    • 2012-10-04
    • 2021-08-03
    相关资源
    最近更新 更多