我正在尝试在MySQL中编写一个函数,该函数获取用户名的密码作为参数,同时避免SQL注入。如何使用存储函数安全地检索sql数据
这里是我的代码:
CREATE FUNCTION get_password_for_user (p_username varchar(30))
returns varchar(32)
BEGIN
declare passwd varchar(32) default "";
PREPARE stmt FROM 'select password into @passwd from users where name=?';
SET @name = p_username;
EXECUTE stmt USING @name;
DEALLOCATE PREPARE stmt;
return passwd;
END $$
当我尝试创建它,它提供了动态SQL错误:
Error Code: 1336. Dynamic SQL is not allowed in stored function or trigger
我发现在网络上涉及CONCAT解决方案,但会意味着很容易受到SQL注入的攻击,我显然不希望这样做。
我能做些什么吗?或者有没有其他适当的方法来处理这种情况?
使用处理注入的框架(即调用函数)。不要使用动态sql来处理它。 –