SQL 주입을 방지하기 위해 개발자가 Python 2.5에서 SQLite3을 사용하는 동안 오류가 발생했습니다. 추천 "?"를 사용하는 경우 주입을 방지하기 위해 매개변수 대체를 시도하면서 그들은 다음과 같은 딜레마에 직면했습니다:
sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 1, and there are 8 supplied.
이 문제는 8개의 바인딩이 포함된 데이터베이스의 초기 생성에서 발생한 것으로 보입니다. 그러나 각 항목 이름에 대해 덜 안전한 "%s" 대체를 사용하면 문제가 해결되었습니다.
for item in self.inventory_names: self.cursor.execute("SELECT weight FROM Equipment WHERE name = '%s'" % item) self.cursor.close()
이러한 문제에 대한 해결책은 Cursor.execute() 메서드에 두 번째 매개 변수로 시퀀스가 필요하다는 점을 이해하는 데 있습니다. 이 경우 개발자는 우연히 8자 길이의 문자열을 제공했습니다. 이를 수정하려면 다음 코드 수정을 구현해야 합니다.
self.cursor.execute("SELECT weight FROM Equipment WHERE name = ?", [item])
이 매개변수를 준수하여 사양에 따라 문제를 효과적으로 해결하여 SQLite3에서 안전하고 효율적인 데이터 검색이 가능합니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3