Postgres 对 SQL 注入的保护

信息安全 sql注入 PostgreSQL
2021-09-01 16:26:34

Postgres 允许动态代码执行,这可能使其容易受到 SQL 注入的攻击。

它对此有什么保护措施?

2个回答

与使用 SQL 的任何其他数据库相同,使用以下内容(取自OWASP 备忘单)

  • 选项 #1:使用准备好的语句(参数化查询)
  • 选项 #2:使用存储过程
  • 选项#3:转义所有用户提供的输入
  • 同时执行:最小特权
  • 同时执行:白名单输入验证

SQL 注入是一种应用程序威胁,而不是数据库威胁。最后,所有关系数据库都执行作为字符串传递给它们的 SQL。应用程序开发人员有责任确保 SQL 字符串无害。

SQL 注入是一种导致应用程序将有害的 SQL 字符串发送到数据库的方法,并且这样做的方式在应用程序开发人员的第一个视图中可能并不明显。例如。如果应用程序包含类似的代码

string sql_stmt = "select a from t where k = '" + textfield.text + "'"

textfield.text用户在应用程序中输入的一些文本在哪里,然后您发送sql到数据库,然后聪明的用户可以输入

';drop table t; --

进入文本字段,这将导致字符串

select a from t where k = '';drop table t; --'

被发送到数据库,并且表t将被删除。

但这是应用程序开发人员的错,而不是数据库。数据库只执行发送给它的任何 sql。最后它必须有可能删除表。

正如@RoryAlsop 在他的回答中已经说过的那样,Postgres - 像许多其他数据库一样 - 为应用程序开发人员提供了一些支持,以简化开发安全代码(权限、准备好的语句等),但最终应用程序开发人员有责任使用这些或其他方法来保护应用程序免受 SQL 注入的影响,因为这是可能发生的地方。数据库不是威胁的级别,它们只是故障影响发生的地方。