<分区>
假设我执行以下操作:
- 我创建了一个 MySQL 数据库,并用一些数据填充它。
- 我创建了一个 MySQL 用户,该用户只能访问该数据库,并且只有 SELECT 权限。
- 我创建了一个网页,用户(任何用户,无需密码)可以通过该网页输入任意 SQL,并且在提交表单时,脚本会尝试以我创建的 MySQL 用户身份运行 SQL;生成的任何结果集都会显示给用户;生成的任何错误消息都会显示给用户。
- 假设数据库不包含存储过程等,只包含表和 View ,并且我很高兴任何人都能看到该特定数据库的任何内容。
我们假设该设置将被恶意用户探测。可能发生的最坏情况是什么?
一些想法:
- MySQL 提供了各种语句,如 SHOW 等,用户甚至只有 SELECT 权限也可以使用这些语句来收集有关数据库服务器或我的数据库的信息。可以从错误消息中获取其他信息。虽然这些信息可能不足以获得不当访问权限,但肯定会有所帮助。
- 数据库软件、我的脚本或脚本语言本身可能存在缺陷,可能允许访问者通过此界面执行他们不应执行的操作。
- 这样做可能会违反服务条款协议(protocol),尤其是在我使用共享主机的情况下。