php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2005-2

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 18.08.2005, 19:20  
Gast
 
Beiträge: n/a
Standard Login Probleme mit Sonderzeichen im Nick

Hallo,
ich habe ein Loginscript geschrieben und musste nun leider feststellen, dass wenn ein Benutzer sich mit einem Nick registriert der Sonderzeichen enthält, insbesondere !, der Login fehlschlägt.

Ich glaube der Grund dafür ist, dass diese Sonderzeichen ja eine Bedeutung haben in PHP bzw. MySQL und es deshalb zu Problemen kommt bzw. dadurch nicht der komplette Nickname übergeben wird.

Nun möchte ich wissen wie ich die Nicknames quoten muss, damit dies nicht mehr passiert. Ich habe gestern Abend und auch heute wieder im Netz nach einer Lösung dafür gesucht, aber leider keine gefunden.

Die SQL-Abfrage sieht ca. so aus..(bin im Moment leider nicht zu Hause):

PHP-Code:
<?php
$sql 
"SELECT passwort FROM user WHERE username = '".$_POST['username']."';";
?>
Ich hatte auch schon versucht das ! mit einem \ zu maskieren, was aber leider auch nicht zum Erfolg führte da es dann wieder als normaler String bearbeitet wurde und mir s\!d ausgegeben wurde und somit der login auch wieder fehl schlug.

Eine Einschränkung der Sonderzeichen möchte ich eigtl. nicht vornehmen, sonst könnte man ja theoretisch die Characters (ca.) 155-191 ja komplett verbieten.

Über eine Antwort wäre ich sehr dankbar.

Gruß,
sm0gGER
 
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 18.08.2005, 22:31  
Gast
 
Beiträge: n/a
Standard

Hier nochmal die Funktion mit der ich den Login überprüfe.

PHP-Code:
<?php
// Diese Funktion wird beim einloggen verwendet und prueft die eingegebenen Angaben des Users auf ihre Richtigkeit
function login_right($name$passwort)    
{
    
//$name = mysql_real_escape_string($name);
    //$name  = str_replace("\!", "!", $name);             
//##### Die Datenbankabfrage die nach dem User und dem verschlüsselten MD5 Passwort durchsucht wird in eine Variable geschrieben

$sql sprintf("SELECT * FROM users WHERE username='%s' AND passwort='%s'",mysql_real_escape_string($username), mysql_real_escape_string($passwort));

//    $sql = "SELECT COUNT(user_id) AS anzahl FROM user WHERE username = '".mysql_real_escape_string($name)."' AND passwort = MD5('".$passwort."');";
    
//##### Das Ergebnis des mysql_queries wird in $result gespeichert
    
$result mysql_query($sql) OR die(mysql_error());        
    
//##### Das Ergebnis wird ausgewertet und die Funktion mysql_fetch_assoc gibt einen Integerwert zurück
    
$row mysql_fetch_assoc($result);                 
    
//##### Dieser Interger Wert ist entweder 0 oder 1, ist er 1 gibt die Funktion den Wert true zurück, ansonsten false
    
if($row['anzahl']==1)
    {
        return 
true;
    }
    else
    {
        return 
false;
    }
}   

?>
Hat niemand eine Idee? Schon soviele Views und keine Antwort.
 
Alt 18.08.2005, 22:34  
Erfahrener Benutzer
 
Benutzerbild von DER_Brain
 
Registriert seit: 18.04.2005
Beiträge: 1.541
PHP-Kenntnisse:
Fortgeschritten
DER_Brain ist zur Zeit noch ein unbeschriebenes Blatt
Standard

hm, ich weiß nicht, aber vielleicht mit
stripslashes und
addslashes

probiers mal damit...

mfg Andi
DER_Brain ist offline  
Alt 18.08.2005, 23:39  
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von DER_Brain
hm, ich weiß nicht, aber vielleicht mit
stripslashes und
addslashes

probiers mal damit...

mfg Andi
Hmm, ich konnte dienen Vorschlag leider nicht erfolgreich umsetzen, aber danke für den Tip.
 
Alt 18.08.2005, 23:51  
Erfahrener Benutzer
 
Registriert seit: 08.06.2004
Beiträge: 865
RudiS
Standard

Du brauchst eigentlich nur diese Funktion hier:
PHP-Code:
<?php
// Quote variable to make safe
function quote_smart($value)
{
   
// Stripslashes
   
if (get_magic_quotes_gpc()) {
       
$value stripslashes($value);
   }
   
// Quote if not integer
   
if (!is_numeric($value)) {
       
$value "'" mysql_real_escape_string($value) . "'";
   }
   return 
$value;
}
 
?>
Die kannst du dann so verwenden:
PHP-Code:
<?php
$query 
'SELECT
            COUNT(*) as count
          FROM
            table
          WHERE
            user = '
.quote_smart($_POST['username']).'
              AND
            password = '
.quote_smart(md5($_POST['passwort'])).'
         '
;
$result mysql_query($query) or exit(mysql_error());
 
