小编use*_*081的帖子

如何安全地填充 pg_notify 有效负载?

数据通过准备好的语句和存储过程进入我的应用程序,所以我不太担心注入。当新用户注册时,我想发送一封激活电子邮件。目前我正在使用触发器和通知来执行此操作。它看起来像这样:

CREATE FUNCTION on_sign_up() RETURNS trigger as $$
  DECLARE
  BEGIN
    PERFORM pg_notify('sign_ups', NEW.user_id || ',' || NEW.email || ',' || NEW.activation_code);
    RETURN new;
  END;
$$ language plpgsql;

CREATE TRIGGER on_sign_up_trigger AFTER INSERT ON user_account
  FOR EACH ROW EXECUTE PROCEDURE on_sign_up();
Run Code Online (Sandbox Code Playgroud)

我的问题是通知有效负载。如果电子邮件包含逗号,那么我不能只在 ',' 上拆分字符串。我如何转义任何东西并将其放入有效载荷中?我可以添加我自己的自定义 CSV 转义函数并调用它,但是每当我认为这样的事情是正确的答案时,我通常会遗漏一些东西。

它不一定需要是 CSV,我只是认为这是最简单的。

注意:还有其他解决方案 - 例如去除“前缀”和“后缀”,然后将其余部分视为电子邮件。我对 PostgreSQL 本身内部的这种一般的清理/转义类更感兴趣。

我试图提取的表格如下:

                  Table "user_account"
     Column      |  Type   |         Modifiers          
-----------------+---------+----------------------------
 user_id         | integer | not null
 email           | citext  | not null
 password_hash   | text    | not null …
Run Code Online (Sandbox Code Playgroud)

postgresql json csv

3
推荐指数
1
解决办法
3422
查看次数

标签 统计

csv ×1

json ×1

postgresql ×1