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

时间:2016-09-27 18:07:34

标签: php sql postgresql insert sql-injection

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

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

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

1 个答案:

答案 0 :(得分:2)

为避免SQL注入,您希望将接受SQL参数的方法作为方法参数调用。这样,您的 SQL库可以确保正确转义参数。永远不要通过"追加"来构建自己的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 $1", "FooBar");