現在、sqlite3を使用してデータベースから情報(ユーザー名、パスワード)にアクセスできるログインシステムが必要なプロジェクトに取り組んでいます。ここでは、現在のログインシステムである:sqlite3を使用してログイン機能を作成する
def UserLogin():
un = admin
pw = password
try:
statement = cur.execute("SELECT Username FROM Users")
for row in statement:
if un in row:
print("%s" % un)
pw_pas = cur.execute("SELECT Password FROM Users WHERE Username = %s" % (un))
if (pw in pw_pas):
print("Welcome\n")
elif pw not in pw_pas:
print("Password is incorrect")
return
print("Username is incorrect")
except IOError:
print("This process could not be executed")
print("login successful")
問題は、私は、コードを実行したとき、私は「sqlite3.OperationalError:いいえ、そのようなコラム:admin」と言って、エラーメッセージを取得することです。ユーザー名とパスワードをデータベースに入力しましたが、このエラーが発生します。
おめでとうございます!あなたはSQLインジェクションを発見しました。引用符なしで管理語という単語を送信しました。これはクエリの列名として受け入れられました。悪意のあるユーザーがこの「機能」を使用して、データベース内のデータにアクセス、変更、または削除することができます。答えを参照してください:パラメータ。 – JeffUK
https://xkcd.com/327/ – Murphy