ich habe ein anmeldeformular. Wenn man dort aber % als id eingibt und irgendein passwort, und das Passwort benutzt jmd, dann wird man automatisch mit der ID eingeloggt. Deshalb möchte ich verhindern, dass man in den UserId Textfeld ein % eingeben kann. Aber wie ? Hier mein code
[PHP] <?PHP
if(isset($_SESSION['user_admin']) && checkInt($_SESSION['user_admin']) && $_SESSION['user_admin']>=0) {
echo 'Willkommen zurück '.$_SESSION['user_name'].'. Sie besitzen zurzeit '.$_SESSION['user_coins'].' Coins.';
?>
<?PHP
}
else {
?>
UserID:
Passwort:
Mit dem Login akzeptieren Sie automatisch unsere AGBs.
<?PHP
}
?>[/PHP]
Was muss ich hier einfügen, damit man kein % mehr schreiben kann bei UseriD
Für mich hört sich das sehr nach MySQL-Vulnerability an. Du benutzt sicherlich irgendwo in deinem Query
$query = "SELECT * FROM users WHERE id = '" . $_POST[ "User_ID" ] . "'";
Falls du tatsächlich so etwas haben solltest, verwende die Funktion mysql_real_escape_string. Dadurch werden alle Zeichen, die für XSS-Angriffe im Bereich MySQL genutzt werden können, escapet. So wird aus % ein % oder so etwas.
Ansonsten, bevor du den Query bildest kannst du das auch - allerdings sinnloser weise - selbst gestalten mittels str_replace( „/%/“, „“, $_POST[ „User_ID“ ] );.
Das wäre dann JavaScript, ABER das kannst du umgehen, wenn du JavaScript ausschaltest. Die sicherste Methode ist, die Daten auf das % zu prüfen, wenn sie beim Server angekommen sind =)
verstehe leider nicht so ganz wie es gehen soll:S … könntet ihr es mir bitte ergänzen da es wichtig ist … hier mein loginbereich
[PHP]<?PHP
if(isset($_SESSION['user_admin']) && checkInt($_SESSION['user_admin']) && $_SESSION['user_admin']>=0) {
echo 'Willkommen zurück '.$_SESSION['user_name'].'. Sie besitzen zurzeit '.$_SESSION['user_coins'].' Coins.';
?>
<?PHP
}
else {
?>
UserID:
Passwort:
Mit dem Login akzeptieren Sie automatisch unsere AGBs.
<?PHP
}
?>[/PHP] und hier meine login.php [PHP]<?PHP
if(isset($_GET['do']) && $_GET['do']=="aktivieren" && isset($_GET['hash']) && !empty($_GET['hash'])) {
if(strlen($_GET['hash'])==32 && $_GET['hash']!=1 && checkAnum($_GET['hash'])) {
$cmdHash = "SELECT id,web_aktiviert FROM account.account WHERE web_aktiviert='".$_GET['hash']."' AND web_aktiviert!='1' LIMIT 1;";
$qryHash = mysql_query($cmdHash,$sqlServ);
if(mysql_num_rows($qryHash)) {
$getData = mysql_fetch_object($qryHash);
$userUpdate = "UPDATE account.account SET web_aktiviert='1',status='OK' WHERE id='".$getData->id."' LIMIT 1;";
$updateQry = mysql_query($userUpdate,$sqlServ);
if($updateQry) {
echo'<p class="meldung">Ihr Account wurde erfolgreich aktiviert. Sie können sich nun einloggen.</p>';
echo'<meta http-equiv="refresh" content="1; URL=index.php?s=login"> ';
}
else {
echo'<p class="meldung">Query fehlgeschlagen. Bitte einen Admin kontaktieren!</p>';
}
}
else {
echo'<p class="meldung">Es wurde kein passender Eintrag gefunden. Aktivierung fehlgeschlagen.</p>';
}
}
else {
echo'<p class="meldung">Kein valider Hash!</p>';
}
Prüfe in der passenden SQL-Query nicht mittels LIKE, sondern mit = (Gleichheitszeichen). Ansonsten bekämpfst du ein Symptom (es gibt weitere), nicht die Ursache.