在資料庫管理中,靈活性和效率至關重要。使用 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中文網其他相關文章!