fehlermeldung bei richtigen login daten

Emrullah

Mitglied
Hallo zusammen,

mein Problem liegt darin das ich von meinem Localhost nun auf dem Cloud Server arbeite auf meinem lokal host MySQL hat alle super funktioniert mit dem Login aber nun auf dem Cloud Server ist es eine pervasive Datenbank und obwohl Login daten richtig sind sieht er es als Fehler an.



[CODE lang="java" title="LoginPanel"]package Panels;

import Daten.User;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPasswordField;
import javax.swing.JTextField;

@SuppressWarnings("serial")
public class LoginPanel extends JFrame implements ActionListener {

JLabel lbl_name;
JLabel lbl_password;
JTextField tf_userName;
JPasswordField pwf_pw;
JButton btn_login;
JButton btn_cancel;

String tempUserName;
String tempPassword;

public LoginPanel() {

this.setSize(245, 175);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLayout(null);
this.setTitle("Login");

lbl_name = new JLabel("Name:");
lbl_name.setBounds(10, 10, 80, 20);
this.add(lbl_name);

lbl_password = new JLabel("Password:");
lbl_password.setBounds(10, 40, 80, 20);
this.add(lbl_password);

tf_userName = new JTextField();
tf_userName.setBounds(90, 10, 130, 20);
this.add(tf_userName);

pwf_pw = new JPasswordField();
pwf_pw.setEchoChar('*');
pwf_pw.setBounds(90, 40, 130, 20);
this.add(pwf_pw);

btn_login = new JButton("Login");
btn_login.setBounds(10, 70, 100, 20);
btn_login.addActionListener(this);
this.add(btn_login);

btn_cancel = new JButton("Cancel");
btn_cancel.setBounds(120, 70, 100, 20);
btn_cancel.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {

System.exit(0);
}

});
this.add(btn_cancel);

System.out.println("funktioniert");

this.setVisible(true);
}

@Override
public void actionPerformed(ActionEvent ae) {
if (ae.getSource() == btn_login) {
this.tempUserName = tf_userName.getText();
System.out.println(tempUserName);
this.tempPassword = pwf_pw.getText();
System.out.println("Password check ...");
if (Login.checkPasswordAndName(tempUserName, tempPassword)) {
System.out.println("Password korrekt");

new MainPanel(new User(tempUserName));

this.setVisible(false);

} else {

JOptionPane.showMessageDialog(null, "Benutzername oder Password stimmen nicht");
System.out.println("Login Panel Fehler meldung");
}
}

}

}
[/CODE]



Danach das 2 Panel





[CODE lang="java" title="LoginPanel"]package Panels;

import java.util.ArrayList;

import systeme.MySQLConnection1;

public class Login {

public String loginName;
public String loginPassword;
public boolean hasFirstLogin;

public static ArrayList<Login> allLogins = new ArrayList<Login>();

public Login(String Name) {
System.out.println("-----Login----");
this.loginName = Name;
System.out.println(this.loginName);
this.loginPassword = "123456";
System.out.println(this.loginPassword);
this.hasFirstLogin = true;
allLogins.add(this);

}

public static boolean checkPasswordAndName(String Name, String pw) {

MySQLConnection1 mySQL = new MySQLConnection1();
if (mySQL.checkPassword(Name, MySQLConnection1.sha256(pw))) {

System.out.println("Login erfolgreich");
return true;

}

return false;
}
}
[/CODE]



und dann versucht er Password zu überprüfen





[CODE lang="java" title="passwordcheck"]public boolean checkPassword(String Name, String hashedPW) {
Erstelle_verbindung();
try {
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("SELECT login_password FROM Mitarbeiter WHERE Login_Name = '" + Name + "'");
while (rs.next()) {
System.out.println("systeme.MySQLConnection1.checkPassword( password wird überprüft)");

String tempHash = rs.getString(1);
System.out.println(Name);
System.out.println(tempHash);
System.out.println(hashedPW);

if (hashedPW.contentEquals(tempHash)) {
schliesse_verbindung();

return true;
}
}
} catch (Exception e) {
System.out.println("Password falsch");
System.out.println("Konnte keine Verbindung hergestellt werden");
e.printStackTrace();

}

schliesse_verbindung();
return false;
}[/CODE]


beim output wenn ich ausführe und mit System out println abrufe kommen exakt die gleichen passwörter



[CODE lang="java" title="debug"]debug:
funktioniert
Programm Starten
admin
Password check ...
systeme.MySQLConnection1.checkPassword( password wird überprüft)
admin
c591fccd50b4e109176b3be461b0c90044d375b2e54a2f20eb4d4cf9160a43a2
c591fccd50b4e109176b3be461b0c90044d375b2e54a2f20eb4d4cf9160a43a2
Login Panel Fehler meldung[/CODE]
 
In MySQL hat es funktioniert jetzt geht es nicht mehr wenn ich in debug markiere sind Leerzeichen dran obwohl ich niergendswo Leerzeichen eingefügt habe woher kommen die ??? Oder gibt es eine Möglichkeit das er keine Leerzeichen annimmt
 
Das wäre auch meine Vermutung.

Der Code ist zwar teilweise gruselig, potentiell anfällig gegen SQL-Injection (Gibt mal als Namen ' ein schau was passiert). Er widerspricht auch an vielen Stellen den Java Code Conventions (Methoden & Variablen fangen mit einem kleinbuchstaben an und sind CamelCase). Aber - und das muss man lobend erwähnen, das ist mal eine gute Fehlerbeschreibung mit schon einigem Versuch dem Fehler selber auf den Grund zu gehen.

Typ für sowas bei der Ausgabe
Java:
                System.out.println("xx+"tempHash+"xx");
Da sieht man Leerzeichen.
 
 
In MySQL hat es funktioniert jetzt geht es nicht mehr wenn ich in debug markiere sind Leerzeichen dran obwohl ich niergendswo Leerzeichen eingefügt habe woher kommen die ??? Oder gibt es eine Möglichkeit das er keine Leerzeichen annimmt
Möglichkeit 1: trim auf den Strings aufrufen.

Möglichkeit 2: Prüfen wie die Daten in die Datenbank gelangen, evtl. hat da jemand bei einfügen über phpmyadmin oder ähnliche Tools beim Copy & Paste Leerzeichen eingefügt

Möglichkeit 3: Die Spalte hat einen Typ CHAR und nicht VARCHAR:

11.3.2 The CHAR and VARCHAR Types
The CHAR and VARCHAR types are similar, but differ in the way they are stored and retrieved. They also differ in maximum length and in whether trailing spaces are retained.

The CHAR and VARCHAR types are declared with a length that indicates the maximum number of characters you want to store. For example, CHAR(30) can hold up to 30 characters.

The length of a CHAR column is fixed to the length that you declare when you create the table. The length can be any value from 0 to 255. When CHAR values are stored, they are right-padded with spaces to the specified length. When CHAR values are retrieved, trailing spaces are removed unless the PAD_CHAR_TO_FULL_LENGTH SQL mode is enabled
 
um den angriff anzuzeigen gib mal als "password das so ein wenn du den leerzeichen fehler repariert hast: xxx' OR '1' = '1
das ist noch eine harmlose injection aber da kommt schon schmarn raus 😉

somit kommst trotz deinen leer zeichen rein fällt mir gerade auf 😁
 

Zurück
Oben