2011-09-05 165 views
0

下面的代码检查管理员是否登录并在网站上显示特殊编辑框。为此,$ show_tools将在整个脚本中使用。PHP:安全的用户身份验证?

if (isset($user)){ 
     if($user->logincheck($_SESSION["loggedin"], "users", "user_password", "user_email")){ 
      $show_tools = true; 
     }else{ 
      $show_tools = false; 
     } 
    } 

之后使用$ show_tools是否安全? 例如:

<?php 
    if ($show_tools){ 
    ?> 
    <h1> Hello, administrator! </h1> 
    <?php 
    } 
?> 
+1

请注意,而不是'if(someCondition){$ var = true; } else {$ var = false; }',你可以简单地执行'$ var = someCondition;'。 –

+0

我不太清楚我的理解你的问题。您是否担心'$ show_tools'可能容易受到恶意攻击,并且通过脚本部分修改其值? –

+1

你的PHP解释器是否配置好,当你有一个类似'?show_tools = 1'的查询时,'$ show_tools'将会是''1''?如果不是,那么即使在'!isset($ user)'时,你最好设置'$ show_tools = false'。 –

回答

0

使用的原料$show_tools缺乏封装。每个人都可以覆盖它,即使是你错了,也没有提到在你的程序中注入了代码的恶意黑客。另外,随着程序的增长,你将不得不使其全球化。请看下面的方法:

function show_tools($flag = null) { 
    static $value = false; 
    if (is_bool($flag)) { 
     // you can run other checks here too 
     $value = $flag; 
    } 
    return $value; 
} 

用法:

// authenticate 
show_tools(true); 

if (show_tools()) { // if authenticated 
    // show the tools 
} 

// deauthenticate 
show_tools(false); 

功能意味着是非覆盖的,所以没有一个可以覆盖的功能,改变你不想没有你的意愿来改变什么。采用这种方法,您安全可靠。没有它,任何事情都可能发生:

<?php 
$show_tools = true; 
include("your_insecure_script.php"); 
// Cool! I can see special editing boxes! 
?> 
+0

在这种情况下,强制'$ show_tools = true;'和'show_tools(true);'有什么区别?我没有看到任何。 – zerkms

+0

我有同样的问题。 – Jugo

+0

区别在于封装,这是一件好事。我用更广泛的解释更新了我的答案。 – sanmai