Security
exec(text) 是做什麼的?
我剛剛在兩個 RDS PostgreSQL 9.3 DB 中找到了以下函式:
-- -- Name: exec(text); Type: FUNCTION; Schema: public; Owner: adam -- CREATE FUNCTION exec(text) RETURNS text LANGUAGE plpgsql AS $_$ BEGIN EXECUTE $1; RETURN $1; END; $_$; ALTER FUNCTION public.exec(text) OWNER TO adam;
我很確定我沒有寫這個函式,因為
exec
它看起來像一個安全隱患(它只是執行命令嗎?)它想知道它是怎麼回事。搜尋方法簽名對我沒有幫助。**這個函式有什麼作用?
這是某種安全風險嗎?
哪個程序/框架可能創建了它?**
這是一個執行任意 SQL 的完全沒有意義的函式。這不是
SECURITY DEFINER
我認為它可能帶來的唯一風險是,如果您允許使用者執行任意 SQL 謂詞或呼叫任意函式(在這種情況下,您可能已經被填滿)但試圖阻止他們執行他們想要的任何命令。如您所料,它只是使用 PL/PgSQL 的動態 SQL 工具執行 SQL 輸入。
哦,它還會從簡單的
log_statement
分析auto_explain
等中隱藏語句文本,因為它們只查看頂級語句,而不是通過 PL/pgSQL 執行的語句。我個人會刪除/重命名它,看看有什麼抱怨。