1

R と psql の橋渡しをしています。SQL インジェクションに対する脆弱性を取り除きたいと考えています。ドキュメントを見て、私はそれを望んでいました:

postgresqlExecStatement(con, statement, params, ...)

次のようなものを使用できます。

postgresqlExecStatement(con, "DELETE FROM foos WHERE id = ? AND baz = ?", c(1, "bar"))

しかし、残念ながらこれはうまくいかないようです。パラメーターに間違った記号を使用している可能性があります (? 以外のもの)。

私が見つけた最善の妥協点は、次の方法で文字列をエスケープすることです。

postgresqlEscapeStrings(con, string)

(注: 関数が適切にエスケープする方法を知ることができるように、接続が必要です)。

クエリをまとめるときに、ペーストで使用するすべての文字列をエスケープする必要があることを意味します。それほどエレガントではありません。しかし、最良の選択肢のようです。他のアイデアはありますか?

4

1 に答える 1

0

使用する

postgresqlExecStatement(con, "DELETE FROM foos WHERE id = $1 AND baz = $2", list(1, "bar"))

c強制的に1つのモードになるため、常にリストとしてバインドされるパラメーターを渡します。conまた、このステートメントが成功した場合は、再度使用する前にに属する結果をクリアする必要があります。

また、新しいパッケージを使用するには、hadley のコメントに注意してくださいRPostgres

于 2014-07-04T01:56:21.897 に答える