민트팝업 보안의 취약점??
페이지 정보
작성자 명예 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 댓글 2건 조회 15,236회 작성일 10-04-14 20:51본문
그대로 노출되어버립니다..
예를들면
http://www.munstar.com/MintUtil/popup.html?m=test&pop_id=11
이 팝업을 레벨 7이상 회원에게만 노출하고싶은데 레벨이 안되거나 비회원이 팝업 아이디의 뒤 숫자만 바꿔가면서 쭈욱 테스트해보면
팝업을 다 얻을 수 있더라구요..
팝업창이 해당주소로 바로 들어가더라도 설정해놓은 레벨이 아니면 경고창과함께 안뜨도록하려면 어떻게 해야하나요???
두번째로, 레벨 1이상 볼수있다 하더라도 팝업 html 안에서 아래와같이 설정하면 해당 구문만은 지정한 레벨만 보이도록 하고싶은데 이건 방법이 없는지요??
<?if($member[mb_level] > 9) {?>
<a class="menuItem" href="/bbs/board.php?bo_table=B49"><font color=#ffffff>그누보드스킨</font></a>
<a class="menuItem" href="/plugin/webhard/webftp"><font color=#ffffff>아작웹하드</font></a>
<? } ?>
|
관련링크
- http://www.munstar.com 5507회 연결
댓글목록
MintState님의 댓글
MintState 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 작성일
하. 별로 그런 문제는 생각하지 않았는데..
우선 첫번째 문제는...
popup.html 파일을 열어서..
if ($data[pop_level] > $member[mb_level]) alert_close('해당 레벨은 볼수 없어요~');
을 추가 해주면 됩니다.
두번째 문제는... 조금 어렵습니다. 레벨에 따라서 구분을 해줘야 하는데.
템플릿정도 이용하면 될것 같습니다.
다만 팝업을 html이나 text를 쓰지 않고 WYSIWYG 에디터를 씁니다. 프로그램이나 html을 모르는 분들을 위해 쉽게 쓸수 있기 때문에 WYSIWYG을 쓰는거죠.
님이 원하시는것은 WYSIWYG을 쓸수 없습니다. WYSIWYG을 써도 되긴하지만 여러가지 문제가 생김니다.
간단히 응용하시려면..
$data[pop_contents] = preg_replace_callback('@\\[LEVEL([^\\]]*)\\](.*)\\[/LEVEL\\]@Usi', 'level_pass', $data[pop_contents]);
function level_pass($matche)
{
global $member;
if (strlen($matche[1]) == 0) {
$text .= $matche[2]; // 혹시 레벨을 지정하지 않는 실수를 할까봐....
} else {
if ($member[mb_level] >= $matche[1]) $text .= $matche[2];
}
return $text;
}
예를들어 "레벨 4이상만 보입니다. [LEVEL 4]레벨4내용[/LEVEL]<br /> 레벨 2이상만 보입니다. [LEVEL 2]레벨2내용[/LEVEL] " 이런식의 내용이 입력 되었다면 레벨 2의 멤버는..
레벨 4이상만 보입니다.
레벨 2이상만 보입니다. 레벨2내용
이런식으로 보입니다. 지정레벨 이상만 내용을 볼수 있다는 거죠..
명예님의 댓글
명예 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 작성일
popup.html
<?
include_once("./_common.php");
include_once("$g4[path]/MintUtil/MintLib.php");
if(isDbTable($Mint[DB_popup]) != 1) {
alert_close($Mint[name].'(POPUP) DB가 생성되지 않았습니다.');
}
$sql = "select * from $Mint[DB_popup] where pop_id='$pop_id' ";
$sel = mysql_query($sql);
$data = mysql_fetch_array($sel);
$cookie_id = "popup_".$data[pop_id];
$data[pop_contents] = preg_replace_callback('@\\[LEVEL([^\\]]*)\\](.*)\\[/LEVEL\\]@Usi', 'level_pass', $data[pop_contents]);
function level_pass($matche)
{
global $member;
if (strlen($matche[1]) == 0) {
$text .= $matche[2]; // 혹시 레벨을 지정하지 않는 실수를 할까봐....
} else {
if ($member[mb_level] >= $matche[1]) $text .= $matche[2];
}
return $text;
}
if ($data[pop_level] > $member[mb_level]) alert_close('해당 레벨은 볼수 없어요~');
?>
이렇게 넣고 테스트했더니 말씀해주신것처럼 해결이 되었습니다^^ 감사합니다.