Golang을 사용하여 MySQL을 운영할 때 SQL 주입 공격을 피하는 것이 중요한 문제입니다. SQL 문의 보안을 보장하려면 필수 문자를 MySQL로 보내기 전에 이스케이프하여 이러한 문자가 SQL 문의 일부로 해석되지 않도록 하여 SQL 주입 공격이 발생하는 것을 방지하세요.
Golang에서는 이스케이프된 문자열을 반환하는 MySQL 드라이버의 Escape 메서드를 사용하여 MySQL 이스케이프 처리를 수행할 수 있습니다.
아래에서는 MySQL 이스케이프용 MySQL 드라이버에서 Escape 메서드를 사용하는 방법을 보여 주는 예를 사용합니다. 사용자가 URL을 통해 키워드로 전달한 값에 대한 검색 결과를 쿼리한다고 가정합니다. 예:
SELECT * FROM users WHERE name = '[输入的关键字]';
이 키워드는 작은따옴표, 큰따옴표 또는 기타 특수 문자가 있을 수 있다고 가정합니다. 이러한 특수 기호는 SQL 주입 공격을 일으킬 수 있습니다.
첫 번째 방법은 이러한 특수 기호를 수동으로 필터링하고 Golang의 문자열 라이브러리의 교체 방법이나 정규식의 교체 방법을 사용하여 이스케이프하는 것입니다. 수동 필터링이 철저하지 않으면 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 데이터베이스에 연결하고 연결해야 하는 MySQL 데이터베이스가 포함된 db 객체를 생성합니다. . 관련 정보. 입력 키워드를 처리하기 위해 Escape 메서드를 사용했습니다. 이 메서드를 사용하면 SQL 쿼리 문 생성 시 모든 특수 문자를 이스케이프 처리하여 SQL 삽입 공격을 피할 수 있습니다.
위 내용은 골랑 mysql 탈출의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!