?>
Diese Funktion verhindert auch Angriffe auf deine Seite: http://www.unixwiz.net/techtips/sql-injection.html
mfg RudiS
__________________
Kunst kommt von Können und nicht von wollen, denn sonst würde es ja Wunst heißen.
RudiS ist offline  
Alt 19.08.2005, 00:07  
Gast
 
Beiträge: n/a
Standard

Sauber Rudis werd ich gleich mal testen,
danke dir!
 
Alt 19.08.2005, 00:50  
Gast
 
Beiträge: n/a
Standard

Habe ich leider auch nicht zum laufen gebracht das ganze.

Muss ich vielleicht noch etwas bei speichern in die Datenbank im Registriervogang beachten damit das läuft?

Ups edit Funktion verrafft, zu spät sorry.
 
Alt 19.08.2005, 01:01  
Erfahrener Benutzer
 
Registriert seit: 08.06.2004
Beiträge: 865
RudiS
Standard

Was hat den nicht funktioniert. Wenn wir dir helfen sollen, dann musst du eine genaue Fehlerbeschreibung abgeben.
Wenn du die Passwörter in die Datenbank speicherst, musst du sie natürlich auch mit md5() verschlüsseln.
mfg RudiS
__________________
Kunst kommt von Können und nicht von wollen, denn sonst würde es ja Wunst heißen.
RudiS ist offline  
Alt 19.08.2005, 15:40  
Gast
 
Beiträge: n/a
Standard

Das Loginscript existiert schon seit Monaten und stellte nie ein Problem dar, die Passwörter speichere ich selbstverständlich MD5() verschlüsselt. Wie gesagt es gibt halt jetzt nur diese Problem mit dem ! im Namen. Was mich auch wundert ist, dass bei der Registrierung des Users mit ! keine Probleme auftreten im Script und auch der Name richtig in die DB abgespeichert wird, wenn ich diesen jedoch auslesen will scheint scheinbar immer irgendetwas nicht zu funktionieren. Ich gebe beim Login dann auch den Usernamen aus mit dem ich die DB befrage und die Ausgabe für den User ist auch korrekt geschrieben.
 
Alt 19.08.2005, 15:48  
Erfahrener Benutzer
 
Registriert seit: 17.08.2004
Beiträge: 213
carrib befindet sich auf einem aufstrebenden Ast
Standard

Öhm, sicher dass die Funktion ansonsten korrekt arbeitet?

Der Funktion wird der Parameter $name übergeben,
Zitat:
function login_right($name, $passwort)
aber für die SQL-Query verwendest Du die Variable $username.

Zitat:
$sql = sprintf("SELECT * FROM users WHERE username='%s' AND passwort='%s'",mysql_real_escape_string($username), ...
carrib ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Login Probleme sven88 PHP Tipps 2008 7 24.06.2008 06:34
Login System Probleme ! 7Style PHP Tipps 2008 2 07.01.2008 13:55
Probleme mit Sonderzeichen Kein Genie PHP Tipps 2006 15 24.10.2006 14:59
Etwas komplexerer Login --> Keine Angst, Suche benutzt dethlef14 PHP Tipps 2006 7 02.10.2006 00:35
auto login, Syntax Probleme? Server, Hosting und Workstations 1 24.03.2006 22:49
Probleme mit Sonderzeichen... Datenbanken 1 02.08.2005 23:37
[Erledigt] Login, LogIn, Anmelden, Einloggen -&amp;amp;amp;amp;gt; ??? Off-Topic Diskussionen 20 14.07.2005 11:01
LOGIN probleme PHP Tipps 2005 22 29.03.2005 09:20
[Erledigt] Probleme mit dem Sonderzeichen Datenbanken 4 21.03.2005 20:01
login Probleme PHP Tipps 2005 2 28.02.2005 08:46
Login und probleme mit Sessions PHP Tipps 2005 8 09.01.2005 17:48
Probleme bei Login PHP Tipps 2004 5 18.07.2004 22:08
Login durch Nick ersetzen themonk PHP Tipps 2004 8 10.07.2004 11:40
Probleme mit Sonderzeichen in mysql-Abfrage PHP Tipps 2004 3 20.06.2004 15:45
MySql und Php (Probleme mit Sonderzeichen) pit62 PHP-Fortgeschrittene 4 15.06.2004 04:19

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
php login sonderzeichen, sonderzeichen im nick, php login mit sonderzeichen, php sonderzeichen login, login umlaute php, einloggen sonderzeichen, problem mit sonderzeichen im login script, nick.de, php mysql_real_escape_string umlaute, php problem mit login umlaute, md5 passwort sonderzeichen, php script anmeldung mit sonderzeichen, php login mit umlaute, php umlaute login, php umlaute benutzername, md5 verschlüsselung probleme mit sonderzeichen, php sonderzeichen anmelden, md5 sonderzeichen, nick login, php md5 umlaute

Alle Zeitangaben in WEZ +2. Es ist jetzt 06:27 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.