안녕하세요~
예전에도 한차례 질문드렸지만 답이 없어서 포기했었는데..
혹시나 해서 한번더 질문드리고 싶어요 ㅠㅠ
제가 질문답변 게시판을 많이 이용중입니다. 그래서 확장변수를 통해 완료,대기로 내용이 보여져요.
다만 이상하게 짧은주소로는 안된다는거예요... 긴주소로하면 작동이 되지만 짧은주소는 오류를 뿜네요
제발 한번만 봐주셔요 ㅠ
<block cond="$logged_info->member_srl==$oDocument->get('member_srl')||$logged_info->is_admin=='Y'">
{@ $url = getenv('REQUEST_URI')}
<block cond="$click">
{@
$oDB = &DB::getInstance();
$query = $oDB->_query('update xe_document_extra_vars set value = "'.$click.'" where document_srl = '.$document_srl.' and module_srl = '.$module_info->module_srl.' and eid = "qst"');
$url = preg_replace("/\&click\=답변완료|\&click\=대기/", "", $url);
}
<script>location.href="{str_replace('amp;', '', getUrl('click', ''))}"</script>
</block>
<a onClick="location.href='{$url}&click=답변완료'">완료</a>
<a onClick="location.href='{$url}&click=대기'">대기</a>
</block>
짧은주소에도 이용이 되게 수정좀 부탁드려요~
주소에 "click=답변완료" 또는 "click=대기"가 들어 있는지 확인하는 것 같은데요.
짧은주소라면 그런 지저분한 변수은 당연히 안 붙는 거 아닌가요?
아니면 짧은주소 뒤에 임의로 붙여서 쓰시는 건가요?
짧은주소 뒤에 임의로 붙여서 쓰신다고 가정하고... 아무튼 몇 가지 문제가 있습니다.
1. 주소에 한글을 넣으면 REQUEST_URI에서는 urlencode된 상태로 전달됩니다. "click=대기"라고 붙이면
실제로 서버에서는 "click=%EB%8C%80%EA%B8%B0"로 보이지요.
따라서 저런 정규식이 먹힐 리가 없습니다.
2. 주소에 "click=대기"라고 붙이면 템플릿에서 $click이라는 변수에 이미 "대기"라는 값이 들어가 있습니다.
따라서 REQUEST_URI를 뜯어서 정규식으로 분석하고 자시고 할 필요가 없습니다.
3. 짧은주소 뒤에 "click=대기"라는 값을 임의로 붙였다면 "도메인/mid/1234?click=대기"가 됩니다.
주소에 붙이는 첫 번째 변수는 &가 아니라 ?로 구분된다는 점을 기억하세요.
4. location.href 주소를 생성하는 것도 마찬가지입니다. 상황에 따라 &와 ?를 적절히 사용하지 못하면
이상한 주소가 나옵니다. 위에서 쓴 것처럼 getUrl 함수를 사용하여 자동으로 맞춰지도록 하세요.
4. SQL 인젝션 공격하기 딱 좋아 보이네요.