2012-01-26 17 views
0

私のウェブサイトには、ユーザーのログインシステムがあり、ログインするとそのユーザーのプロフィールページに移動します。つまり、ユーザーを変更して他のユーザーのプロフィールに行って、そのユーザーとして行動することを止める方法はありませんでした。これをやめるために、ユーザのuidがURLのuidでない場合、自分のプロフィールにリダイレクトされるURL/MySQLシステムを実装しました。ここで問題となるのは、プロファイルにはURLを変更するフォームがあり、uidクエリーを削除するとuidが不足しているためページが表示され、フォームへの入力とフォーム入力を無視します。ユーザーをプロフィールページに限定してください

コードは次のとおりです。

<?php 
mysql_connect ('x', 'x', 'x'); 
mysql_select_db ('x'); 

if(isset($_COOKIE['wd_un'])) { 
    $un = $_COOKIE['wd_un']; 
    $pass = $_COOKIE['wd_pass']; 

    $cook = "SELECT * FROM x WHERE username = '$un' AND password = '$pass' limit 1"; 
    $cookr = mysql_query($cook) or die (mysql_error()); 
     if(mysql_num_rows($cookr) == 0) { 
      header ("Location: index.php"); 
     } 
     else { 
      $urluid = mysql_real_escape_string($_GET['uid']); 
      $uidcheck = "SELECT * FROM x WHERE username = '$un' AND password = '$pass'"; 
      $uidcheckq = mysql_query($uidcheck) or die (mysql_error()); 
      while($rcu = mysql_fetch_assoc($uidcheckq)) { 
       $dbuid = $rcu['uid']; 
         if($urluid != $dbuid) { 
          header ("location: home.php?uid=$dbuid"); 
         } 
         else { 
         } 
      } 
     } 
    } 
mysql_close(); 
?> 

は仕事の周りにはありますか?

+1

セッション中のユーザーを知っている場合は、なぜURLパラメータを使用するのですか? –

答えて

5

このコードブロックは、あなたがここにいることが悪いことでいっぱいです。

まず、絶対に決してユーザーのパスワードをCookieに保存しないでください。 セッションIDのみをクッキーに格納し、残りのセッションデータをDBのセッションテーブルに格納してください。このセッションテーブルには、ユーザーのIDと、基本的なアクセス権が必要なその他のものが含まれています。このテーブルにもいない。

ここで、URL内のuser_idを使用すると、相互参照によって人が邪魔になることがなくなります。

もちろん、あなたのクッキーIDに基づいて引き出されたセッションテーブルからmysqlの結果を相互参照します。明らかにそれらが一致しない場合、それらを起動します。

フォームのリダイレクトについては、投稿の処理方法を再構成する必要があります。あなたのプロフィールページは常にあなたのクッキー内のセッションIDに関連するプロファイルだけをプルすることができます。それはURLへの依存を取り除き、この問題を完全に解決します。

また、あなたの入力をサニタイズするにはmysql_real_escape_string()を見てください。 mysqlクエリのために盲目的にクッキー情報を受け入れることは非常に危険です。あなたが本当にあなたのサイトに巨大な注入穴を残すことを目指さない限り。

+0

セッションを開始し、セッションIDを持つCookieを設定し、ユーザーのユーザー名、ppassword、およびuidをセッションテーブルに格納し、セッションテーブルのユーザーのユーザー名とパスワードが一致する場合は、Cookieを使用してテーブル内のセッションを検索しますuser_dbテーブルで、uidがセッションテーブルのuidと等しいデータベースから情報を選択して、独自のページをロードしますか? – AviateX14

+0

ユーザー名とパスワードを使用してログインすると、独自のIDを作成できます。これはhttp://php.net/manual/en/function.uniqid.phpです。次に、そのIDだけをクッキーに保存します。それから、あなたのセッションテーブルには、そのIDだけをユーザIDとともに保存します。パスワードなし。ページの読み込み時に、そのIDに関連するプロファイルをCookieにプルするか、そのメソッドを使用している場合は、URL内のuser_idでCookieに関連するuser_idを相互参照することができます。セキュリティが気になる場合は、ページの読み込みごとにこのCookie IDを更新してリセットすることができます。 –

+0

また、セッションという言葉をphpのsession()と混同しないでください。実際には、どのような種類の$ _SESSION変数も設定する必要はありません。あなたのコメントは、あなたがパスワードを確認する必要がないことを除いて、ほとんど正確です。この場合、Cookieの種類の一意のIDは、ページの読み込みをリフレッシュする優れた一意のIDが推測するのがほとんど不可能になるため、そのCookieの種類の一意のIDとして機能します。 Cookie IDに関連して見つかったuser_idに基づいてプロファイルをプルするだけです。ユーザーがCookieセットを持っていて、そのIDがセッションテーブルに見つかった場合は、安全でなければなりません。必要に応じてタイムスタンプを含めることができます –

1

URLからユーザーを引き出すのではなく、ユーザーを識別するためにCookie IDを使用する必要があります。 cookieIDがUserIDと一致しない場合は、独自のプロファイルにリダイレクトします。

基本的に、プライベートデータのユーザーIDを渡すためにURLを使用しないでください。常にクッキーを参照します。

ユーザを識別するためのURL文字列のみに依存することは、あなたが説明したユーザビリティの問題の上に巨大なセキュリティホールです。

+0

さて、私はそれをクッキーに変更しますが、クッキーを使って自分のプロフィールのみに制限しますか? – AviateX14

+0

基本的に.. userid == cookieIDだから、彼らが行く各ページは彼らの情報だけを表示します。リダイレクトは必要ありません。 yo0uの投稿内容に基づいて、url文字列にユーザーIDを追加する必要はありません。ただクッキーを読んでください。 – Scott

関連する問題