PHP 和 PostgreSQL:避免跨站点脚本和 SQL 注入攻击

PHP and PostgreSQL: Avoiding cross-site scripting and SQL injection attacks

当通过 PHP 将数据插入 PostgreSQL 数据库时,我应该将数据嵌入到函数 pg_query 中的 sql INSERT 语句中,还是通过数据通过数组进入pg_insert函数?

我的猜测是 pg_insert,因为它只是将数据直接插入 table 而不是查询 table 然后插入它。

请访问http://php.net/manual/en/book.pgsql.php以参考这两个功能。

为了避免 SQL 注入,您希望调用接受 SQL 参数作为方法参数的方法。这样,您的 SQL 库 可以确保参数被正确转义。切勿通过 "appending" 字符串片段构建自己的 SQL 语句。如果这样做,您有责任对参数进行 SQL 转义。这很难做对。

因此,您应该更喜欢 pg_query_params(或 pg_insert)而不是 pg_query

这是错误的(因为 必须记住转义 $arg1 参数。这很难。):

pg_query("INSERT INTO TABLE ... VALUES " . $arg1 . ";");

正确(因为 PostgresQL 的聪明人知道如何转义您的参数):

pg_query_params("INSERT INTO TABLE ... VALUES ", "FooBar");