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

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

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-26 15:48:02446ブラウズ

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。