2016-06-29 6 views
0

Ich habe ein Token, das ich versuche zu überprüfen, Formular unten Einreichung ist meine Token-Funktionen mit dem Formular, das ich benutze, um zu senden und dann die Formularbehandlung wo das Token überprüft werden sollte. Ich kann die Token-Funktion nicht funktionieren, warum?php token form handhabung

<?php 
function getToken() 
{ 
    if(!isset($_SESSION['user_token'])) 
    { 
    $_SESSION['user_token'] = md5(uniqid()); 
    } 
} 

function checkToken($token) 
{ 
    if($token != $_SESSION['user_token']) 
    { 
    header('location: 404.php'); 
    exit; 
    } 
} 
function getTokenField() 
{ 
    return '<input type="hidden" name="token" value="'.$_SESSION['user_token'].'" />'; 
} 
function destroyToken() 
{ 
    unset($_SESSION['user_token']); 
} 

Ein Register mit dem Namen register.php, das auf die Seite registerscript.php umleitet.

<?php getToken(); ?> 
<form method="post" action="registerscript.php"> 
<fieldset> 
    <legend>Registration Form</legend> 
    <table width="400" border="0" cellpadding="10" cellspacing="10"> 
     <tr> 
      <td></td> 
      <td style="font-weight: bold;color:red"> 

      <?php 
       if(isset($_SESSION['error'])) 
       { 
        echo '<p>'.$_SESSION['error']['firstname'].'</p>'; 
        echo '<p>'.$_SESSION['error']['lastname'].'</p>'; 
        echo '<p>'.$_SESSION['error']['username'].'</p>'; 
        echo '<p>'.$_SESSION['error']['email'].'</p>'; 
        echo '<p>'.$_SESSION['error']['password'].'</p>'; 
        echo '<p>'.$_SESSION['error']['country'].'</p>'; 
        unset($_SESSION['error']); 
       } 
      ?> 

      </td> 
     <tr> 
      <td style="font-weight: bold"><div align="right"><label for="firstname">First Name</label></div></td> 
      <td><input name="firstname" type="text" class="input" size="25" required /></td> 
     </tr>   <tr> 
      <td style="font-weight: bold"><div align="right"><label for="lastname">Last Name</label></div></td> 
      <td><input name="lastname" type="text" class="input" size="25" required /></td> 
     </tr>   <tr> 
      <td style="font-weight: bold"><div align="right"><label for="username">User Name</label></div></td> 
      <td><input name="username" type="text" class="input" size="25" required /></td> 
     </tr>   
     <tr> 
      <td style="font-weight: bold"><div align="right"><label for="password">Password</label></div></td> 
      <td><input name="password" type="password" class="input" size="25" required /></td> 
     </tr> 
     <tr> 
      <td style="font-weight: bold"><div align="right"><label for="confirmpw">Confirm Password</label></div></td> 
      <td><input name="confirmpw" type="password" class="input" size="25" required /></td> 
     </tr> 
     <tr> 
      <td style="font-weight: bold"><div align="right"><label for="email">Email</label></div></td> 
      <td><input name="email" type="email" class="input" size="25" required /></td> 
     </tr> 
     <tr> 
      <td style="font-weight: bold"><div align="right"><label for="country">Country</label></td> 
      <td><select name="country"> 
       <option selected value="0">Select Country</option> 
        <?php 
          while ($rowCerts = $resultcategories->fetch_assoc()) { 
          echo "<option value=\"{$rowCerts['country']}\">"; 
          echo $rowCerts['country']; 
          echo "</option>"; 
          } 
        ?> 

      </select></td> 
     </tr> 
     <tr> 
      <td height="23"></td> 
      <td><div align="right"> 
      <input type="submit" name="submit" value="Register!" /> 
      <?php echo getTokenField(); ?> 

Auf dem Formular einreichen Umgang ich will es das Token überprüfen gilt, mit dem folgenden Code, aber es bringt mich zum 404.php, als gäbe es keinen Token ist, aber wenn ich die Seite Quelle sehen ist ein Token.

  <?php 
       session_start(); 
       include_once('conn.php'); 
       if(isset($_POST['submit'])) 
       { 
        checkToken($token); 
        $firstname = $_POST["firstname"]; 
        $lastname = $_POST["lastname"]; 
        $username = $_POST["username"]; 
        $password = $_POST["password"]; 
        $confirmpw = $_POST["confirmpw"]; 
        $country = $_POST["country"]; 

        if(preg_match("/[^a-zA-Z0-9]+/", $firstname)) 
         { 
          $_SESSION['error']['firstname'] = "Incorrect characters used in Firstname.<br>"; 
         } 
       } 

Mein Quelltext zeigt:

  <input type="submit" name="submit" value="Register!" /> 
      <input type="hidden" name="token" value="f0de3e58dbd6196ac0f964203577abb0" />    </div></td> 
     </tr> 
    </table> 
</fieldset> 
+0

Haben Sie die Sitzung am Anfang Ihrer PHP-Skripte gestartet? –

Antwort

0

$token Satz ist an dieser Stelle?

if(isset($_POST['submit'])) 
{ 
    checkToken($token); 
} 

Oder sollte es

if(isset($_POST['submit'])) 
{ 
    checkToken($_POST['token']); 
} 
+0

Wenn ich die Quelle des Registrierungsformulars überprüfe, gibt es ein generiertes Token, also nehme ich an, dass es gesetzt ist? – nathzOO

0

Wahrscheinlicher ist, dass vorherige Antwort richtig ist. Was hast du in der conn.php Datei?

versuchen, solche Zeichenfolge hinzuzufügen:

echo "--$token--$_SESSION[user_token]--";die; 

vor der Linie

header('location: 404.php'); 

und sagen, was tun Sie erhalten.

+0

könnte es sein, dass, weil im umleiten von register.php zu registerscript.php das session token ist anders? – nathzOO

+0

Ich habe ---- f0de3e58dbd6196ac0f964203577abb0-- Sache ist sein Echo nach if ($ token! = $ _SESSION ['user_token']) – nathzOO

+0

So ist Ihr $ _SESSION ["user_token"] leer. register.php und registerscript.php ist das gleiche. Ändern Sie nicht die Domain von www.domain.com zu domain.com? – Vasya