테스트 사이트 - 개발 중인 베타 버전입니다

session 변수 사용법 질문입니다 채택완료

김시윤 4년 전 조회 2,271

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

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

</p>

<p><?php

if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가</p>

<p>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>";

}

?></p>

<p>

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

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

<?php

    $path = $_GET['url'];

    $password = password_hash('qwer', PASSWORD_DEFAULT);

?>

<script src="<a href="https://code.jquery.com/jquery-3.2.1.min.js"></script>" target="_blank" rel="noopener noreferrer">https://code.jquery.com/jquery-3.2.1.min.js"></script></a>

<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();</p>

<p>$_SESSION['accessKey'] = $_POST['hash_pass'];

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

댓글을 작성하려면 로그인이 필요합니다.

답변 2개

채택된 답변
+20 포인트

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

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

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

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

김시윤
4년 전
오호 pbkdf2란게 있었군요.. 저는 그냥 복호화안되는걸로 찾다가 bcrypt인가 그게 복호화가 안된다 그래서 그냥 hash함수 쓴거거든요..ㅠㅠ 조언 감사합니다!!

댓글을 작성하려면 로그인이 필요합니다.

4년 전

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

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

 

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

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

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

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

 

로그인 후 평가할 수 있습니다

답변에 대한 댓글 1개

김시윤
4년 전
아 passCheck.php 랑 auth.php는 G5_URL."/authentication 이 곳에 넣어두었습니다ㅎㅎ
그러면 sessionCheck.php를 head.php에 넣고 해보겠습니다. 근데 제가 common.php를 include 하다가 에러난적이 많아서요.. 혹시 passCheck.php를 이렇게 하면 될까요?
[code]<?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);
?>[/code]

댓글을 작성하려면 로그인이 필요합니다.

답변을 작성하려면 로그인이 필요합니다.

로그인