2014-02-15 107 views
-1

1.如何以管理員和用戶的相同形式登錄?如何以管理員和用戶的相同形式登錄

這裏是我的代碼

<?php 
include('config.php'); 
session_start(); 
if($_SERVER["REQUEST_METHOD"] == "POST"){ 
$email=$_POST['email']; 
$password=$_POST['password']; 
$salt = sha1(md5($password)); 
$password = md5($password.$salt); 
$sql="SELECT email FROM registered_members WHERE email='$email' and password='$password'"; 
$result=mysql_query($sql); 
$row=mysql_fetch_array($result); 
$active=$row['active'];    
$count=mysql_num_rows($result); 
$sql1="SELECT email,password FROM admin WHERE email='$email' and password='$password'"; 
$result1=mysql_query($sql1); 
$row1=mysql_fetch_array($result1); 
$active1=$row1['active'];    
$count_admin=mysql_num_rows($result1); 
if($count==1){ 
session_register("email"); 
session_register("password");  
$_SESSION['login_user']=$email; 
header("location:member.php"); 
} 
elseif($count_admin==1){ 
session_register("email"); 
session_register("password");  
$_SESSION['login_admin']=$email; 
header("location:admincp/admin-panel.php"); 
} 
else { 
echo "Wrong email or Password"; 
}} 
?> 

2,請幫助我,我怎麼能解決這個?

+1

對於SQL注入攻擊,您是**開放**,如果您還沒有被攻擊,將會被黑客攻擊。使用PDO或類似的準備/參數化查詢來完全避免此問題。 – Brad

+0

我該怎麼做? – user3303166

+0

http://code.tutsplus.com/tutorials/why-you-should-be-using-phps-pdo-for-database-access--net-12059 – Brad

回答

0
  1. 請在發佈之前使用一些縮進。這很難,很難有人會用髒碼回答你

  2. 正如評論所說,SQL注入。阻止他們,瞭解準備的語句: http://php.net/pdo.prepared-statements

你的答案之前,是不是真的需要兩個表具有相同的內容?如果創建一個可以標記用戶是否擁有管理員權限的列,會不會更容易?它會阻止你運行兩個查詢,更快的代碼,更快的性能,更少的內存消耗。

現在,你的問題:

Code removed

請心裏有你的代碼結構和安全性。

+0

不要在StackOverflow上發佈不安全的代碼。人們總是盲目地複製/粘貼這些東西。另外,考慮使用除'md5()'以外的密碼散列。鹽的方法也存在缺陷...顛倒一個散列會顯示所有其他相同密碼的密碼,因爲salt基於密碼。邏輯,是一團糟。爲什麼不加入這些表格?最後,你的'Location:'標題需要包含完整的URL才能生效。大多數瀏覽器都會讓你擺脫困境,而新的標準就是不要求它,但現在你仍然需要完整的URL。 – Brad

+0

這個問題不是關於安全性。問題是關於如何放置兩個會話值,錯誤是在條件鏈中。如果人們一味地複製/粘貼,他們應該知道他們在做什麼。此外,這是一個非常特殊的情況,它不是通用代碼。請記住,我不喜歡發佈不安全的代碼,但這不是問題的含義。 –

+0

所以如果我使用方法後沒有pdo黑客的意思,可以輕鬆破解我的mysql數據庫。如果我的服務器有一個ssl,我打開mysql注入? – user3303166

相關問題