% im Textfeld verbieten

hallo , ich habe folgendes problem

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“ ] );.

geht es nicht, dass man einfach macht, dass an im Textfeld kein % schreiben kann ?

ne der query is irwie nich da

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&ouml;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>';
}

}

if(!empty($_SESSION[‚user_id‘]))
{
echo’

Accountübersicht

‚;
echo‘
‚;
echo‘
‚;
echo‘
';

$cmdStats = "SELECT SUM( player.playtime ) AS ges_spielzeit, COUNT( * ) AS ges_chars, player_index.empire
FROM player.player
INNER JOIN player.player_index ON player_index.id = player.account_id
WHERE player.account_id = '".$_SESSION['user_id']."'
LIMIT 1";

$qryStats = mysql_query($cmdStats,$sqlServ);
$getStats = mysql_fetch_object($qryStats);

if(!empty($getStats->empire)) {
  $reich = '<img src="img/reiche/'.$getStats->empire.'.png" title="Reich" alt="Reich"/>';
}
else {
  $reich='kein Reich ausgew&auml;hlt';
}


echo'<table>
  <tr>
    <th class="topLine">Account:</th>
    <td class="tdunkel">'.$_SESSION['user_name'].'</td>
  </tr>
  <tr>
    <th class="topLine">Reich:</th>
    <td class="thell">'.$reich.'</td>
  </tr>
  <tr>
    <th class="topLine">Charaktere:</th>
    <td class="tdunkel">'.$getStats->ges_chars.'</td>
  </tr>
  <tr>
    <th class="topLine">Gesamte Spielzeit:</th>
    <td class="thell">'.$getStats->ges_spielzeit.' Minuten</td>
  </tr>';
$sqlAcc = "SELECT account.social_id AS loeschcode, safebox.password AS lagerpw
FROM account.account 
LEFT JOIN player.safebox 
ON account.id=safebox.account_id 
WHERE account.id='".$_SESSION['user_id']."'";

$qryAcc = mysql_query($sqlAcc) or die(mysql_error());
$getAcc = mysql_fetch_object($qryAcc);

if(empty($getAcc->lagerpw)) $getAcc->lagerpw = '000000';
  
  echo'<tr>
    <th class="topLine">L&ouml;schcode:</th>
    <td class="tdunkel">'.$getAcc->loeschcode.'</td>
  </tr>
</table>';

echo'</div><div class="clear"></div>';

}
else
{
?>

Login

User ID: Passwort:

RegistrierungPasswort vergessen

<?PHP }

[/PHP] hoffe ihr könnt es mir kurz machen :wink:

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.

ok habs gelöst… der fehler war in meiner head.inc.php