如何清理用户提交的mysql查询

时间:2013-05-07 03:27:45

标签: php mysql sql sanitize

我之前从未问过一个问题因为我总是在这里或在nixcraft中找到我需要的东西。

我希望就应用程序提供一些指导,该应用程序仅由我组织内的技术人员使用。他们需要能够查询数据库,但由于信息的敏感性,我们不希望他们能够导出数据转储。我确信还有其他风险需要注意,但我真的不确定这些风险可能是什么。我能想到的唯一消毒方法是检查sql语法问题,并防止任何会产生数据转储的语句。

该脚本将使用PHP编写,不需要任何外部库。数据库权限将限制为SELECT,因此不会更新,插入,删除等...我们将无法利用PDO预处理语句,因为我们的用户将从头到尾输入整个SQL查询。

非常感谢您的任何想法。

2 个答案:

答案 0 :(得分:0)

您可以将查询将用作用户提供的数据的字段限制为首先通过mysqli_real_escape_string运行。

这假设您只显示一个表单,其中包含您希望他们搜索的字段,而不是允许他们输入完整查询的字段。

HTH

答案 1 :(得分:0)

如果您允许用户仅向SELECT输入整个查询,请不要。这将是一场安全噩梦。

相反,使用PDO准备并允许用户进行高级搜索;否则需要人工智能的消毒程度,如果你这样做,你就不会问这个问题。

相反,问问自己记录搜索需要什么逻辑。你需要搜索多个字段吗?如果需要连接,则可以在获取记录时隐式(并自动)将表连接在一起 您还可以在表单 中使用LIMIT,分页和各种事物的参数


基本点是这样的: 如果用户可以编写SQL查询,您可以只是让他们登录到您的SQL控制台并忽略所有清理 。当用户编写自己的查询时清理输入会相当奇怪,并且可能导致查询甚至无法运行。