可以在沒有字串建構函數的 SQLite 中使用變數表名稱嗎?

Linda Hamilton
發布: 2024-11-08 18:15:02
原創
990 人瀏覽過

Can You Use Variable Table Names in SQLite Without String Constructors?

沒有字串建構子的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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板