SQLインジェクションを避けながら、パラメータとして与えられたユーザー名のパスワードを取得する関数をMySQLで作成しようとしています。ここで安全にストアド関数を使用して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エラーを与える:私はウェブ上でCONCATを含むソリューションを見つけた
Error Code: 1336. Dynamic SQL is not allowed in stored function or trigger
が、それは希望SQLインジェクションに脆弱であることを意味し、私は明らかにそれを望んでいません。
私はこれについて何かできることはありますか?あるいは、このような状況に対処するための他の適切な方法がありますか?
注射を処理するフレームワーク(関数を呼び出す)を使用します。それを処理するために動的SQLを使用しないでください。 –