Q&A

https://xe1.xpressengine.com/?&act=procMemberLogin&user_id=아이디&password=비밀번호 

이런 형식으로 로그인을 고려중입니다.

이유는 오토핫키를 이용하여 프로그램을 만들었는데 홈페이지에 접속 후 회원 정보 중

정회원과 준회원을 구별하여 정회원 이상만 사용할 수 있도록 할려고 합니다.

오토핫키를 아시는 분이 있으리라 생각되는데...

urldownloadtofile를 이용하여 회원정보 페이지를 ㅍㅅ하면 로그인 전 정보만 읽어옵니다.

주소창 로그인으로 로그인하면 로그인한 회원정보를 ㅍㅅ할 수 있다는 것을 알게 되었는데

이것도 확실하지는 않지만 그래도 해보고 싶네요

게시글 및 구글링을 통하여 아래 게시글의 댓을 들을 보고 procMemberLogin함수 부분을 수정해도

https://xe1.xpressengine.com/qna/23008345

결과는 잘못 된 요청이라는 메세지만 뜨네요..ㅠㅠ

해결 방법이 없을까요?

댓글 10

  • 정확한 답변은 아닙니다.
    전 코어에는 관심이 없어서요.
    그냥 최신버전 올라오면 깔거든요.

    최근 이슈 중에 보안 문제로 get방식의 전달을 막은 것으로 알고 있습니다.
    그것 때문에 url을 이용해서 전달하는 get방식으로는 안되는 것이 아닐까 싶습니다.

    post방식으로 보내시는 것이....
  • @DoubleU

    님의 말씀이 맞는 것 같습니다.

    하지만 수정법을 모르겠네요..ㅠ

    20160216_171605.png

     

    저는 xe를 접한지 불과 2주 정도 밖에 되지 않아서 문외한입니다.

    단지 구글링을 통하여 알아본 결과 prcMemberLogin함수 부분이 영향을 준다고 하여

    다시 구글링 해서 다음과 같이 수정을 해봤습니다.

    20160216_171626.png

     

    && Context::getRequestMethod()=='GET')부분을 삭제했는데도 마찬가지 입니다.

    정확한 문법이나 구문을 모르고 단지 구글링 만으로는 정복하기 힘든 영역이라는 것을 새삼 느끼네요.ㅠ

  • 외부로 비번이 노출될 수 있어 위험할텐데요..
  • @하늘희
    저도 그게 부담되긴 합니다..ㅠ
  • 최신 xe코어에서 get방식을 막았으니 post방식으로 보내시거나
    위험을 무릎쓰고 1.8이전 버전을 사용해야죠.

    그리고 겟보다는 포스트가 좀더 안전하지만 네트웍데이터를 직접 보면 그대로 노출되므로 암호화하는 것이 좋을 듯합니다.

    아니면 꼭 xe를 직접 이용하지 않아도 된다면
    php로 회원 테이블의 아이디와 비번을 매칭해서 값을 리턴해주면 되죠.
  • @DoubleU
    댓글을 읽으면서 저의 부족한 지식이 한스럽습니다.
    겟과 포스트의 차이는 제가 찾아서 확인하겠습니다..ㅠ
    암호화는 어떻게 하는지 꿈도 꾸지 못하겠네요..ㅠㅠ

    마지막에 말씀하신 php로 회원 테이블의 아이디와 비번을 끌어온다는 것은.....
    xe코어의 함수를 이용하지 않고 로그인 상태에서 끌어올 수 있다는 말씀이신가요?
    만약 그것이 가능하다면 xe코어를 활용하지 않아도 관계없습니다.

    그런데 로그인을 하지 않아도 회원테이블을 로딩할 수 있나요?
  • 코드를 좀 만들다가...
    비번이 암호화 되어 있는데 그것을 비교하려면 암호화를 해줘야 하거든요.
    그래서 회원모듈을 좀 뒤져봤는데 어디있는지 못찾겠네요.....-0-;;;;;;;;;
    위에 적은 것처럼 코어에는 관심이 1g도 없어서요.

    구체적인 동작을 알면 더 간단한 방법이 있을것도 같은데요. 현재로서는...

    완성된 코드가 아니라서 좀 그렇기 하지만....

    ==============================

    <?php
    //아이디와 비번을 넘겨받습니다. 먼저 post방식으로 넘어온 것을 받고 없으면 get방식으로 값이 있는지 확인합니다.
    $user_id = $_POST['user_id']; if(!$user_id) { $user_id = $_GET['user_id']; }
    $password = $_POST['password']; if(!$password) { $password = $_GET['password']; }

    if($user_id && $password) { //아이디와 비번이 있을때만 동작합니다.

    $user_id = trim($user_id); //앞 뒤의 공백제거
    $password = trim($password);

    $password2 = $password; // xe의 회원설정과 동일한 암호화를 해야 합니다... 이 부분을 못찾겠네요..

    //DB를 연결합니다. 아이디, 비번, 테이블명을 자신의 계정에 맞게 바꿔줍니다.
    $conn = @mysql_connect("localhost","DB아이디","DB비밀번호") or die("DB Connect Failed");
    $status = mysql_select_db("테이블명");
    mysql_query("set names utf8", $conn); //XE는 UTF-8이죠. 이 문서도 UTF-8로 저장되어야 합니다.
    if(!$status)
    {
    $errNO = mysql_errno($conn);
    $errMSG = mysql_error($conn);

    echo "데이터베이스 연결에 실패하였습니다.<br>";
    echo "에러코드" . $errNO . " : " . $errMSG . "<br>";
    exit;
    }

    $query = "SELECT * FROM xe_member WHERE user_id = '$user_id' AND password = '$password2'"; //설치시 접두사를 변경하지 않았다면 회원테이블은 xe_member입니다.
    $result = mysql_query($query);
    $row = mysql_fetch_array($result);

    $member_srl = $row[member_srl];

    // 특정 그룹에 속한 것인지 알려면 $member_srl을 가지고 xe_member_group_member테이블에서 group_srl값을 가져와서 group_srl이 무엇인지 찾아야 합니다.-0-;;;;;;;;;;;;
    // 꽤 많은 부분이 생략되어 있는 것이네요.

    mysql_close($conn);
    } else {
    echo("<meta http-equiv='Content-Type' content='text/html; charset=UTF-8'><script>alert('아이디 또는 비밀번호가 없습니다.');</script>"); //경고창으로 경고메세지를 띄워주는데 이곳은 알아서 적당히...
    }
    ?>
  • @DoubleU
    정말 주석까지 달아주시고 너무너무 감사합니다...
    이코드로 지지고 볶아보겠습니다~^^
  • @BATCRO
    만약 오토핫키로 만드시는 것이 브라우져를 통해 실제 홈페이지로 로그인을 하는 것이라면..
    훨씬 간단하게 처리가능합니다.
    xe의 변수를 몇줄로 끌어와서 사용할수 있거든요.
  • @DoubleU
    오핫도 초보여서 많이 노력해야겠네요~
    다시 한번 감사드립니다~