0

非常に基本的な概念が欠けているように感じます。説明や参考資料を使用できます。

私の Web サイトでは、テキストを入力ボックスに入力し、それをデータベースに送信して保存するユーザーがいます。以下のコード ブロックの関数を使用して、そのテキストをデータベースに挿入します。 where $conn->exec(query)is from Pg.pm .

$conn->exec("select someFunc($mykey,'text to insert');");

現在、これは機能しますが、SQL インジェクションに対して脆弱であるか、ユーザーがコンマを入力した場合でも壊れます。

DBD::Pgについて読みましたが、prepareこれに相当するものは見つかりませんでしたPg.pm。私はそれを逃しましたか?

Pg.pmをサポートしていない場合prepareprepareこのステートメントをサポートする perl モジュールを使用する必要がありますか? または、ユーザー入力フィールドを挿入/更新している SQL 関数を使用して、bobby -tablesで概説されているアプローチに従うこともできます。quote_ident()quote_literal

ユーザー入力を安全に処理するにはどうすればよいですか?

4

1 に答える 1

1

とを使用することはできません。これらはSQLレベルであり、で呼び出される動的SQLに適用されるためです。関数がそれらの引数で実行される前にSQL文字列の解析(およびSQLインジェクション攻撃のリスク)が発生するため、関数に引数を渡す場合は何の役にも立ちません。quote_identquote_literalEXECUTE

プリペアドステートメントのサポートか、PostgreSQLのリテラル引用ルールを理解する強力で安全なリテラルエスケープ関数が本当に必要です。データベースドライバがどちらも提供しない場合、それは容認できないほど安全ではないため、提供するものを優先して破棄する必要があります。

于 2013-01-04T00:41:59.770 に答える