SQLite의 변수 테이블 이름
SQLite에서는 이름이 저장된 테이블을 동적으로 생성해야 하는 상황이 발생할 수 있습니다. 변수. 이러한 목적으로 문자열 생성자를 사용하는 것이 일반적이지만 SQL 주입 공격 가능성으로 인해 보안 문제가 발생합니다.
안타깝게도 SQLite는 테이블 이름에 대한 매개변수 대체를 허용하지 않습니다. 그러나 모범 사례에서는 주입 공격으로부터 보호하기 위해 매개변수 대체를 사용하도록 지시합니다.
대체 솔루션: 변수 스크러빙
테이블 이름은 직접 매개변수화할 수 없으므로 가능한 해결책은 테이블 이름이 포함된 변수를 CREATE TABLE 문에 전달하기 전에 스크러빙하는 것입니다.
영숫자 문자를 제외한 모든 문자를 제거하여 변수를 정리하는 함수를 생성할 수 있습니다. 예를 들어, 다음 Python 함수는 구두점, 공백 및 기타 영숫자가 아닌 문자를 제거합니다.
def scrub(table_name): return ''.join( chr for chr in table_name if chr.isalnum() ) scrub('); drop tables --') # returns 'droptables'
이 함수를 사용하면 변수 테이블 이름으로 테이블을 생성하여 악성 문자를 제거할 수 있습니다. , 주입 공격 방지:
table_name = 'StarFrame' + self.name cursor.execute('CREATE TABLE {} (etc etc)'.format(scrub(table_name)))
위 내용은 SQLite에서 동적 이름을 사용하여 테이블을 안전하게 만드는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!