제목그대로 ...
<!-- 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이 적용되는지 궁금합니다!
주소창에는 자물쇠가 걸리는게 안보여서 의아하네요 안걸린게 아닌지...싶어서요 ...ㅎㅎ;;
혹시 ... 안걸렸다면 정상적으로 걸리게 하는 방법이라도 좀 구하고 싶습니다...
댓글 22
SSL을 선택적으로 사용하신다면 별도의 로그인 페이지를 거치도록 하는 방법이 가장 안전합니다. 위젯이 포함된 페이지 자체가 보안이 안된다면 반쪽자리 보안에 불과하거든요. 그러나 아이디와 비번을 서버로 전송하는 단계에서도 SSL이 적용되지 않는다면 그건 꽤 심각한 버그인 것 같아요. 이슈 등록해 봐야겠습니다.
다른 페이지에서 위젯으로 로그인하면 암호화 없이 그냥 전송됩니다. 방금 웹지기님 사이트에서도 테스트해 봤는데, 메인화면 왼쪽의 위젯에서 로그인하면 암호화가 전혀 안 되네요 ㅠㅠ
이건 수많은 웹마스터분들을 범법자로 만드는 거라... 급패치 작성중입니다.
xedition 레이아웃에 기본 포함된 로그인 팝업창에는 버그가 있어서 주소가 항상 현재 페이지의 SSL 적용 여부를 따라갑니다. SSL이 적용되지 않은 페이지에서 로그인하면 암호화 없이 전송되고, SSL이 적용된 페이지에서는 암호화가 되지요. 이건 레이아웃을 수정해야 하고요...
코어와 함께 배포되는 login_info 위젯 스킨에는 버그가 없는 것 같지만, 다른 스킨을 사용하신다면 버그가 있을 수도 있습니다. 웹지기님 사이트의 메인화면에서 사용되는 로그인 위젯 스킨에는 버그가 있네요. form action에 procMemberLogin이라는 단어가 포함되어 있지 않고 그냥 getUrl()만 호출할 경우 버그가 있는 것입니다.
<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>
웹지기님 사이트의 로그인 위젯은 XEDITION과 무관하기 때문에 그냥 땜빵하셔야 합니다. <form action="/" 이 부분을 제 패치를 참고해서 수정해 주세요. 절대경로가 들어가야 하거든요.
아 밑에 레이아웃 고치는 것도 있었군요. 근데 봐도 잘 모르겠는게 함정입니다 ㅜㅡ
<form action="{getUrl('', 'act', 'procMemberLogin')}" method="post" ruleset="@login" id="fo_login_widget">
<input type="hidden" name="success_return_url" value="{getCurrentPageUrl()}" />
이렇게만 고치면 될까요???
getCurrentPageUrl()은 돌아오는 주소를 좀더 정확하게 처리하기 위해 패치에 임의로 추가한 함수입니다. XE에서 이 함수를 채택하지 않기로 할 경우 문제가 생길 수 있으니, 그 부분은 그대로 두고 action만 수정해서 쓰세요.
+ * 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 에 넣는 것도 하나의 방법이 되나요? 코어에서 반영이 안될 경우에요.
네, 그렇지만 안 넣으셔도 작동에는 지장 없어요. 로그인 직후 열람하는 페이지에 SSL이 적용된다는 차이뿐...
아.. config.inc.php 랑 햇깔렸네요. 저희는 직후 열람페이지가 SSL로 적용되는 것보다는 non-ssl로 되는게 좋을거 같아서 말씀하신 내용 코어에 적용해 봐야 할 듯합니다. 감사합니다.
func.user.inc.php
이파일을 만들어서 사용하면 코어업데이트때 수정되는것을 막을 수 있나요?
config.inc.php 와 동일하게 사용이 가능한지 궁금해서요.
그 대신 config.user.inc.php에 넣으면 되긴 한데, 이게 func.inc.php보다 먼저 로딩되기 때문에 나중에 함수가 중복으로 선언되었다고 에러를 뿜을지도 모릅니다. 먼저 로딩되니까 function_exists로 체크할 수도 없고요. 따라서 config.user.inc.php에 넣되, 함수 이름은 적당히 바꾸시는게 좋겠습니다.
음..
https://github.com/kijin/xe-core/commit/4cbf201cbd7d7fe4c98f9e4a8d70d888ba3c4b49
에 나온 대로 적용을 해 봤어요,,
육안으로 별달리 변한? 부분은 안보여서..
로그인위젯에도 ssl이 적용되었는지 확인해 보려면 주소창보면되나요...? 자물쇠 이런거 표시안되어있어서 원래 티가안나는건지 잘모르겠어서요,,,ㅎㅎ;;