데이터베이스 관리에서는 유연성과 효율성이 가장 중요합니다. SQLite로 작업할 때 다음과 같은 질문이 생깁니다. SQL 주입 공격에 취약한 문자열 생성자에 의존하지 않고 변수 테이블 이름을 사용할 수 있습니까?
이 경우 목표는 각 별표에 대한 테이블을 생성하는 것입니다. 스타 시뮬레이션. 각 테이블의 이름은 별의 이름에 따라 지정되어야 합니다. 처음에는 문자열 생성자를 사용하는 접근 방식이 포함됩니다.
cursor.execute("CREATE TABLE StarFrame"+self.name+" (etc etc)")
그러나 이는 이상적이지 않습니다. 이 문제를 해결하려면 매개변수 사용을 고려할 수 있습니다.
cursor.execute("CREATE TABLE StarFrame(?) (etc etc)",self.name)
안타깝게도 테이블은 매개변수 대체 대상이 될 수 없습니다. 따라서 이 접근 방식은 실현 가능하지 않습니다.
대신 주입 공격으로부터 보호하기 위해 삭제 기능을 사용할 수 있습니다. 이 기능은 특수 문자를 필터링하고 테이블 이름에 영숫자만 포함되도록 합니다.
def scrub(table_name): return ''.join( chr for chr in table_name if chr.isalnum() ) table_name = scrub(self.name) cursor.execute(f"CREATE TABLE StarFrame{table_name} (etc etc)")
이 접근 방식을 사용하면 보안 위협으로부터 보호하면서 동적 테이블을 생성할 수 있습니다. 잠재적인 주입 벡터를 제거함으로써 데이터베이스 무결성을 유지하고 악의적인 행위자가 애플리케이션을 악용하는 것을 방지합니다.
위 내용은 SQLite에서 동적 테이블을 안전하게 만드는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!