首頁 > 後端開發 > Python教學 > 如何在 SQLite 中安全地建立具有動態名稱的表?

如何在 SQLite 中安全地建立具有動態名稱的表?

Patricia Arquette
發布: 2024-11-09 02:54:02
原創
325 人瀏覽過

How to Safely Create Tables with Dynamic Names in SQLite?

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中文網其他相關文章!

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