了解PostgreSQL& plpgsql防范代码注入

时间:2017-08-07 13:07:12

标签: sql postgresql sql-injection plpgsql

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为我做了什么,这让我安全?有人可以指出我正确的方向吗?

1 个答案:

答案 0 :(得分:1)

为什么安全?

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

为什么我需要一个程序?

在大多数情况下,你不会。你真正需要的是一种将代码与数据分开的机制,即参数。现在,在大多数语言和数据库连接库中都存在参数化查询支持,它允许您使用占位符(例如?)编写查询,并通过单独的参数提供数据。 p>