0

我以前从未问过问题,因为我倾向于总是在这里或在 nixcraft 中找到我需要的东西。

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

该脚本将用 PHP 编写,没有任何类型的外部库。数据库权限将被限制为 SELECT,因此不会有更新、插入、删除等...我们将无法利用 PDO 准备语句,因为我们的用户将从头到尾输入整个 SQL 查询。

您可能有的任何想法将不胜感激。

4

2 回答 2

0

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

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

高温高压

于 2013-05-07T03:53:45.493 回答
0

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

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

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


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

于 2013-05-07T04:48:42.410 回答