2011-09-05 7 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를 사용하는 것이 안전합니까? 예를 들어 : 원시 $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

'? show_tools = 1'과 같은 쿼리가있을 때'$ show_tools'가''1 ''이되도록 PHP 인터프리터가 설정되어 있습니까? 그렇지 않다면,'! isset ($ user)'도'$ show_tools = false'를 설정하는 편이 낫습니다. –

답변

0

사용은 캡슐화 없다. 프로그램에 코드를 삽입 한 악의적 인 해커에 대해서는 언급하지 않고 누구나 실수로 겹쳐 쓸 수 있습니다. 또한 프로그램이 성장함에 따라 글로벌화해야합니다. 다음과 같은 방법을 고려하십시오

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