在this very useful page上有这样的陈述......
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为我做了什么,这让我安全?有人可以指出我正确的方向吗?
答案 0 :(得分:1)
PostgreSQL(以及任何其他DBMS)将首先使用$1
编译语句,然后才会使用用户提供的实际值。因此,值中的任何内容都不能被解释为语句的一部分。换句话说,使用参数将代码与数据分开。
在大多数情况下,你不会。你真正需要的是一种将代码与数据分开的机制,即参数。现在,在大多数语言和数据库连接库中都存在参数化查询支持,它允许您使用占位符(例如?
)编写查询,并通过单独的参数提供数据。 p>