2017-07-10 21 views
0

現在、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」と言って、エラーメッセージを取得することです。ユーザー名とパスワードをデータベースに入力しましたが、このエラーが発生します。

+4

おめでとうございます!あなたはSQLインジェクションを発見しました。引用符なしで管理語という単語を送信しました。これはクエリの列名として受け入れられました。悪意のあるユーザーがこの「機能」を使用して、データベース内のデータにアクセス、変更、または削除することができます。答えを参照してください:パラメータ。 – JeffUK

+0

https://xkcd.com/327/ – Murphy

答えて

3

は、SQL文のない使用文字列置換を行います助けてください。パラメータを使用します。

cur.execute("SELECT Password FROM Users WHERE Username = ?", (un,)) 
+0

問題が解決しました。ありがとうございます。D –

+0

@JordanCorfieldこれが正しいアプローチである理由を知りたい場合は、私は、共通のセキュリティ上の欠陥についてお読みになることをお勧めします。 OWASPトップテンはスタートするのに最適な場所です。がんばろう。 – JeffUK

関連する問題