沒有字串建構子的SQLite 中的變數表名稱
在SQLite 中,可以在不訴諸易受攻擊的字元串的情況下使用變數表名稱建構函式?
背景
考慮一個在 SQLite 資料庫中編目模擬資料的項目。為了提高效率和靈活性,每個星都需要表,以避免在大表中查詢一小部分資料。但是,由於 SQL 注入風險,不鼓勵使用字串建構函數作為表名。
問題
是否可以在不使用字串建構子的情況下使用變數作為表名,類似的to:
cursor.execute("CREATE TABLE (?) (etc etc)", self.name)
回答
不幸的是,SQLite 不允許參數取代表名。
緩解SQL 注入
要解決SQL 注入問題,請考慮實作一個函數在使用前清理表名稱:
def sanitize_table_name(table_name): return ''.join(char for char in table_name if char.isalnum())
此函數透過刪除特殊字元(例如標點符號和空格)來清理表名稱,從而產生字母數字字串。
範例用法
使用消毒的桌子姓名:
sanitized_name = sanitize_table_name(self.name) cursor.execute(f"CREATE TABLE StarFrame{sanitized_name} (etc etc)")
以上是可以在沒有字串建構函數的 SQLite 中使用變數表名稱嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!