2016-09-27 9 views
1

PHPを使用してPostgreSQLデータベースにデータを挿入する場合は、pg_query内のsql INSERTステートメントにデータを埋め込む必要がありますか、データを渡すのがより安全です配列を介してpg_insert関数に?PHPとPostgreSQL:クロスサイトスクリプティングとSQLインジェクション攻撃の回避

テーブルを照会して挿入するのではなく、テーブルに直接データを挿入するだけなので、私の推測ではpg_insertとなります。

これらの2つの機能については、http://php.net/manual/en/book.pgsql.phpを参照してください。

+0

XSSとSQLインジェクションは、おそらく関係のない2つの問題です。 – kixorz

答えて

2

SQLインジェクションを避けるために、SQLパラメータをメソッドパラメータとして受け入れるメソッドを呼び出す必要があります。そうすれば、SQLライブラリは、パラメータが適切にエスケープされていることを確認できます。文字列フラグメントを「追加」することで、独自のSQLステートメントを構築しないでください。そうした場合、SQLのエスケープはパラメータのエスケープになります。これは正しいことが難しいです。

したがって、pg_queryよりもpg_query_params(またはpg_insert)を優先する必要があります。

これは間違っている(あなたは$ arg1のパラメータをエスケープするために覚えておく必要があるので、難しいですどの。。):

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

右(PostgreSQLのでスマートな連中はあなたのパラメータを脱出する方法を知っているので) :

pg_query_params("INSERT INTO TABLE ... VALUES $1", "FooBar"); 
+0

あなたのクエリ 'SELECT ... WHERE a_field = $ 1 :: int4'に直接パラメータをキャストすることもできます。 – greg

関連する問題