Golang を使用して MySQL を操作する場合、SQL インジェクション攻撃を回避することが重要な問題になります。 SQL ステートメントのセキュリティを確保するには、必要な文字を MySQL に送信する前にエスケープして、これらの文字が SQL ステートメントの一部として解釈されないようにすることで、SQL インジェクション攻撃の発生を防ぎます。
Golang では、MySQL エスケープの処理は、エスケープされた文字列を返す MySQL ドライバーの Escape メソッドを使用して実行できます。
以下では、例を使用して、MySQL エスケープ用の MySQL ドライバーで Escape メソッドを使用する方法を示します。ユーザーが URL を通じてキーワードとして渡した値を検索結果にクエリしたいとします。例:
SELECT * FROM users WHERE name = '[输入的关键字]';
このキーワードは文字列オブジェクトであり、一重引用符が含まれる場合があるとします。二重引用符またはその他の特殊記号これらの特殊記号は、SQL インジェクション攻撃につながる可能性があります。
最初の方法は、これらの特殊記号を手動でフィルタリングし、Golang の文字列ライブラリの Replace メソッドや正規表現の replacer メソッドを使用してエスケープする方法です。手動のフィルタリングが徹底されていない場合、 SQL インジェクションを防止しますが、可能な場合もあります。ユーザーが入力した文字は過剰に処理され、無効な文字やエラーが発生します。
したがって、通常、内部処理には MySQL ドライバーの Escape メソッドを使用します。このメソッドは、すべての特殊文字 (一重引用符、二重引用符、バックスラッシュなど) を安全な文字にエスケープして、クエリ ステートメントのセキュリティを確保します。 。以下は、MySQL ドライバーに基づくエスケープ コードの例です:
import ( "database/sql" _ "github.com/go-sql-driver/mysql" "fmt" ) func main() { username := "root" password := "" host := "localhost" port := "3306" dbName := "testdb" db, err := sql.Open("mysql", fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8", username, password, host, port, dbName)) if err != nil { panic(err) } defer db.Close() keyword := "' OR 1=1 #" query := fmt.Sprintf("SELECT * FROM users WHERE name = '%s'", db.Escape(keyword)) rows, err := db.Query(query) if err != nil { panic(err) } defer rows.Close() // 处理查询结果 }
上の例では、Golang のデータベース/SQL パッケージを使用して MySQL データベースに接続し、必要な情報を含む db オブジェクトを作成します。接続されている MySQL データベースに関する情報。入力キーワードの処理には Escape メソッドを使用しました。このメソッドを使用すると、SQL クエリ ステートメントの生成時にすべての特殊文字がエスケープされ、SQL インジェクション攻撃を回避できます。
以上がgolang mysql エスケープの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。