회원가입 CSRF 이미지 안나올때... 정보
회원가입 CSRF 이미지 안나올때...본문
우선 이방법은 제가 이것 저것 전부~ 실험하다가 마지막 방법으로 선택한 겁니다.
물론 제가 이계통 지식이 있는 사람은 아닙니다만.
지식은 없지만 대범한 실험정신과 끈기와 인내와 피와 땀 아무튼 그밖에 등등등의
성과로 이방법을 알아냈습니다.
우선 제가 격은 CSRF에 대한 문제에 대하여 사례를 말씀드려야 겠네요.
어느날 잘되던 CSRF가 갑자기 이미지가 안나오는 사태가 발생되었습니다.
안나오는 곳은 회원가입 부분의 CSRF 입니다. 다른곳은 나오더라구요.
이곳 그 어느곳을 뒤져도.. 명쾌한 해답이라기보다 제 상황에 맞는 해답을 찾을 수가 없더라구요
이곳 활용팀에서 나오는 방법들을 총 동원하였지만 결국 나오진 않았습니다.
그래서 선택한게 . zmSpamFree 입니다.
나름 괜찮 더군요 이렇게 CSRF에 관한 문제가 일달락 되는듯 했습니다만.
제 사이트의 어느 회원분의 제보로 아직 사태가 끝나지 않았음을 인지합니다.
zmSpamFree의 CSRF 이미지는 출력이 잘되지만 그 결과값을 올바르게 입력하여도
가끔 틀렸다고 나오는 경우가 발생된것 입니다.
이곳 사이트에 문의한 결과 해결방책의 하나로 "AJAX 검증코드" 를 추천받았으나
AJAX 검증코드를 적용하여도 문제는 마찮가지 였습니다.
거기다 회원들에 따라서 맞게 적어도 틀렸다 나오는 확률이 높고 낮음이 명확히 차이나는 분도
계셔서 어쩔수 없이 다시 그누보드 기본 CSRF를 고쳐야 하는 쪽으로 가닥을 잡아야 했습니다.
뭐 이런겁니다. (zmSpamFree가 문제있다는게 아니고 제가 지니고 있던 문제가 심각했던것)
기본 모티브는 그누보드 기본게시판의 write.skin.php CSRF 소스코드를 가져오는 겁니다.
즉 회원가입의 CSRF에 이미지는 안나와도 게시판에 CSRF는 나온다는 가정하인겁니다.
그럼 이제 시작하겠습니다!!!!
먼저 /public_html/gnuboard/skin/member/basic 폴더로 가주세요
그리고 register_form.skin.php 를 여십시오.
아래 소스를 찾으셔서
<td width="160" height="28" class=m_title>
<img id='kcaptcha_image' />
</td>
아래 소스로 바꿔주세요.
<td width="160" height="28" class=m_title>
<img id='kcaptcha_image' border='0' width=120 height=60 onclick="imageClick();" style="cursor:pointer;" title="글자가 잘안보이는 경우 클릭하시면 새로운 글자가 나옵니다.">
</td>
아래 소스를 찾으셔서
<td class=m_padding>
<input type=input class=ed size=10 name=wr_key itemname="자동등록방지" required> 왼쪽의 글자를 입력하세요.
</td>
아래소스로 바꿔주세요.
<td><input class='ed' type=input size=10 name=wr_key itemname="자동등록방지" required> 왼쪽의 글자를 입력하세요.
</td>
아래 소스를 찾으셔서
<script language="Javascript">
Form.focusFirstElement('fregisterform');
// submit 최종 폼체크
function fregisterform_submit(f)
{
// 회원아이디 검사
위에 소스 맨 위에 아래 소스를 추가해주세요
<script type="text/javascript"> var md5_norobot_key = ''; </script>
<script type="text/javascript" src="<?="$g4[path]/js/prototype.js"?>"></script>
<script type="text/javascript">
function imageClick() {
var url = "<?=$g4[bbs_path]?>/kcaptcha_session.php";
var para = "";
var myAjax = new Ajax.Request(
url,
{
method: 'post',
asynchronous: true,
parameters: para,
onComplete: imageClickResult
});
}
function imageClickResult(req) {
var result = req.responseText;
var img = document.createElement("IMG");
img.setAttribute("src", "<?=$g4[bbs_path]?>/kcaptcha_image.php?t=" + (new Date).getTime());
document.getElementById('kcaptcha_image').src = img.getAttribute('src');
md5_norobot_key = result;
}
<? if ($is_member) { ?>Event.observe(window, "load", imageClick);<? } ?>
</script>
이상입니다. 참고로 제소스 기준으로 한거라 약간 이상한 건더기가
붙어있긴 합니다만. 되긴 될겁니다.
혹시 저처럼 골머리 썩고 소스코드 한줄씩 지우면서 확인하시는 계신분이 있으실거
같아서 완벽한 해결책이라 생각은 안되지만
조금이라도 도움이 되고싶어 적어봤습니다.
~~~
1
댓글 3개
그게 더 안정적이고 좋을 겁니다.
zmSpamFree의 경우에는 불당팩에서 얼마전에 해당 문제를
완전히 clear하게 ajax 코드를 수정했습니다.

2. GD 라이브러리 설치 유무
3. jquery 또는 prototype 사용가능 유무
