0

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

在我的网站上,我有一个用户在输入框中输入文本并将其提交到要存储的数据库。我使用下面代码块中的函数将该文本插入数据库,其中$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-tablesquote_ident()中概述的方法使用quote_literal插入/更新用户输入字段的 SQL 函数。

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

4

1 回答 1

1

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

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

于 2013-01-04T00:41:59.770 回答