• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

% im Textfeld verbieten

NE4Y

Mitglied
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 '<form style="padding-top: 3px;">Willkommen zur&uuml;ck <b>'.$_SESSION['user_name'].'</b>. Sie besitzen zurzeit <b>'.$_SESSION['user_coins'].'</b> Coins.</form>';
?>
<?PHP
	}
	else {
?>
<div class="login_input_left">
	<form id="userInfo" action="index.php?s=login" method="POST">
	UserID:&nbsp;&nbsp;<input type="text" maxlength="16" class="login" name="userid" >&nbsp;
    Passwort:&nbsp;&nbsp;<input type="password" maxlength="16" class="login" name="userpass">&nbsp;
    <input type="submit" value="login" name="submit" class="login_button"> 
	</form>
    </div>
    <div class="login_input_right">
        	Mit dem Login akzeptieren Sie<br />automatisch unsere <a href="#">AGBs</a>.
    </div>
<?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
Code:
$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 '<form style="padding-top: 3px;">Willkommen zur&uuml;ck <b>'.$_SESSION['user_name'].'</b>. Sie besitzen zurzeit <b>'.$_SESSION['user_coins'].'</b> Coins.</form>';
?>
<?PHP
	}
	else {
?>
<div class="login_input_left">
	<form id="userInfo" action="index.php?s=login" method="POST">
	UserID:&nbsp;&nbsp;<input type="text" maxlength="16" class="login" name="userid" >&nbsp;
    Passwort:&nbsp;&nbsp;<input type="password" maxlength="16" class="login" name="userpass">&nbsp;
    <input type="submit" value="login" name="submit" class="login_button"> 
	</form>
    </div>
    <div class="login_input_right">
        	Mit dem Login akzeptieren Sie<br />automatisch unsere <a href="#">AGBs</a>.
    </div>
<?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'<h2>Account&uuml;bersicht</h2>';
    echo'<div class="splitLeft">';
    echo'<ul class="menue">';
    if($_SESSION['user_admin']>0) {
      echo'<li><a href="index.php?s=admin">Adminbereich</a></li>';
    }
    if($_SESSION['user_admin']>=0) {
      echo'<li><a href="index.php?s=itemshop">Itemshop</a></li>';
      echo'<li><a href="index.php?s=spenden">Spenden</a></li>';
      echo'<li><a href="index.php?s=charaktere">Charaktere</a></li>';
      echo'<li><a href="index.php?s=passwort">Daten &auml;ndern</a></li>';
    }
    echo'</div>';
    echo'<div class="splitRight">';
    
    $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 
  {
  ?>
<h2>Login</h2>
<form action="index.php?s=login" method="POST">
  <table>
    <tr>
      <th class="topLine">User ID:</th>
      <td class="tdunkel"><input type="text" name="userid" class="login" maxlength="16" size="20" ValidChars="0123456789qwertzuiopüäölkjhgfdsayxcvbnmQWERTZUIOPÜÄÖLKJHGFDSAYXCVBNM/></td>
    </tr>
    <tr>
      <th class="topLine">Passwort:</th>
      <td class="thell"><input type="password" name="userpass" class="login" maxlength="16" size="20"/></td>
    </tr>
    <tr>
      <td class="topLine" style="text-align:center;" colspan="2"><input type="submit" class="login_button" name="submit" value="login"/></td>
    </tr>
  </table>
  <p><a href="index.php?s=register">Registrierung</a> &bull; <a href="index.php?s=lostpw">Passwort vergessen</a></p>
</form>
  <?PHP
  }
hoffe ihr könnt es mir kurz machen ;)
 
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.
 
Zuletzt bearbeitet:
Zurück
Oben