CI 묻고 답하기

제목 중요한 버그 질문..
글쓴이 ricky 작성시각 2010/01/21 16:14:44
댓글 : 8 추천 : 0 스크랩 : 0 조회수 : 29150   RSS
제가 간단한 게시판을 만들었는데 게시판을 연후 브라우저에서 원소스를 html로 저장한후 저장한 html을 켜서 글쓰기가 가능하던데 이부분을 어떻게 처리해야 하죠 ?
그리고 현재 포럼에도 그런 버그가 있는걸로 알고 있습니다.
저는 아직 초보라 어떻게 대처해야 할지 잘몰라서 .. 빠른 답변 부탁드립니다.
 다음글 [초보]레이아웃에 값 넘기기.. (2)
 이전글 편집툴 질문 (3)

댓글

변종원(웅파) / 2010/01/21 16:22:17 / 추천 0
질문이 이해가 잘 되지 않네요. ^^;

fckeditor에서 소스 붙여넣기가 없어서 그러신건지?
ricky / 2010/01/21 16:45:56 / 추천 0
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
<meta name="description" content="CodeIgniter 한국사용자포럼"/>
<meta name="keywords" content="CodeIgniter, 한국사용자포럼"/>
<meta name="author" content="author"/>
<link rel="stylesheet" type="text/css" href="http://www.codeigniter-kr.org/include/css/default.css" media="screen"/>
<link href="http://www.codeigniter-kr.org/include/css/jquery-ui-1.7.1.custom.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="http://www.codeigniter-kr.org/include/js/common.js"></script>
<script type="text/javascript" src="http://www.codeigniter-kr.org/include/js/jquery-1.3.2.min.js"></script>
<script type="text/javascript"  src="http://www.codeigniter-kr.org/include/js/jquery-ui-1.7.1.custom.min.js"></script>
<script type="text/javascript"  src="http://www.codeigniter-kr.org/include/js/jquery.framedialog.js"></script>
<script type="text/javascript" src="http://www.codeigniter-kr.org/include/js/jquery.jScale.js"></script>
<title>CodeIgniter 한국사용자포럼</title>
</head>
 
<body>
<div class="content0"><form action="http://www.codeigniter-kr.org//qna/write/0" method="post" name="write_post" enctype="multipart/form-data">
<table width="98%">
<tr>
	<td width="80">글 제목</td>
	<td align="left"><input type="text" value="" size="50" name="subject" />
		</td>
</tr>
<tr>
	<td>글 내용</td>
	<td align="left"><input type="hidden" id="contents" name="contents" value="111" style="display:none" /><input type="hidden" id="contents___Config" value="" style="display:none" /><iframe id="contents___Frame" src="http://www.codeigniter-kr.org/include/fckeditor/editor/fckeditor.html?InstanceName=contents&Toolbar=MyToolbar" width="700" height="300" frameborder="0" scrolling="no"></iframe></td>
</tr>
<tr>
	<td>Tag</td>
	<td align="left"><input type="text" value="" size="50" name="tags" /> (예 : 제목, 한국, 홍수)</td>
</tr>
<tr>
	<td>파일첨부</td>
	<td align="left"><input type="file" name="userfile" /> (7z|tgz|tar|gz|zip|rar|pdf|ppt|xls|docx|xlsx|pptx)</td>
</tr>
<tr>
	<td colspan="2" align="center"></td>
</tr>
<tr>
	<td colspan="2" align="center"><input type="submit" value="등록" /></td>
</tr>
</table>
</form></div>
 
<!--구글 analytics-->
<script type="text/javascript"> 
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-2977920-4");
pageTracker._trackPageview();
} catch(err) {}</script>
<!--구글 analytics-->
</body>
 
</html>
이것을 html로 바탕화면에 저장하시고 열어서 글쓰기를 해보세요.
그러면 이해가 될겁니다.
변종원(웅파) / 2010/01/21 16:57:07 / 추천 0
<form action="http://www.codeigniter-kr.org//qna/write/0" method="post" name="write_post" enctype="multipart/form-data">
아. 무슨 말씀인지 알겠네요. 버그인지 아닌지는 애매모호하네요. ㅋ
어차피 로그인 과정을 거쳐야 하는 부분이라 버그라고 보기는 좀 그렇네요

위 소스의 action 부분을 수정하시면 됩니다. 풀 주소가 있기때문에 post전송이 되는거니까
/qna/write/0 으로 바꿔주시면 웹에서만 가능합니다.

ricky / 2010/01/21 17:02:51 / 추천 0

하지만 그럴경우에 html 아는분이면 자기절로 수정해서 javascript로 된 글자제한 권한이라던가 그런 것들을 풀어서 글등록할수 있잖아요.
어떻게 하면 외부에서 이렇게 글쓰는것을 방지 못할가요 ??

변종원(웅파) / 2010/01/21 17:14:05 / 추천 0
referer 체크하시면 됩니다. (이런 경우도 변조하면 되기는 하지만 없는 것보다는 낫습니다)

기본적으로 글쓰기를 누르면 페이지이동을 할테고 리퍼러값은 바로 전 주소가 되겠죠.
저장했다가 올리면 리퍼러 값이 없거나 할겁니다.
ricky / 2010/01/21 17:43:28 / 추천 0

어떻게 하면 되는지 조금만 자세하게 알려줄수 없을가요 ???
잘 이해가 안되서요 .고맙습니다~

케이든 / 2010/01/22 02:39:24 / 추천 0
리퍼러를 체크하거나 hidden으로 랜덤값 넣은후 받는쪽에서 값 체크해도 됩니다

폼 생성할떄 랜덤스트링을 만든후 플래쉬 세션데이터로 저장하고

hidden으로 폼에 넣은후, 받는 페이지에서 히든값과 세션데이터를 비교하면 되겠지요

captcha 와 비슷한 개념으로 생각하시면 됩니다

사월 / 2010/01/23 01:36:10 / 추천 0
이런 방식을 로봇이 하는걸 막기 위해 생긴게 captcha 입니다.
로그인을 하지 않는 게시판이나 덧글에 많이 쓰이고있구요.

위에 올리신 HTML 소스로 글이 작성되는건 브라우저에 로그인 세션이 남아있어서 가능한것이고
특별히 문제될 점은 없을겁니다. 버그는 아닙니다;;

저도 referer를 사용하고 있고,
글쓰기 처리 페이지(form을 받는 콘트롤러)에서 referer를 글쓰기 페이지의 원래 URL과 비교 검사하시면 됩니다.

if (!isset($_SERVER['HTTP_REFERER']) || preg_match($pattern, $_SERVER['HTTP_REFERER']) == 0)

$pattern 에는 글쓰기 페이지 URL 을 정규식으로 넣어주면 되고, 고정 URL 이라면 preg_match 안쓰고 strstr() 같은걸로 하셔도 됩니다.
그리고 CI 에서는 $this->input->server('HTTP_REFERER') 라는게 있으니 isset() 안하고 바로 이걸로 확인하셔도 됩니다.
http://codeigniter.com/user_guide/libraries/input.html