[web] xe 뎃글 인증코드 달기(작업중)

예전 제로보드 쓸때, 뎃글에 자꾸 이상한글이 달려서..
인증코드를 만들었다.
XE로 가려니.. 이쪽에도 필요해서 좀 보고서 우선 급한대로 추가했다.
예전게시판은 글쓰기 권한은 나밖에 없어서.. 뎃글에만 달았는데..
수정해서 글쓰기에도 넣고, 글쓰기 제한 풀어야 겠다.

수정파일 : modules/board/skin/xe_board/view.document.html
수정위치 : 167줄 쯤.. 다음과 같이 추가 (사실 이건 내가 필요해서 넣은것.. 블로그 형태에서 뎃글쓰기가 지저분해서 열고 닫게 하려다 보니.. index가 필요해서..)
===============
{@$commentIdx++;}  
===============

168줄 쯤 다음과 같이 수정 (이것도.. 뎃글쓰기를 열고 닫게 하려다 보니 index가 필요해서..)
===============
        <div id=”commentEditor_{$commentIdx}” class=”boardWrite commentEditor” style=”display:none”>
===============

195줄 쯤.. 다음과 같이 수정,추가 (뎃글쓰기 열고 닫게 하려다 보니 index 추가, 인증코드 추가)
===============
        <div id=”commentButton_{$commentIdx}” class=”commentButton tRight” style=”display:none”>      <– 수정
                {$lang->onetime_password} <img src=”/xe/authimg.php” align=”absmiddle” /> <input type=”text” name=”onetime_password” class=”inputTypeText” />  <– 인증코드 추가
            <span class=”button {$btn_class}”><input type=”submit” value=”{$lang->cmd_comment_registration}” /></span>
        </div>
        <div id=”commentOpenButton_{$commentIdx}” class=”commentButton tRight”>   <– 이하 추가(뎃글 열기 버튼)
            <span class=”button {$btn_class}”><input type=”button” value=”{$lang->cmd_comment_registration}” onClick=”openCommentEditor(‘{$commentIdx}’);” /></span>
        </div>
===============

수정파일 : modules/board/board.controller.php
수정위치 : 130줄 쯤.. 다음과 같이 수정 및 추가
===============
            $obj = Context::gets(‘document_srl’,’comment_srl’,’parent_srl’,’content’,’password’,’nick_name’,’nick_name’,’member_srl’,’email_address’,’homepage’,’is_secret’,’notify_message’,’onetime_password’);    // <– onetime_password 추가
            $obj->module_srl = $this->module_srl;

            if( isset($obj->onetime_password) && ($obj->onetime_password != $_SESSION[“ssOTP”]) ) return new Object(-1, ‘msg_invalid_onetime_password’);   // <– 인증코드 판단하는 줄 추가
===============

수정파일 : modules/board/lang/ko.lang.php
수정위치 : 마지막에 추가
===============
    // 인증코드 관련
    $lang->onetime_password = ‘인증코드’;
    $lang->msg_invalid_onetime_password = ‘인증코드가 올바르지 않습니다’;
===============

수정파일 : modules/board/tpl/filter/insert_comment.xml
수정위치 : <form></form> 과 <parameter></parameter> 사이에 추가
===============
  <form>
     …
    <node target=”onetime_password” required=”true” minlength=”1″ maxlength=”4″ />
  </form>
  <parameter>
     …
    <param name=”onetime_password” target=”onetime_password” />
  </parameter>
===============

신규파일 : modules/board/skins/xe_board/js/comment.js  <– 뎃글쓰기 열고 닫기 위한 javascript
===============
function openCommentEditor(idx)
{
        var ce = document.all[“commentEditor_”+idx];
        var cb = document.all[“commentButton_”+idx];
        var ob = document.all[“commentOpenButton_”+idx];

        if(ce&&cb&&ob)
        {
                ce.style.display = “”;
                cb.style.display = “”;
                ob.style.display = “none”;
        }
}
===============

신규파일 : modules/board/skins/xe_board/images/authcode.php   <– 인증코드이미지 생성 파일
===============
<?
    define(‘__ZBXE__’, true);
    require_once(‘../../../../../config/config.inc.php’);
    $oContext = &Context::getInstance();
    $oContext->init();

    header(“Content-type: image/png”);
    $string_a = array(“a”,”b”,”c”,”d”,”e”,”f”,”g”,”h”,”j”,”k”,
        “m”,”n”,”p”,”r”,”s”,”t”,”u”,”v”,”w”,”x”,”y”,”z”,
        “2”,”3″,”4″,”5″,”6″,”7″,”8″,”9″);
    $keys = array_rand($string_a, 4);
    foreach($keys as $n=>$v){
        $string .= $string_a[$v];
    }

    $_SESSION[“ssOTP”]=$string;

    $im     = imagecreatetruecolor(80, 19);
    $orange = imagecolorallocate($im, 220, 210, 60);
    $px     = (imagesx($im) – 7.5 * strlen($string)) / 2;
    imagestring($im, 3, $px, 3, $string, $orange);
    imagepng($im);
    imagedestroy($im);
?>
===============

우선 급한대로 올렸는데..
다 한건지 모르겠다..
나중에 한번 확인해야지..

Loading

“[web] xe 뎃글 인증코드 달기(작업중)”에 대한 2개의 댓글

  1. 한가지 단점이…

    랜덤코드 이미지를 호출할때 세션값에 저장을 하다보니..

    글쓰는 화면 말고 새창을 띄우는 경우, 인증코드가 호출되면 새로 생성된 값이 저장되버린다..

    해서.. 글쓰는 화면에 보이는 올바른 인증코드를 입력해도.. 이미 지나간 인증코드가 되버려 맞지 않는다고 나온다..

    생각되는 해결책으로는.. 그냥 세션값을 하지 말고.. 시간관련 함수로 hash값을 생성해서 일정기간(5~10분정도?) 동일한 값이 나오도록..

    이렇게 하면.. 새로 화면을 호출해도.. 일정시간동안은 같은 코드가 나올꺼고, 일정시간 지나면 유효하지 않는 코드가 될꺼고..

    보이는 쪽이나, 받는 쪽이나 같은 hash값을 가지고 확인하면 세션도 필요없고… 하여튼.. 나중에 한번 시도해보련다.

댓글 남기기