簡體   English   中英

我如何使我的代碼創建帳戶免受 SQL 注入的影響?

[英]How would I make my code which creates accounts safe from SQL-Injections?

這是我的代碼:

import sqlite3
connection = sqlite3.connect('data.db')
cursor = connection.cursor()
cursor.execute('CREATE TABLE IF NOT EXISTS accounts(name text primary key, password text)')
connection.commit()
connection.close()

continue_loop = True
yes_no_value = input("Would you like to create a new account? (yes/no): ")
if yes_no_value == 'no':
    continue_loop = False

while continue_loop:

    user = input("Enter username: ")
    password = input("Enter password: ")
    connection = sqlite3.connect('data.db')
    cursor = connection.cursor()
    cursor.execute(f'INSERT INTO accounts VALUES("{user}", "{password}")')
    connection.commit()
    connection.close()
    print('success')
    yes_no_value = input("Would you like to create a new account? (yes/no): ")
    if yes_no_value == 'no':
        continue_loop == False

如果有人可以將我的代碼發送給我,但經過編輯以防止 SQL 注入並進行解釋,那將會有所幫助。

在您提供的代碼中,存在注入風險的代碼是這一行:

cursor.execute(f'INSERT INTO accounts VALUES("{user}", "{password}")')

因此,您需要擔心的是此時userpassword值的安全性。 您允許用戶從控制台輸入它們,因此他們基本上可以輸入任何內容。

你可以改為:

cursor.execute(f'INSERT INTO accounts VALUES(?, ?)', (user, password))

這具有相同的結果,但現在cursor.execute() (或底層調用)將userpassword的值轉換為 SQL 的值,並且有機會在此過程中發現惡作劇。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM