我可以通过在PostgreSQL函数中包装SQL来防止SQL注入攻击吗?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我可以通过在PostgreSQL函数中包装SQL来防止SQL注入攻击吗?相关的知识,希望对你有一定的参考价值。
我可以使用这样的功能吗?
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])
答案
Problem (exploit)
client.query(`select create_user(${someUserInput})`
问题是如果发生了什么
let someUserInput = `'foo'); DROP DATABASE bar;`;
这将被发送到您的电话,因为,
client.query("select create_user('foo'); DROP DATABASE bar;")`
而且,那会很糟糕。是的,create_user
的论点是针对注射的,但是对此的呼吁并非如此。
Solutions
- 使用占位符(显而易见的选择:大多数故障安全和安全解决方案。)
- 确保正确引用
someUserInput
使用客户端库引用类似PQescapeLiteral
的引用 使用第二次运行服务器来引用quote_literal
(无论如何都需要占位符)。SELECT quote_literal($1);
我不会尝试自己创建引用机制。
以上是关于我可以通过在PostgreSQL函数中包装SQL来防止SQL注入攻击吗?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Postgresql 窗口函数的 PARTITION BY 中包含当前行