我正在嘗試在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來處理它。 –