session 변수 사용법 질문입니다

session 변수 사용법 질문입니다

QA

session 변수 사용법 질문입니다

답변 2

본문

안녕하세요 hash 함수 + session 변수를 이용해서 제가 개발중인 페이지를 암호를 치고 암호가 맞으면 세션을 통해서 들어갈 수 있게 하고 암호가 틀리면 페이지를 못보게 할려고 하는데요

session 변수에 값을 어떻게 넣어야 될지 몰라서 여쭙니다..ㅠㅠ 일단 프로세스는


<?php
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
if (!password_verify("qwer", $_SESSION['accessKey'])) {
    echo "<script>location.href='".G5_URL."/authentication/auth.php?url=".parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH)."';</script>";
}
?>

이게 그누보드 안에 extend안에 sessionCheck.php란 파일의 코드구요

그누보드의 모든 페이지는 extend파일에 있는 모든 php를 include하는 걸 이용해서 여기서 세션 검사(해쉬 함수 이용)를 했습니다. 그리고 이게 auth.php 코드입니다.

<?php
    $path = $_GET['url'];
    $password = password_hash('qwer', PASSWORD_DEFAULT);
?>
<script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
<div class="first-div">
    <p class="title">
        암호 테스트 중입니다.<?php echo $path; ?>
    </p>
    <p class="sub-title">
        암호 입력 : <input type="password" placeholder="암호 입력" id="input-pass" class="input-pass" size="20">
    </p>
    <button class="btn">확인</button>
</div>
<style>
    .first-div {
        text-align: center;
        height: 100%;
        padding: 470px;
    }
    .title {
        font-size: 50px;
    }
    .sub-title {
        font-size: 30px;
    }
    .input-pass {
        line-height: 20px;
        padding: 10px;
        border: 1px solid #ddd;
        border-radius: 4px;
        margin-bottom: 5px;
    }
    .btn {
        padding: 7px 20px;
    }
</style>
<script>
    $(function() {
        $(".btn").click(function() {
            $.ajax({
                type: "post",
                url: "passCheck.php",
                dataType: "json",
                data: {
                    password: $("#input-pass").val(),
                    hash_pass: "<?php echo $password; ?>"
                },
                success: function(data) {
                    if (data.check == "false") {
                        alert("암호가 틀렸습니다.");
                        $("#input-pass").focus();
                    } else {
                        location.href = "제 사이트의 도메인입니다(공개하기 좀 그래서 지웠습니다. 여기선 오류가 안나요.)<?php echo $path; ?>";
                    }
                },
                error: function(request, status, error) {
                    alert("code:"+request.status+"\n"+"message:"+request.responseText+"\n"+"error:"+error);
                }
            });
        });
    });
</script>

ajax를 가는 페이지인 passCheck.php 코드는 이겁니다.

<?php
    if (password_verify($_POST['password'], $_POST['hash_pass'])) {
        session_start();
        $_SESSION['accessKey'] = $_POST['hash_pass'];
    } else {
        $check = "false";
    }
    $json = json_encode(array("check" => $check));
    echo ($json);
?>

계속 확인해 보니깐 accessKey에 값이 안들어가는거 같아요ㅠㅠㅠ session에 값 넣는걸

session_start();
$_SESSION['accessKey'] = $_POST['hash_pass'];

이런식으로 하면 안되는건가요?? 고수님들 부탁드립니다..

이 질문에 댓글 쓰기 :

답변 2

그냥 일반 해쉬로하면 안되요 그누에서 쓰는건 pbkdf2 위주로 써야되요

학습용으로는 모를까 실제로 쓰려면 암호 라이브러리 라이센스 사시던가 따로 구해서 적용해야되요

그리고 비밀번호만 검증뿐만 아니라 페이지 고유번호나 페이지명을 따로 넣어야 될것같아요 

해쉬 문제는 둘째고 하려는 방법 자체가 잘못 되었습니다

extend 화일은 내용에 출력이 있으면 에러입니다

 

위 내용은 head.sub.php 또는 head.php에 넣어야 합니다

그리고  passCheck.php 를 extend에 넣어서는 안되고

이 화일 상단에 common.php를 include 하지않으면 세션 저장 폴더가 그누보드와 달라서

세션을 저장해도 다른 곳에 저장됩니다

 

아 passCheck.php 랑 auth.php는 G5_URL."/authentication 이 곳에 넣어두었습니다ㅎㅎ
그러면 sessionCheck.php를 head.php에 넣고 해보겠습니다. 근데 제가 common.php를 include 하다가 에러난적이 많아서요.. 혹시 passCheck.php를 이렇게 하면 될까요?

<?php
    include_once('../common.php');
    if (password_verify($_POST['password'], $_POST['hash_pass'])) {
        session_start();
        $_SESSION['accessKey'] = $_POST['hash_pass'];
    } else {
        $check = "false";
    }
    $json = json_encode(array("check" => $check));
    echo ($json);
?>

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
전체 947
© SIRSOFT
현재 페이지 제일 처음으로