我可以使用这样的功能
CREATE FUNCTION create_user(_firstName text)
RETURNS void AS $$
INSERT INTO user_account (first_name) VALUES (_firstName);
$$ LANGUAGE sql;
在服务器上防止SQL注入攻击?然后我可以在客户端上运行它,
client.query(`SELECT create_user(${someUserInput})...`
或者我仍然需要使用parameterized queries with placeholders,
client.query(`SELECT create_user($1)`, [someUserInput])
答案 0 :(得分:3)
client.query(`select create_user(${someUserInput})`
如果
,会发生什么问题let someUserInput = `'foo'); DROP DATABASE bar;`;
这将被发送到您的电话,
client.query("select create_user('foo'); DROP DATABASE bar;")`
而且那会很糟糕。是的,create_user
的参数可以防止注入,但是对它的调用不是。
确保someUserInput
被正确引用
PQescapeLiteral
quote_literal
引用它(无论如何都需要占位符)。 SELECT quote_literal($1);
我不会尝试自己创建引用机制。