2011-09-08 17 views
0
if(!$_POST['username'] || !$_POST['password']) 
     $err[] = 'All the fields must be filled in!'; 

    if(!count($err)) 
    { 
     $_POST['username'] = mysql_real_escape_string($_POST['username']); 
     $_POST['password'] = mysql_real_escape_string($_POST['password']); 
     $_POST['rememberMe'] = (int)$_POST['rememberMe']; 

     // Escaping all input data 

     $row = mysql_fetch_assoc(mysql_query("SELECT id,usr FROM tz_members WHERE usr='{$_POST['username']}' AND pass='".md5($_POST['password'])."'")); 

     if($row['usr']) 
     { 
      // If everything is OK login 

      $_SESSION['usr']=$row['usr']; 
      $_SESSION['id'] = $row['id']; 
      $id = $row['id']; 
      $_SESSION['rememberMe'] = $_POST['rememberMe']; 

      // Store some data in the session 
      setcookie('tzRemember',$_POST['rememberMe']); 
     } 
     else $err[]='Wrong username and/or password!'; 
    } 

    if($err) 
    $_SESSION['msg']['login-err'] = implode('<br />',$err); 
    // Save the error messages in the session 
    $goHere = 'Location: /index2.php?id=' . $id; 
    header($goHere); 
    exit; 
} 

ログイン成功時にURLで指定したIDを保持し、それがindex2.php?id=5のようなURLにidとプリペンドを$_GET。どんなリンクをクリックしても、これをURLに保持するにはどうすればいいですか?私は一度ログインし、次のコードを持っている

 $_SESSION['usr']=$row['usr']; 
     $_SESSION['id'] = $row['id']; 
     $id = $row['id']; 

は、私は私はそれを設定している まあ仕方をしたい、あなたはそれがその後、index2.phpなどのホームページにあなたを送信し、ログイン:

このidは、このから取得されましたか? id = [someint]、別のリンク 'prof.php'をクリックすると、id=[someint]部分が削除されます。ユーザーがLOGGEDされている限り、上記のコードを使用してURLに保持しますurl:index.php?id = 5、次に別のページに移動すると、prof.php?id = 5などが読み取られる可能性があります。整数ログインしたWHOに応じて明らかに動的になります

+1

あなたがしようとしているのは、クエリ文字列ではなく、SESSION変数を使用することです。 –

+0

URLをハックしてid = 4に設定するとどうなりますか?これは管理者アカウントになりますか?このようなURLで認証データを決して渡すべきではありません。 –

答えて

0

クエリ文字列isn理由の全体のホストのために、それのための場所ではありません。最も明白なのは、有効なアカウントでログインした後、URLの番号を変更すると、他の誰かだと思うようになることです。

代わりに、セッションを適切な方法で使用してください。

あなたが本当にそれをしたい場合は、おそらくIDを使用して、基本的な認証の例として

<a href="<?php echo makeLink('index2.php', 'query=string&foo=bar'); ?>">Click me</a> 

のように呼び出すリンク

function makeLink ($link, $queryString = '') 
{ 
    return $link . '?id=' . (int) $_SESSION['id'] . ((strpos($queryString, '?') === 0) ? substr($queryString, 1) : $queryString); 
} 

を生成するためのカスタム関数を書きたいと思います。 ..

<?php 
// Session start and so on here 
if (!isset($_SESSION['id'])) 
{ 
    // Not logged in 
    header('Location: /login.php'); 
    exit; 
} 

http://www.knowledgesutra.com/forums/topic/7887-php-simple-login-tutorial/はそれを非常に簡単完全な例です。

2

URLにIDを渡す代わりに、$ _SESSION変数のid値を参照することを検討してください。そうすれば、ユーザーはURLを変更したり、表示されない(またはさらに悪化する)データを見ることができなくなり、毎回URLに追加して値を読み取ることを心配する必要はありませんスクリプトを処理します。ユーザーがログインすると、IDを特定し、データベースから読み取り、リアルタイムで何かを判断します。 $ _SESSIONに格納し、必要に応じて参照してください。あなたは$ _SESSION ['id']値がないと何かが間違っていてログインしたことを確認するために、これをチェックの一部として使用することもできます。

+0

正確には...私のURLがindex.php?id = 1であり、それを1で気に入ると思ったらどうなるでしょうか?突然私は別のユーザーのデータを取得しますか? –

+0

ええ、GET値には用途がありますが、一意のid値は1ではありません。この場合は、それが変更されているかどうかを知るために比較することさえありません。 –

+0

_私のコードでこれを実装する方法を私に見せてもらってください。私は今どこから来ているのか理解しています。私はここで質問してうれしく思います。この低レベルのWebアプリケーションのセキュリティの一部を学ぶために助けてください。 – JohnPaul

関連する問題