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

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

Susan Sarandon
Susan Sarandonオリジナル
2024-10-31 21:26:29235ブラウズ

 How to Safely Construct Text SQL Queries in Go?

Go でテキスト SQL クエリを構築する正しい方法

Go でテキスト SQL クエリを作成する場合、文字列部分と値を連結するときに問題が発生する可能性があります。文字列内で %d および %s プレースホルダーを使用するなどの従来の方法では、構文エラーや型の不一致が発生する可能性があります。

Python スタイルの連結

Python では、三重引用符で囲まれた文字列内で % 演算子を使用して、文字列と値を連結できます。ただし、このアプローチは Go ではサポートされていません。

Go と同等

Go で同様の連結を実現するには、fmt.Sprintf 関数を使用できます。最初の引数として文字列形式を受け取り、プレースホルダーとして追加の引数を受け取ります。

<code class="go">query := fmt.Sprintf(`SELECT columnA FROM tableA WHERE columnB = %d AND columnC = %s`,
                     someNumber, someString)</code>

インジェクション脆弱性の防止

値をクエリに連結する際、次のことを避けることが重要です。インジェクションの脆弱性。文字列内でプレースホルダーを使用する代わりに、準備されたステートメントを使用することを検討してください。

<code class="go">query := `SELECT columnA FROM tableA WHERE columnB = ? AND columnC = ?`

rows, err := db.Query(query, val1, val2)</code>

ここで、?プレースホルダーは値を表し、val1 と val2 は引数として db.Query に渡されます。この方法によりクエリの安全性が確保され、悪意のある入力がデータベースに影響を与えるのを防ぎます。

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

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