【问题标题】:user-input handling postgresql用户输入处理 postgresql
【发布时间】:2013-01-04 00:30:22
【问题描述】:

我觉得我错过了一个非常基本的概念。我可以使用一些说明或参考材料。

在我的网站上,我有一个用户在输入框中输入文本并将其提交到要存储的数据库。我使用下面代码块中的函数将该文本插入数据库,其中$conn->exec(query) 来自Pg.pm

$conn->exec("select someFunc($mykey,'text to insert');");

现在,这可行,但容易受到 sql 注入的影响,或者即使用户输入逗号,它也会中断。

我读到了DBD::Pg,它有 prepare 声明,这似乎是我想要的,但我找不到 Pg.pm 的等价物。我错过了吗?

如果Pg.pm 不支持prepare。我应该使用支持prepare 语句的perl 模块吗?或者我可以按照bobby-tables 中概述的方法使用quote_ident()quote_literal 在我的SQL 函数中插入/更新用户输入字段。

我应该如何以安全的方式处理用户输入?

【问题讨论】:

  • 不要使用Pg.pm。它已经过时和过时了。
  • @PeterEisentraut,这就是我的想法(最新版本 2000-04-04),但我不确定。谢谢你告诉我。

标签: postgresql perl-module


【解决方案1】:

不能只使用quote_identquote_literal,因为它们处于SQL 级别,适用于使用EXECUTE 调用的动态SQL。将参数传递给函数对您没有任何好处,因为 SQL 字符串解析(以及 SQL 注入攻击风险)甚至在使用这些参数执行函数之前就发生了。

真的需要准备好的语句支持或理解 PostgreSQL 文字引用规则的强大、安全的文字转义函数。如果您的数据库驱动程序两者都没有提供,那么它是不安全的,并且应该被丢弃,以支持提供的。

【讨论】:

  • 您知道对Pg.pm 的任何此类支持吗?另外,谢谢你的回答!
  • 我很少使用 Perl,也从未使用过Pg.pm,所以没有。其他人可能是。为什么要使用它而不是 DBIDBD::Pg 反正?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-02-19
  • 1970-01-01
  • 2021-12-27
  • 1970-01-01
  • 2011-08-10
  • 2015-07-25
  • 2012-11-09
相关资源
最近更新 更多