제목그대로 ...

 

<!-- Login widget -->
<section cond="$layout_info->use_login_widget != 'N'" class="login_widget" style="display:none"|cond="$XE_VALIDATOR_ID != 'layouts/xedition/layout/1' || !$XE_VALIDATOR_MESSAGE">
    <load target="./css/widget.login.css" />
    <div class="ly_dimmed"></div>

 

레이아웃에 이렇게 되어서 구동되는 로그인위젯이요!

그걸 사용하며, ssl 선택적으로 적용 옵션을 걸었을 때, 이 위젯에도 ssl이 적용되는지 궁금합니다!

 

주소창에는 자물쇠가 걸리는게 안보여서 의아하네요 안걸린게 아닌지...싶어서요 ...ㅎㅎ;;

혹시 ... 안걸렸다면 정상적으로 걸리게 하는 방법이라도 좀 구하고 싶습니다...

  • profile
    아니요, 선택적 사용 상태에서는 로그인 위젯에 SSL이 적용되지 않습니다. (인용하신 코드보다 조금 아래에 getUrl 함수를 호출하는 부분이 문제입니다.)

    SSL을 선택적으로 사용하신다면 별도의 로그인 페이지를 거치도록 하는 방법이 가장 안전합니다. 위젯이 포함된 페이지 자체가 보안이 안된다면 반쪽자리 보안에 불과하거든요. 그러나 아이디와 비번을 서버로 전송하는 단계에서도 SSL이 적용되지 않는다면 그건 꽤 심각한 버그인 것 같아요. 이슈 등록해 봐야겠습니다.
  • profile profile
    약간 혼동이 오는데요. 실제전송단계에서는 암화화 전송을 한다는 것이죠?? 저희도 선택적 사용을 하고 있어서요...
  • profile profile
    로그인 페이지로 넘어가서 로그인하면 암호화 전송이 되어요.

    다른 페이지에서 위젯으로 로그인하면 암호화 없이 그냥 전송됩니다. 방금 웹지기님 사이트에서도 테스트해 봤는데, 메인화면 왼쪽의 위젯에서 로그인하면 암호화가 전혀 안 되네요 ㅠㅠ

    이건 수많은 웹마스터분들을 범법자로 만드는 거라... 급패치 작성중입니다.
  • profile profile
    아.. 찜찜했는데 그랬군요. 코어에서 처리해준다고 들어서 그런줄 알고 있었습니다. 패치라면 코어패치죠??
  • profile profile
    기본레이아웃이니 그렇겠지요.
  • profile profile
    로그인 정보를 전송하는 주소를 결정하는 것은 각 위젯의 몫입니다.

    xedition 레이아웃에 기본 포함된 로그인 팝업창에는 버그가 있어서 주소가 항상 현재 페이지의 SSL 적용 여부를 따라갑니다. SSL이 적용되지 않은 페이지에서 로그인하면 암호화 없이 전송되고, SSL이 적용된 페이지에서는 암호화가 되지요. 이건 레이아웃을 수정해야 하고요...

    코어와 함께 배포되는 login_info 위젯 스킨에는 버그가 없는 것 같지만, 다른 스킨을 사용하신다면 버그가 있을 수도 있습니다. 웹지기님 사이트의 메인화면에서 사용되는 로그인 위젯 스킨에는 버그가 있네요. form action에 procMemberLogin이라는 단어가 포함되어 있지 않고 그냥 getUrl()만 호출할 경우 버그가 있는 것입니다.
  • profile profile

    <form action="/" method="post" ruleset="@login" id="fo_login_widget">
    <input type="hidden" name="success_return_url" value="{getUrl('act', '')}" />
    <input type="hidden" name="act" value="procMemberLogin" />
    <div class="top_title">
    {$lang->cmd_login}
    </div>
    <div class="idpwWrap">
    <div class="idpw">
    <input name="user_id" type="text" title="e-mail" onfocus="this.className='emailOn';" onblur="if (!this.value) this.className='emailOff'" class="emailOff" />
    <input name="password" type="password" title="password" onfocus="this.className='passOn';" onblur="if (!this.value) this.className='passOff'" class="passOff" />
    </div>
    <p class="save">
    <input type="checkbox" name="keep_signed" id="keepid" value="Y" onclick="return confirm(keep_signed_msg);" />
    <label for="keepid" title="{$lang->keep_signed}" >{$lang->keep_signed}</label>
    </p>
    <p class="login"><input type="image" src="/images/{$colorset}/buttonLogin.gif" alt="login" title="login" /></p>
    </div>

    <ul class="help">
    <li class="first-child"><a href="{getUrl('act','dispMemberSignUpForm')}">{$lang->cmd_signup}</a></li>
    <li><a href="{getUrl('act','dispMemberFindAccount')}">{$lang->cmd_find_member_account}</a></li>
    </ul>
    <p class="re_mail"><a href="{getUrl('act','dispMemberResendAuthMail')}">{$lang->cmd_resend_auth_mail}</a></p>
    </form>

  • profile profile
    스킨의 일부를 아래 적어 보았는데요. 수정해서 보완이 가능할까요?
  • profile profile
    https://github.com/xpressengine/xe-core/pull/1780
  • profile profile
    오... 해당 PR로 모든 웹사이트에서 해결이 되는건가요??
  • profile profile
    레이아웃은 고쳐서 쓰는 경우가 많기 때문에, 대부분의 기존 사이트는 적용이 어려울지도 모릅니다. 패치된 부분을 참고해서 수정하면 되겠지만 거기까지 신경쓰는 사람은 별로 없겠죠.

    웹지기님 사이트의 로그인 위젯은 XEDITION과 무관하기 때문에 그냥 땜빵하셔야 합니다. <form action="/" 이 부분을 제 패치를 참고해서 수정해 주세요. 절대경로가 들어가야 하거든요.
  • profile profile

    아 밑에 레이아웃 고치는 것도 있었군요. 근데 봐도 잘 모르겠는게 함정입니다 ㅜㅡ

  • profile profile

    <form action="{getUrl('', 'act', 'procMemberLogin')}" method="post" ruleset="@login" id="fo_login_widget">
    <input type="hidden" name="success_return_url" value="{getCurrentPageUrl()}" />

     

    이렇게만 고치면 될까요???

  • profile profile

    getCurrentPageUrl()은 돌아오는 주소를 좀더 정확하게 처리하기 위해 패치에 임의로 추가한 함수입니다. XE에서 이 함수를 채택하지 않기로 할 경우 문제가 생길 수 있으니, 그 부분은 그대로 두고 action만 수정해서 쓰세요.

  • profile profile

    + * Return the exact url of the current page
    + *
    + * @return string
    + */
    +function getCurrentPageUrl()
    +{
    + $protocol = $_SERVER['HTTPS'] == 'on' ? 'https://' : 'http://';
    + $url = $protocol . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
    + return htmlspecialchars($url, ENT_COMPAT, 'UTF-8', FALSE);
    +}
    +
    +/**

    위 내용을 func.user.inc.php 에 넣는 것도 하나의 방법이 되나요? 코어에서 반영이 안될 경우에요.

  • profile profile

    네, 그렇지만 안 넣으셔도 작동에는 지장 없어요. 로그인 직후 열람하는 페이지에 SSL이 적용된다는 차이뿐...

  • profile profile

    아.. config.inc.php 랑 햇깔렸네요. 저희는 직후 열람페이지가 SSL로 적용되는 것보다는 non-ssl로 되는게 좋을거 같아서 말씀하신 내용 코어에 적용해 봐야 할 듯합니다. 감사합니다.

  • profile profile
    감사합니다. PR대로 적용해 보았습니다. 자꾸 귀찮게 질문드려 죄송합니다.

    func.user.inc.php

    이파일을 만들어서 사용하면 코어업데이트때 수정되는것을 막을 수 있나요?
    config.inc.php 와 동일하게 사용이 가능한지 궁금해서요.
  • profile profile
    아뇨, func.user.inc.php라는 파일은 없습니다.

    그 대신 config.user.inc.php에 넣으면 되긴 한데, 이게 func.inc.php보다 먼저 로딩되기 때문에 나중에 함수가 중복으로 선언되었다고 에러를 뿜을지도 모릅니다. 먼저 로딩되니까 function_exists로 체크할 수도 없고요. 따라서 config.user.inc.php에 넣되, 함수 이름은 적당히 바꾸시는게 좋겠습니다.
  • profile profile
    답변 감사합니다. 많이 배우게 되네요.
  • profile profile
    해당 PR이 1.8.14에 적용되었네요. 저는 이미 Full SSL로 전환했지만요 ㅋ
  • ?

    음..

    https://github.com/kijin/xe-core/commit/4cbf201cbd7d7fe4c98f9e4a8d70d888ba3c4b49

    에 나온 대로 적용을 해 봤어요,, 

    육안으로 별달리 변한? 부분은 안보여서..

    로그인위젯에도 ssl이 적용되었는지 확인해 보려면 주소창보면되나요...? 자물쇠 이런거 표시안되어있어서 원래 티가안나는건지 잘모르겠어서요,,,ㅎㅎ;;