2014-03-13 4 views
1
<?php 
$name=$_GET['var']; 
if($_SESSION["loginvalue"]==1) 
{ 
echo "Welcome,$name"; 
echo "&nbsp;&nbsp;&nbsp;&nbsp;<a href='login.php'>Logout</a>"; 
} 
?> 

이것은 페이지에서 세션을 유지 보수하는 데 사용 된 코드입니다. 내가 원하는 것은 웹 브라우저에서 local/project/cms.php url을 입력하면 열리지 않아야한다는 것입니다. 다른 사람이 먼저 로그인하면 cms.php가 열려야합니다. 그렇지 않으면 열려서는 안됩니다.세션 보안 유지

답변

0

이 같은 코드를 수정할 수 있습니다 :

<?php 
    session_start(); 
    $name=$_GET['var']; 
    if($_SESSION["loginvalue"]==1) 
    { 
     echo "Welcome, ". htmlentities($name, ENT_QUOTES, "UTF-8"); 
     echo "&nbsp;&nbsp;&nbsp;&nbsp;<a href='login.php'>Logout</a>"; 
    }else{ 
     //Redirect user to login page. 
     header("location: /login.php"); 
    } 
?> 
+1

또한 당신의 희망은 XSS에 대한 영업을 조언하고 확인 값은 CSRF 공격의 다른 simlar 종류를 제거하는 몇 가지 CSRF 미들웨어를 사용할 수 있습니다 @LozCherone ... –

+0

를 사용하기 전에 설정됩니다. 나는 외부 사용자에게 노출되지 않는 한 세션이 XSS 발행 유틸리티를 야기 할 것이라고 생각하지 않습니다. – akm

+0

XSS에 열린 $ 이름이 –

0

100 % 당신이 무슨 뜻인지 확인; 당신이가는 경우하지만 ...

은 첫째 session_start()의 주어진 코드, 몇 가지 문제가 사용자의 입력을 탈출하지 때문에 코드가 $name VAR에 XSS attack에도 열려있다, 당신은 htmlentities() 사용자 입력 을 사용할 필요가 다시 사용자에게 표시합니다. 또한 PHP undefined index 경고를 피하기 위해 사용하기 전에 변수가 설정되어 있는지 확인해야합니다. 그 다음에는 기본적으로 사용자가 로그인했는지 확인한 다음 사용자가 로그인 페이지로 리디렉션하지 않은 경우 확인합니다.

<?php 
    session_start(); 
    $name = isset($_GET['var']) ? $_GET['var'] : null; 
    if(isset($_SESSION["loginvalue"]) && $_SESSION["loginvalue"]==1) 
    { 
     echo "Welcome,".htmlentities($name, ENT_QUOTES); 
     echo '&nbsp;&nbsp;&nbsp;&nbsp;<a href="./login.php">Logout</a>'; 
    }else{ 
     //Redirect user to login page if not logged in. 
     exit(header("location: ./login.php")); 
    } 
?>