我在数据库中有一个存储过程,它接受直接插入到查询中的字符串参数。我有客户端代码来逃避输入,但是这并不会阻止任何有权以错误参数执行该过程并注入SQL的人。服务器端的转义字符串
当前实现是这样的:
CREATE PROCEDURE grantPermissionSuffix (perm VARCHAR(30), target VARCHAR(30), id VARCHAR(8), host VARCHAR(45), suffix VARCHAR(45))
BEGIN
SET @setPermissionCmd = CONCAT('GRANT ', perm, ' ON ', target, ' TO ''', id, '''@''', host, ''' ', suffix, ';');
PREPARE setPermissionStmt FROM @setPermissionCmd;
EXECUTE setPermissionStmt;
DEALLOCATE PREPARE setPermissionStmt;
FLUSH PRIVILEGES;
END
显然,这是一个灾难。我怎样才能防止注射机会?是否有标准的SQL函数来转义输入?有没有一个用于MySQL?有没有额外的客户端代码获得相同结果的另一种方法?
我的担心是唯一的解决方案将是客户端准备好的语句,目前这不是一个选项。我需要在服务器上处理所有的逻辑,要求客户端只调用这个过程(我不想授予用户直接修改表/权限的权限,只能用允许执行的过程来处理它)。
为您的用户提供mySQL客户端和相应的权限。 –