2017-01-30 6 views

答えて

2

さえ引用符は他に...あなたの声明の中で

と一致し、それがSQL injectionに対して脆弱です。

はこのような何かを試してみてください:

CREATE OR REPLACE FUNCTION dynamicJsonValue(varchar(64)) RETURNS void AS 
$$UPDATE "table" SET "field" = 'value' 
    WHERE "json_field" 
     @> CAST ('{"key": "' || replace($1, '"', '') || '" }' AS jsonb)$$ 
LANGUAGE sql STRICT; 
+1

'to_jsonを()' [B] '手動' JSONを構成する際に、文字列リテラルを逃れることが完全に安全である(と、それを9.3+から入手できます)。 'to_jsonb()'と 'json_build_object()'は 'jsonb'が導入されたところで利用可能です(9.4+)。 – pozs

2

はそれを考え出した:

CREATE OR REPLACE FUNCTION dynamicJsonValue(varchar(64)) RETURNS VOID AS 
'UPDATE "table" SET "field" = ''value'' 
WHERE "json_field" @> jsonb_build_object(''field'', $1);' 
LANGUAGE SQL VOLATILE; 
関連する問題