ホームページ > バックエンド開発 > Golang > Go で SQL クエリを構築するときにテキストと値を安全に連結するにはどうすればよいですか?

Go で SQL クエリを構築するときにテキストと値を安全に連結するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-10-26 15:48:02
オリジナル
557 人が閲覧しました

How can I safely concatenate text and values when constructing SQL queries in Go?

Go SQL クエリでのテキストと値の連結

Go でテキスト SQL クエリを構築する場合、連結時に従うべき特定の構文ルールがあります。文字列と値のコンポーネント、特に整数を使用する場合。

提供された Python コードでは、タプルのアプローチは Go では無効であり、パラメーターを文字列としてキャストしようとすると、型の不一致エラーが発生します。

Go でこれを実現する慣用的な方法は、fmt.Sprintf を使用してクエリ文字列をフォーマットすることです。これにより、実行時に文字列内に値を埋め込むことができます:

<code class="go">query := fmt.Sprintf(`SELECT columnA FROM tableA WHERE columnB = %d AND columnB = %s`,
                     someNumber, someString)</code>
ログイン後にコピー

ここで、プレースホルダー %d と %s はそれぞれ整数値と文字列値を表し、db.Query 呼び出し中に割り当てられます。

<code class="go">rows, err := db.Query(query, val1, val2)</code>
ログイン後にコピー

このアプローチにより、値が正しくフォーマットされ、SQL インジェクションの脆弱性が防止されます。

SQL インジェクションの回避

次の点に注意することが重要です。 SQL クエリ内の文字列連結はインジェクションの脆弱性を引き起こす可能性があります。このリスクを軽減するには、準備されたステートメントとパラメーター化されたクエリを使用します。値をパラメータとして渡すことで、悪意のある入力によって意図した SQL クエリが変更されるのを防ぐことができます。

例:

<code class="go">stmt, err := db.Prepare(`SELECT columnA FROM tableA WHERE columnB = ? AND columnB = ?`)
rows, err := stmt.Query(val1, val2)</code>
ログイン後にコピー

プリペアド ステートメントを使用すると、悪意のある SQL 入力からアプリケーションを保護できます。動的クエリを構築する利便性を維持しながら。

以上がGo で SQL クエリを構築するときにテキストと値を安全に連結するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート