2011-08-18 116 views
3

我正在調查一個PHP開發人員很久以前寫的網站,我想知道他使用的登錄技術是否安全。考慮SQL注入這個PHP登錄技術是否安全?

這是他所採取的方式:

$username=''; 
$username = escapeshellcmd($HTTP_POST_VARS['user']); 
$pwd = escapeshellcmd($HTTP_POST_VARS['pw']); 

$loginerror=false; 

if ($logout=="1") 
{ 
    closesession($s_id); 
    $username=''; 
    $logged=false; 
} 

$logged=checksession(session_id(), $ipaddr); 

if ((!$logged) && ($username!='')) 
{ 
     //$username = escapeshellcmd($HTTP_POST_VARS['felhasznalo']); 
     //$pwd = escapeshellcmd($HTTP_POST_VARS['jelszo']); 
     if (checkuser($username, $pwd, DOM)) 
      { 
      if (sessionstore(session_id(), $username, $pwd, $ipaddr, $datum, DOM)) 
       { 
       $logged=true; 
       } 
      } 
     else 
      { 
      $loginerror=true; 
      ; 
      }  
} 
if ($logged) 
    { 
    $username=getsessionuser(session_id()); 
    $remember=getremember($username, DOM); 
    } 
?> 

function checkuser($u, $p, $d) 
{ 
$sql_ell='SELECT PWD FROM USERS WHERE ACTIVE=1 AND USERNAME="'.$u.'" AND DOMAIN="'.$d.'"'; 
$eredm_ell= mysql_query($sql_ell); 
if ($eredm_ell) 
    { 
    $domainnumrows=mysql_num_rows($eredm_ell); 
    if ($domainnumrows==1) 
     { 
     $egy_sor = mysql_fetch_row($eredm_ell); 
     $pwd_in_table=$egy_sor[0]; 
     if ($pwd_in_table==md5($u.$p)) 
      { 
      return true; 
      } 
     } // rows 
    } // ered 
return false; 
} // func 

這安全嗎?

+4

代碼審查不屬於這裏。 http://codereview.stackexchange.com/ –

+0

我強烈建議閱讀此:http://stackoverflow.com/questions/60174/best-way-to-stop-sql-injection-in-php – philwinkle

回答

9

如果我看不到,用戶名上的唯一檢查是escapeshellcmd。這還不夠。同樣,如果我看到正確的,它被投入到這個查詢:

$sql_ell='SELECT PWD FROM USERS WHERE ACTIVE=1 AND USERNAME="'.$u.'" AND DOMAIN="'.$d.'"' 

在那裏你可以做各種髒東西的。

所以沒有。這並不安全。