Ash*_*win 2 postgresql security best-practices
我使用 jboss 服务器作为我的 servlets 和 postgresql 作为数据库服务器,监听本地主机上的端口 5432。我的 jboss 服务器绑定到一个公共 IP。我想知道,由于我的 postgesql 只绑定到本地主机,是否有任何攻击的机会。
任何人即使拥有数据库的用户名和密码,也能看到所有的表数据吗?
根据 Erwins 的回答保护 PostgreSQL 是一个好的开始。但是,还有其他方法可以攻击和访问数据。即使您作为攻击者追求数据,也不会假设可以从 Internet 直接访问数据库。
但是由于应用程序服务器(在本例中为 JBoss)及其配置或应用程序代码(sql 注入)中的缺陷,数据可能会被间接访问。
大约一年前,JBoss 有一个严重的安全漏洞,它允许您获得 root 访问权限 - 因此可以完全访问本地主机上的任何 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;
Run Code Online (Sandbox Code Playgroud)
该函数可由myappuser 执行,但myappuser 不能直接访问myschema.mytable。换句话说,myappuser 只能运行您在函数中指定的代码。该函数作为 myinsertupdateuser 运行,假定它对 myschema.mytable 表具有插入权限。
| 归档时间: |
|
| 查看次数: |
575 次 |
| 最近记录: |