2011-08-18 113 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.'"' 

在那里你可以做各种脏东西的。

所以没有。这并不安全。