理解PostgreSQL&;plpgsql对代码注入的防御

理解PostgreSQL&;plpgsql对代码注入的防御,sql,postgresql,sql-injection,plpgsql,Sql,Postgresql,Sql Injection,Plpgsql,上面有一句话 CREATE OR REPLACE FUNCTION user_access (p_uname TEXT) RETURNS timestamp LANGUAGE sql AS $func$ SELECT accessed_at FROM users WHERE username = $1 $func$; …作为如何避免SQL注入的解释。我试图理解为什么我会这样安全。PostgreSQL为我做了什么,保证了我的安全?有人能给我指一下正确的方向吗?为什么安全? Postg

上面有一句话

CREATE OR REPLACE FUNCTION user_access (p_uname TEXT)
  RETURNS timestamp LANGUAGE sql AS
$func$
    SELECT accessed_at FROM users WHERE username = $1
$func$;
…作为如何避免SQL注入的解释。我试图理解为什么我会这样安全。PostgreSQL为我做了什么,保证了我的安全?有人能给我指一下正确的方向吗?

为什么安全? PostgreSQL(以及任何其他DBMS)将首先编译语句,并使用
$1
,然后才使用用户提供的实际值。因此,值中的任何内容都不能解释为语句的一部分。换句话说,使用参数将代码与数据分开

为什么我需要这方面的程序?
在大多数情况下,你不会。您真正需要的是一种将代码与数据分离的机制,即参数。现在,在大多数语言和数据库连接库中都提供了参数化查询支持,允许您使用占位符(如
)编写查询,并通过单独的参数提供数据。

谢谢。这很有帮助。