Postgresql

對 Postgresql 監聽“localhost”請求的攻擊

  • June 26, 2012

我將 jboss 伺服器用於我的 servlet,將 postgresql 作為數據庫伺服器,監聽 localhost 上的埠 5432。我的 jboss 伺服器綁定到一個公共 IP。我想知道,由於我的 postgesql 只綁定到本地主機,是否有任何攻擊的機會。
任何人都可以看到所有的表數據,即使他們有數據庫的使用者名和密碼?

根據 Erwins 的回答保護 PostgreSQL 是一個好的開始。但是,還有其他方法可以攻擊和訪問數據。即使您以攻擊者的身份追求數據,也不會假設可以從 Internet 直接訪問數據庫。

但是由於應用程序伺服器(在本例中為 JBoss)及其配置或應用程式碼(sql 注入)中的缺陷,可能會間接訪問數據。

大約一年前,JBoss 有一個嚴重的安全漏洞,它允許您獲得 root 訪問權限 - 因此可以完全訪問 localhost 上的任何 PostgreSQL 伺服器。 http://www.darknet.org.uk/2011/02/jboss-autopwn-jsp-hacking-tool-for-jboss-as-server/

更新:

是的,Ashwin,使用準備好的語句或儲存過程/函式是降低 sql 注入攻擊風險的好方法。OWASP 有一個防止 SQL 注入的檢查表。 https://www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet#Defense_Option_1:_Prepared_Statements_.28Parameterized_Queries.29

儲存過程/函式的優點之一是權限的精細控制。例如,您可以授予應用程序使用者訪問權限,使其只能執行特定的過程/功能,而拒絕訪問基礎表和其他對象。相反,過程/函式由過程/函式所有者的權限執行(使用者也具有限制性權限,只能對特定表進行操作)。可以使用 SECURITY DEFINER 控制此設置,如本範例函式中所示。

CREATE OR REPLACE FUNCTION myschema.myfunction() RETURNS void AS 
$BODY$
BEGIN
   INSERT INTO myschema.mytable(msg) VALUES('value goes here');
END;
$BODY$  
LANGUAGE 'plpgsql' VOLATILE SECURITY DEFINER;
ALTER FUNCTION myschema.myfunction() OWNER TO myinsertupdateuser;    
GRANT EXECUTE ON FUNCTION myschema.myfunction() TO myappuser;

這個函式可以由 myappuser 執行,但是 myappuser 不能直接訪問 myschema.mytable。換句話說,myappuser 只能執行您在函式中指定的程式碼。該函式以 myinsertupdateuser 身份執行,假定它對 myschema.mytable 表具有插入權限。

引用自:https://dba.stackexchange.com/questions/19806