我在數據庫中有一個存儲過程,它接受直接插入到查詢中的字符串參數。我有客戶端代碼來逃避輸入,但是這並不會阻止任何有權以錯誤參數執行該過程並注入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客戶端和相應的權限。 –