何をやろうがSQLインジェクションにプルーン、例えば次のとおりです。
t=# CREATE OR REPLACE FUNCTION increment(key character varying)
RETURNS character varying AS $$
BEGIN
return format('SELECT code, name from tbl where %s',$1);
END;
$$ LANGUAGE plpgsql;
CREATE FUNCTION
Time: 1.179 ms
t=# select * from increment('code = ''ati'' ');
increment
------------------------------------------------
SELECT code, name from tbl where code = 'ati'
(1 row)
いますが、文が返されるかを制御していない、ここを見て:
t=# select * from increment('true; drop table b;');
increment
------------------------------------------------------
SELECT code, name from tbl where true; drop table b;
(1 row)
'$ 1'は' $ 1'を意味しています - そしてvarcharを定義しています... '' SELECT code、tbl where name = $ 1; ''を意味するかもしれませんか?.. –
where句'where column = $ 1'のようなものでなければなりません。 – JustMe
私は知っています。 functionのパラメータは 'name = ...'です – NiemNV