<?xml version="1.0" encoding="UTF-8" ?><feed xmlns="http://www.w3.org/2005/Atom">
	<title type="text">웹마스터 팁</title>
		<updated>2017-02-08T18:55:14+09:00</updated>
	<id>https://www.xpressengine.com/tip/atom</id>
	<link rel="alternate" type="text/html" hreflang="ko" href="https://www.xpressengine.com/tip"/>
	<link rel="self" type="application/atom+xml" href="https://www.xpressengine.com/tip/atom"/>
	<generator uri="http://www.xpressengine.com/">XpressEngine</generator>
   <entry>
		<title><![CDATA[인스타그램 해시태그 회원가입 없이 끌어오기]]></title>
		<id>https://www.xpressengine.com/23209661</id>
		<published>2017-02-08T14:46:26+09:00</published>
		<updated>2017-02-08T14:46:26+09:00</updated>
		<link rel="alternate" type="text/html" href="https://www.xpressengine.com/23209661"/>
		<link rel="replies" type="text/html" href="https://www.xpressengine.com/23209661#comment"/>
		<author>
			<name><![CDATA[외인]]></name>
						<uri>http://musecom.net</uri>
					</author>
				<content type="html"><![CDATA[<div class="xe_content"><p><br />
&lt;?php </p>

<p>function scrape_insta_hash($tag) {</p>

<p>    $insta_source = file_get_contents('https://www.instagram.com/explore/tags/'.$tag.'/'); // instagrame tag url</p>

<p>    $shards = explode('window._sharedData = ', $insta_source);</p>

<p>    $insta_json = explode(';&lt;/script&gt;', $shards[1]); </p>

<p>    $insta_array = json_decode($insta_json[0], TRUE);</p>

<p>    return $insta_array; </p>

<p>}</p>

<p>$tag = 'instargram'; </p>

<p>$results_array = scrape_insta_hash($tag);</p>

<p>$limit = 30; </p>

<p>$image_array= array(); </p>

<p>    for ($i=0; $i &lt; $limit; $i++) { </p>

<p>        @$latest_array = $results_array['entry_data']['TagPage'][0]['tag']['media']['nodes'][$i];</p>

<p>         $image_data  = '&lt;img src="'.$latest_array['thumbnail_src'].'"&gt;';</p>

<p>         //$image_data  = '&lt;img src="'.$latest_array['display_src'].'"&gt;'; </p>

<p>        array_push($image_array, $image_data);</p>

<p>    }</p>

<p>    foreach ($image_array as $image) {</p>

<p>        echo $image;</p>

<p>    }</p>

<p>?&gt;</p></div>]]></content>
						<category term="해시태그"/>
				<category term="인스타그램"/>
				
	</entry>
   <entry>
		<title><![CDATA[jQuery 플러그인 모음]]></title>
		<id>https://www.xpressengine.com/23207263</id>
		<published>2017-01-25T11:07:39+09:00</published>
		<updated>2017-01-25T11:07:39+09:00</updated>
		<link rel="alternate" type="text/html" href="https://www.xpressengine.com/23207263"/>
		<link rel="replies" type="text/html" href="https://www.xpressengine.com/23207263#comment"/>
		<author>
			<name><![CDATA[Ansi™]]></name>
					</author>
				<content type="html"><![CDATA[<div class="xe_content"><p></p>

<p><font color="#333333">jquery plugin 모음</font></p>

<p> </p>

<p>jQuery</p>

<p><a href="http://flesler.blogspot.com/" target="_blank"><u><font color="#0066cc">Serial Scroll</font></u></a></p>

<ul><li><b><font color="#e31600">각종 슬라이딩</font></b></li>
	<li>위치 다양</li>
	<li>부드러움</li>
	<li>아이템 랜덤으로 섞기</li>
</ul><p><a href="http://pupunzi.com/#mb.components/components.html" target="_blank"><u><font color="#0066cc">mb.jQuery.components!</font></u></a></p>

<ul><li><b><font color="#e31600">메뉴</font></b>

	<ul><li>다중 카테고리</li>
		<li>멀티플 메뉴</li>
		<li>이미지 포함</li>
		<li>메뉴가 나타나고 사라질 때 부드러운 페이드인 페이드아웃 효과</li>
	</ul></li>
	<li><b><font color="#e31600">콘테이너</font></b>
	<ul><li>자유로운 이동, 마치 윈도우즈 프로그램 창을 다루는 느낌)</li>
		<li>부드러운 효과</li>
	</ul></li>
	<li><b><font color="#e31600">이미지 갤러리</font></b>
	<ul><li>DOM, 팝업, 이미지 나열</li>
		<li>이미지 로등시 부러운 효과</li>
	</ul></li>
	<li><b><font color="#e31600">미디어 임베더</font></b>
	<ul><li>치환자를 사용하여 아주 간단하게 코딩</li>
	</ul></li>
	<li><b><font color="#e31600">미디어 임베더 2</font></b>
	<ul><li>백그라운드, DOM에 유트브 등의 무비 넣을 수 있음</li>
	</ul></li>
	<li><b><font color="#e31600">마스크 이미지 갤러리</font></b>
	<ul><li>프레임을 이용한 이미지 갤러리</li>
	</ul></li>
	<li><b><font color="#e31600">탭</font></b>
	<ul><li>부드러운 효과</li>
		<li>손쉽게 탭 삽입 가능</li>
	</ul></li>
	<li><b><font color="#e31600">이미지 네비게이터</font></b>
	<ul><li>프레임을 이용해서 마스크를 씌운 듯 이미지 일부 노출</li>
		<li>마우스 드래그로 숨겨진 이미지 확인</li>
	</ul></li>
	<li><b><font color="#e31600">툴팁</font></b>
	<ul><li>부드러운 효과</li>
		<li>미려한 디자인</li>
	</ul></li>
	<li><b><font color="#e31600">스크롤 (배너)</font></b>
	<ul><li>단계를 주거나 원하는 위치로 손쉽게 스크롤</li>
		<li>스크롤을 멈추거나 다시 시작 가능</li>
	</ul></li>
	<li><b><font color="#e31600">문서 확장</font></b>
	<ul><li>새로운 장소에 문서를 만들고 스크롤 효과로 나탄나거나 숨김</li>
	</ul></li>
	<li><b><font color="#e31600">텍스트</font></b>
	<ul><li>텍스트 흐름을 세로로 전환</li>
	</ul></li>
</ul><p><a href="http://nettuts.s3.amazonaws.com/358_jquery/example%20files/all-examples.html" target="_blank" title="[http://nettuts.s3.amazonaws.com/358_jquery/example%20files/all-examples.html]로 이동합니다."><u><font color="#0066cc">Dock and Stack</font></u></a></p>

<ul><li><b><font color="#e31600">맥 아이콘 효과</font></b></li>
	<li>마우스로 선택한 아이콘을 중심으로 크기 전환</li>
	<li>마우스로 클릭시 아이콘 나타남</li>
</ul><p><a href="http://bassistance.de/jquery-plugins/" target="_blank" title="[http://bassistance.de/jquery-plugins/]로 이동합니다."><u><font color="#0066cc">bassistance.de</font></u></a></p>

<ul><li><b><font color="#e31600">자동완성</font></b>

	<ul><li>정해진 폼에서 정해진 값중 하나를 입력 할 때 문자열 자동 완성</li>
	</ul></li>
	<li><b><font color="#e31600">메시지</font></b>
	<ul><li>특정 값을 화면에 출력</li>
		<li>일정시간 흐른후 사라짐</li>
		<li>부드러운 효과</li>
	</ul></li>
	<li><b><font color="#e31600">비밀번호 유효성 검사</font></b>
	<ul><li>값을 입력시 실시간으로 비밀번호의 값이 정당한지 출력</li>
	</ul></li>
	<li><b><font color="#e31600">툴팁</font></b>
	<ul><li>다양한 툽팁 효과</li>
	</ul></li>
	<li><b><font color="#e31600">트리뷰</font></b>
	<ul><li>디렉토리 구조에서처럼 트리모양으로 출력</li>
	</ul></li>
	<li><b><font color="#e31600">유효성 검사</font></b>
	<ul><li>사용자 입력값을 다양하게 검사</li>
	</ul></li>
</ul><p><a href="http://jquery.com/demo/thickbox/" target="_blank" title="[http://jquery.com/demo/thickbox/]로 이동합니다."><u><font color="#0066cc">thickbox</font></u></a></p>

<ul><li><font color="#e31600"><b>이미지 갤러리, 팝업 상자</b></font></li>
	<li>팝업시 주위를 암흑으로 만들어 이미지를 도드라지게 하는 효과</li>
	<li>이미지 로딩 나타냄</li>
</ul><p><a href="http://sorgalla.com/jcarousel/" target="_blank" title="[http://sorgalla.com/jcarousel/]로 이동합니다."><u><font color="#0066cc">jCarousel</font></u></a></p>

<ul><li><b><font color="#e31600">슬라이딩</font></b></li>
	<li>다양하게 슬라이딩을 할 수 있도록 옵션 제공</li>
</ul><p><a href="http://flowplayer.org/tools/demos/index.html" target="_blank" title="[http://flowplayer.org/tools/demos/index.html]로 이동합니다."><u><font color="#0066cc">flowplayer</font></u></a></p>

<ul><li><b><font color="#e31600">탭</font></b></li>
	<li><b><font color="#e31600">툴팁</font></b></li>
	<li><b><font color="#e31600">오버레이</font></b></li>
	<li><b><font color="#e31600">스크롤</font></b></li>
	<li><b><font color="#e31600">유효성검사</font></b></li>
	<li><b><font color="#e31600">범위지정</font></b></li>
	<li><b><font color="#e31600">날짜입력</font></b></li>
	<li><b><font color="#e31600">도드라짐</font></b></li>
	<li><b><font color="#e31600">플래쉬 임베드</font></b></li>
	<li>여러가지 효과 조합
	<ul><li>위의 효과들 여러가지를 동시에 사용함</li>
	</ul></li>
</ul><p><a href="http://markitup.jaysalvat.com/" target="_blank" title="[http://markitup.jaysalvat.com]로 이동합니다."><u><font color="#0066cc">markitup</font></u></a></p>

<ul><li><b><font color="#e31600">HTML 생성기</font></b></li>
	<li>HTMl 코드를 적용시켜 줌</li>
</ul><p><a href="http://gmap.nurtext.de/" target="_blank" title="[http://gmap.nurtext.de/]로 이동합니다."><u><font color="#0066cc">gMap</font></u></a></p>

<ul><li><b><font color="#e31600">구글맵 API</font></b></li>
	<li><a href="" target="_blank" title="[http://http;//cshong.tistory.com/271]로 이동합니다."><u><font color="#0066cc">http;//cshong.tistory.com/271</font></u></a></li>
</ul><p><a href="http://vis.stanford.edu/protovis/" target="_blank" title="[http://vis.stanford.edu/protovis/]로 이동합니다."><u><font color="#0066cc">Protovis</font></u></a></p>

<ul><li><font color="#e31600"><b>그래프</b></font></li>
	<li><a href="http://cshong.tistory.com/270" target="_blank" title="[http://cshong.tistory.com/270]로 이동합니다."><u><font color="#0066cc">http://cshong.tistory.com/270</font></u></a></li>
</ul><p><a href="http://css-tricks.com/jquery-magicline-navigation/" target="_blank" title="[http://css-tricks.com/jquery-magicline-navigation/]로 이동합니다."><u><font color="#0066cc">MagicLine Navigation</font></u></a></p>

<ul><li><b><font color="#e31600">애니메이션 매뉴</font></b></li>
</ul><p><a href="http://www.recoding.it/wp-content/uploads/demos/showcase-demo.htm" target="_blank" title="[http://www.recoding.it/wp-content/uploads/demos/showcase-demo.htm]로 이동합니다."><u><font color="#0066cc">jquery.showcase</font></u></a></p>

<ul><li><b><font color="#e31600">쇼케이스</font></b></li>
</ul><p><a href="http://srobbin.com/blog/jquery-pageslide/" target="_blank" title="[http://srobbin.com/blog/jquery-pageslide/]로 이동합니다."><u><font color="#0066cc">Pageslide</font></u></a></p>

<ul><li><b><font color="#e31600">페이지 슬라이드</font></b></li>
</ul><p><a href="http://galleria.aino.se/" target="_blank" title="[http://galleria.aino.se/]로 이동합니다."><u><font color="#0066cc">Galleria</font></u></a></p>

<ul><li><b><font color="#e31600">풀사이즈 이미지 갤러리</font></b></li>
</ul><p><a href="http://www.dreamcss.com/2009/04/create-beautiful-jquery-sliders.html" target="_blank" title="[http://www.dreamcss.com/2009/04/create-beautiful-jquery-sliders.html]로 이동합니다."><u><font color="#0066cc">Dream Css</font></u></a></p>

<ul><li><b><font color="#e31600">슬라이드 갤러리</font></b></li>
</ul><p><a href="http://fredhq.com/projects/roundabout/" target="_blank" title="[http://fredhq.com/projects/roundabout/]로 이동합니다."><u><font color="#0066cc">Roundabout for jQuery</font></u></a></p>

<ul><li><b><font color="#e31600">회전형 컨텐츠 디스플레이</font></b></li>
</ul><p><a href="http://www.mopstudio.jp/mopBox2descrip.html" target="_blank" title="[http://www.mopstudio.jp/mopBox2descrip.html]로 이동합니다."><u><font color="#0066cc">Mop Box</font></u></a></p>

<ul><li><b><font color="#e31600">자바스크립트 팝업 쇼 박스</font></b></li>
</ul><p><a href="http://www.catchmyfame.com/2009/06/25/jquery-beforeafter-plugin/" target="_blank" title="[http://www.catchmyfame.com/2009/06/25/jquery-beforeafter-plugin/]로 이동합니다."><u><font color="#0066cc">Before/After</font></u></a></p>

<ul><li>두 이미지 두고 좌우 대칭으로 바꾸기 이전과 이후를 보여주는 플러그인</li>
</ul><p><a href="http://www.dailymarkup.com/" target="_blank" title="[http://www.dailymarkup.com/]로 이동합니다."><u><font color="#0066cc">Highlighter</font></u></a></p>

<ul><li><b><font color="#e31600">레이아웃 하이라이트</font></b></li>
</ul><p><a href="http://desandro.com/resources/jquery-masonry/" target="_blank" title="[http://desandro.com/resources/jquery-masonry/]로 이동합니다."><u><font color="#0066cc">Masonry</font></u></a></p>

<ul><li><b><font color="#e31600">레이아웃 정렬</font></b></li>
</ul><p><a href="http://xaviershay.github.com/tufte-graph/" target="_blank" title="[http://xaviershay.github.com/tufte-graph/]로 이동합니다."><u><font color="#0066cc">TufteGraph</font></u></a></p>

<ul><li><b><font color="#e31600">간편 그래프를 생성</font></b></li>
</ul><p><a href="http://code.drewwilson.com/entry/tiptip-jquery-plugin" target="_blank" title="[http://code.drewwilson.com/entry/tiptip-jquery-plugin]로 이동합니다."><u><font color="#0066cc">TipTip</font></u></a></p>

<ul><li><b><font color="#e31600">툴팁</font></b></li>
</ul><p><a href="http://colorpowered.com/colorbox/" target="_blank" title="[http://colorpowered.com/colorbox/]로 이동합니다."><u><font color="#0066cc">ColorBox</font></u></a></p>

<ul><li><b><font color="#e31600">수정이 용이한 LightBox</font></b></li>
</ul><p><a href="http://www.mopstudio.jp/mopSlider2descrip.html" target="_blank" title="[http://www.mopstudio.jp/mopSlider2descrip.html]로 이동합니다."><u><font color="#0066cc">MopSlider 2</font></u></a></p>

<ul><li><b><font color="#e31600">깔끔한 팝업 슬라이더</font></b></li>
</ul><p> </p>

<p> </p>

<p>파일 업로드에 관련된 라이브러리</p>

<p>1. jQuery File Upload<br />
- License : MIT<br />
- 기능 : 프로그래스바, 취소, 파일크기, 삭제, Drag&amp;Drop<br />
- url : <a href="https://github.com/blueimp/jQuery-File-Upload/downloads" target="_blank"><u><font color="#0066cc">https://github.com/blueimp/jQuery-File-Upload/downloads</font></u></a></p>

<p>2. Ajax Upload<br />
- License : GPL2 or LGPL2<br />
- 기능 : 프로그래스바, 취소, 파일크기, Drag&amp;Drop<br />
- url : <a href="https://github.com/valums/file-uploader" target="_blank"><u><font color="#0066cc">https://github.com/valums/file-uploader</font></u></a></p>

<p>3. Uploaddify<br />
- License : MIT<br />
- 기능 : 프로그래스바, 취소, 파일크기<br />
- 제약사항 : 플래쉬 사용 필수<br />
- url : <a href="http://www.uploadify.com/demos/" target="_blank"><u><font color="#0066cc">http://www.uploadify.com/demos/</font></u></a></p>

<p> </p>

<p>기타 jQuery 플러그인 모음</p>

<p><a href="http://lotsofclicks.blogspot.com/2009/10/jquery-35.html" target="_blank"><u><font color="#0066cc">http://lotsofclicks.blogspot.com/2009/10/jquery-35.html</font></u></a></p>

<p><a href="http://wiki.dev.daewoobrenic.co.kr/mediawiki/index.php/JQuery" target="_blank"><u><font color="#0066cc">http://wiki.dev.daewoobrenic.co.kr/mediawiki/index.php/JQuery</font></u></a></p>

<p><a href="http://www.noupe.com/jquery/50-amazing-jquery-examples-part1.html" target="_blank"><u><font color="#0066cc">http://www.noupe.com/jquery/50-amazing-jquery-exa</font></u></a></p>

<p></p></div>]]></content>
						
	</entry>
   <entry>
		<title><![CDATA[DOS 공격에 대한 방어 프로그램입니다.]]></title>
		<id>https://www.xpressengine.com/23206167</id>
		<published>2017-01-23T12:36:22+09:00</published>
		<updated>2017-01-23T12:36:22+09:00</updated>
		<link rel="alternate" type="text/html" href="https://www.xpressengine.com/23206167"/>
		<link rel="replies" type="text/html" href="https://www.xpressengine.com/23206167#comment"/>
		<author>
			<name><![CDATA[마루디자인]]></name>
						<uri>http://www.sumaster.net</uri>
					</author>
				<content type="html"><![CDATA[<div class="xe_content"><p>원본은 <a href="http://www.nuclearelephant.com/" target="_blank">http://www.nuclearelephant.com/</a><br />
제가 본 곳은 좋은진호님 글에서 <a href="http://kltp.kldp.org/stories.php?story=03/08/29/0942915" target="_blank">http://kltp.kldp.org/stories.php?story=03/08/29/0942915</a><br />
아파치 2.0.1에서 해봤는데 잘 되더군요. ^^<br /><br />
Apache 에서 DoS 공격 막기 (1.3.x 2.x 모두)<br />
글쓴이 : 좋은진호 (2003년 08월 29일 오후 06:55) 읽은수: 4,372 [ 아파치 # 트랙백(0) ]<br />
작성자 : 좋은진호(truefeel, <a href="http://coffeenix.net/" target="_blank">http://coffeenix.net/</a> )<br />
작성일 : 2003.8.20(수) apache v1.3.x<br />
수정일 : 2003.8.25(월) apache v2.x 부분 추가<br /><br />
특정 URL이나 IP일 경우나 특정한 브라우저를 이용하여 DoS(Denial of Service, 서비스거부)<br />
공격이 들어온다면 httpd.conf 에서 SetEnvIf, SetEnvIfNoCase 등과 Allow, Deny 설정으로<br />
간단히 막을 수 있겠지만 일정한 유형이 없다면 해결점을 찾기가 쉽지 않다.<br /><br />
다행히 Apache용 mod_dosevasive 모듈로 DoS 공격을 쉽게 막을 수 있다.<br />
며칠전 1.7버전 발표로 apache 2.x에서도 정상적으로 이 모듈을 이용할 수 있게 됐다.<br /><br />
1. mod_dosevasive 설치<br /><br /><a href="http://www.nuclearelephant.com/projects/dosevasive/" target="_blank">http://www.nuclearelephant.com/projects/dosevasive/</a><br />
에서 mod_dosevasive (현재 최신버전은 1.7)을 받아온다.<br /><br />
1) 기존에 사용하던 apache 1.3.x에 모듈만 추가할 때<br /><br />
mod_dosevasive.tar.gz 을 푼다음 apxs로 설치<br /><br />
----------------------------------------------<br />
# tar xvfz mod_dosevasive.tar.gz　<br />
# cd dosevasive<br />
# /bin/apxs -iac mod_dosevasive.c<br />
...<br />
[activating module `dosevasive' in /usr/local/apache/conf/httpd.conf]<br />
cp mod_dosevasive.so /usr/local/apache/libexec/mod_dosevasive.so<br />
chmod 755 /usr/local/apache/libexec/mod_dosevasive.so<br />
...<br />
----------------------------------------------<br /><br />
httpd.conf의 LoadModule, AddModule는 apxs가 알아서 추가해준다.<br /><br />
2) apache 1.3.x부터 새로 컴파일할 할 때<br /><br />
mod_dosevasive.tar.gz 을 apache_source_홈/src/modules 에 푼 다음<br />
기존에 apache 컴파일하는 것과 동일한 방법으로 하되, --add-module=... 옵션만<br />
추가해준다.<br /><br />
----------------------------------------------<br />
./configure --prefix=/usr/local/apache \<br />
--enable-module=all --enable-shared=max \<br />
--add-module=src/modules/dosevasive/mod_dosevasive.c　 &lt;-- 추가함<br />
make<br />
make install<br />
----------------------------------------------<br /><br />
3) apache 2.x에 모듈만 붙일 때<br /><br />
/bin/apxs -iac mod_dosevasive20.c<br /><br />
2. 설정<br /><br />
httpd.conf 에 아래 설정이 있는지 확인한다.<br /><br />
apache 1.3.x<br />
----------------------------------------------<br />
...<br />
LoadModule dosevasive_module　libexec/mod_dosevasive.so<br />
...<br />
AddModule mod_dosevasive.c<br />
----------------------------------------------<br /><br />
apache 2.x<br />
----------------------------------------------<br />
LoadModule dosevasive20_module modules/mod_dosevasive20.so<br />
----------------------------------------------<br /><br />
httpd.conf에는 다음과 같이 설정을 추가한다.<br />
( 단, 아래 설정 중에 apache 2.x일 때는 &lt; IfModule mod_dosevasive20.c&gt; 로 )<br />
----------------------------------------------<br />
APACHE v1.3<br />
-----------<br /><br />
&lt; IfModule mod_dosevasive.c&gt;<br />
DOSHashTableSize 3097<br />
DOSPageCount 2<br />
DOSSiteCount 50<br />
DOSPageInterval 1<br />
DOSSiteInterval 1<br />
DOSBlockingPeriod 10<br />
&lt; /IfModule&gt;<br /><br />
APACHE v2.0<br />
-----------<br />
&lt; IfModule mod_dosevasive20.c&gt;<br />
DOSHashTableSize 3097<br />
DOSPageCount 2<br />
DOSSiteCount 50<br />
DOSPageInterval 1<br />
DOSSiteInterval 1<br />
DOSBlockingPeriod 10<br />
&lt; /IfModule&gt;<br />
----------------------------------------------<br />
DOSHashTableSize　　3097<br /><br />
hash table의 크기. IP, URI등을 분석하기 위한 공간으로 쓰이는 것 같은데 정확히는<br />
모르겠다. 접속이 많은 서버이면 수치를 높인다.<br /><br />
DOSPageCount　　　　3<br />
DOSPageInterval　　 1<br /><br />
DOSPageInterval에서 지정한 시간(초단위)동안 같은 페이지를 3번 요청한 경우<br />
해당 클라이언트 IP를 블럭킹한다. 블럭킹되는 동안에 사용자에게는 403(Forbidden)<br />
코드가 전송된다.<br /><br />
DOSSiteCount　　　　50<br />
DOSSiteInterval　　 1<br /><br />
DOSSiteInterval에서 지정한 시간동안 어느 페이지나 이미지든 요청 건수가 50번을 넘는<br />
경우 해당 클라이언트 IP를 블럭킹한다. 403코드 보내는 것은 마찬가지.<br />
HTML 내에 이미지가 10개이면 요청 건수는 HTML포함하여 11번이 되므로 이미지가 많은<br />
사이트는 숫자를 크게한다.<br /><br />
DOSBlockingPeriod　 30<br /><br />
블럭킹된 IP는 30초동안 접속을 할 수 없다.<br /><br />
3. 모듈 사용을 중지하려면<br /><br />
차단 기능을 이용하지 않기 위해<br /><br />
DOSPageCount 0<br />
DOSSiteCount 0<br /><br />
와 같이 하면 모듈 내부의 default값을 이용해서 동작하므로 LoadModule, AddModule를<br />
주석 처리하는 방법을 써야한다. 또는 Count값을 상당히 큰 수를 지정할 수도 있겠다.<br /><br />
4. 차단하는지 테스트<br /><br />
간단한 테스트 툴로 test.pl을 제공한다.<br />
12번째 줄에<br /><br />
printf("%03d　", $_ );<br /><br />
를 추가하고<br /><br />
apache를 실행시킨 다음 perl test.pl을 해보면 200 OK, 403 Forbidden 된 것을 쉽게<br />
확인할 수 있을 것이다.<br /><br />
DOSPageCount, DOSSiteCount 수치를 너무 낮게 하면 정상적인 접속에 대해서도 차단될 수<br />
있으므로 주의해야 한다. 수치를 낮추고, 같은 페이지를 reload(Ctrl+R)를 여러번했더니<br />
바로 403 페이지가 등장.<br /><br />
403 페이지를 별도로 만드는 것이 좋을 듯 싶다. httpd.conf에 ErrorDocument 403 ... 설정<br />
으로 html을 만들어두면 방문자에게 도움이 되지 않을까...<br /><br />
이젠 ab, lynx 등으로 게시물 조회수를 순간적으로 올린다거나, 시스템 로드를 증가시키는<br />
것까지도 어느정도 막을 수 있을 것이다.<br />
 </p></div>]]></content>
						
	</entry>
   <entry>
		<title><![CDATA[방명록 형태 사용시 제목이 길게 저장되게 하려면]]></title>
		<id>https://www.xpressengine.com/23199754</id>
		<published>2016-12-23T06:00:12+09:00</published>
		<updated>2016-12-23T06:00:12+09:00</updated>
		<link rel="alternate" type="text/html" href="https://www.xpressengine.com/23199754"/>
		<link rel="replies" type="text/html" href="https://www.xpressengine.com/23199754#comment"/>
		<author>
			<name><![CDATA[sejin7940]]></name>
						<uri>http://sejin7940.co.kr</uri>
					</author>
				<content type="html"><![CDATA[<div class="xe_content"><p>원본글 출처 : http://sejin7940.co.kr/index.php?mid=xe_tips&amp;document_srl=110522<br />
제 사이트의 글을 퍼온거여서 말이 조금 짧습니다.</p>

<p>=================================</p>

<p>방명록형태등에서</p>

<p>제목을 안 넣고 내용만 있는 글의 경우<br />
내용의 일부분이 자동으로 제목으로 기록이 된다.</p>

<p>단지 현재 Core 설정에서는 20자에서 자르다보니<br />
최근게시물이라든지, 통합검색 등에서 짧게 된다.</p>

<p>board.controller.php 에서 </p>

<p>function procBoardInsertDocument 함수에서</p>

<p>if($obj-&gt;title == '') $obj-&gt;title = cut_str(trim(strip_tags(nl2br($obj-&gt;content))),20,'...');</p>

<p>부분을 아래처럼 변경. 숫자를 늘리면 된다.</p>

<p>if($obj-&gt;title == '') $obj-&gt;title = cut_str(trim(strip_tags(nl2br($obj-&gt;content))),60,'...');</p></div>]]></content>
						
	</entry>
   <entry>
		<title><![CDATA[숫자 아이디 허용 방법]]></title>
		<id>https://www.xpressengine.com/23196722</id>
		<published>2016-12-13T21:33:44+09:00</published>
		<updated>2016-12-13T21:33:44+09:00</updated>
		<link rel="alternate" type="text/html" href="https://www.xpressengine.com/23196722"/>
		<link rel="replies" type="text/html" href="https://www.xpressengine.com/23196722#comment"/>
		<author>
			<name><![CDATA[410contents]]></name>
						<uri>http://www.410content.com</uri>
					</author>
				<content type="html"><![CDATA[<div class="xe_content"><p>제작 활동을 하게 되면 가급적 엔진 그대로 형태를 쓰라고 당부 드리지만 사정상 꼭 숫자 아이디를 허용해야 할때가 있다고 한다.</p>

<p>이미 많은 방법들이 올라 왔지만, 최대한 정리해서 써보려 한다.</p>

<p>1.7 버전 기준으로 한 방법이니 상위 앤진에는 확인해 보지 않았다.</p>

<p>/common/js/xml_js_filter.js 파일을 열어보면  'userid' =&gt; '/^[a-z]+[\w-]*[a-z0-9_]+$/i' 이부분을 'userid' =&gt; '/^[0-9a-zA-Z]+[\w-]*[a-z0-9_]+$/i' 로 바꿔서 경고 메세지가 나오는부분을 없애자.</p>

<p>두번째는 xml_js_filter.js 를 xe.js  minify로 압축한 xe.min.js울  변경해 주어야 한다.</p>

<p>common.js, js_app.js, xml_handler.js, xml_js_filter.js 를 전부 합친값이 xe.js되고 minify 압축하여-&gt; xe.min.js이다.</p>

<p>첨부파일에 다 만들어진 xe.min.js 만 따로 올려 놨다. 혹시 minify 거치기 귀찮거나 난감하면 첨부된 파일을 다운로드 한 후에 업로드를 하면 된다.</p>

<p>그후로 validator 부분의 class 또한 허용하게 해야한다.</p>

<p>/classes/validator/Validator.class.php 의  'userid' =&gt; '/^[a-z]+[\w-]*[a-z0-9_]+$/i' 이 부분도'userid' =&gt; '/^[0-9a-zA-Z]+[\w-]*[a-z0-9_]+$/i' 로 수정해주면 된다.</p>

<p> </p>

<p>간단히 정리하면 </p>

<p>/common/js/xml_js_filter.js</p>

<p>/classes/validator/Validator.class.php</p>

<p>'userid' 의 형식을 바꾸고 </p>

<p>첨부된 xe.min.js 를 바꾸면 숫자아이디 사용이 가능하다. xe.min.js 파일만 사용하기에 꼭 바꿔 줘야한다.</p>

<p> </p>

<p>마지막으로 말하고 싶은건 숫자아이디 허용하고 싶은 1.7버전의 유저분들만 적용해 보길 바란다. 사실 코어부분 컨트롤러를 건드리는건 아니고 단지 Validator와 min 파일 수정이기에 도전해봄직 한것 같다.</p>

<p>실행하기전에 원본파일들은 필히 백업한다음 적용하길 바란다.</p>

<p> </p></div>]]></content>
						
	</entry>
   <entry>
		<title><![CDATA[클라우드플레어 사용시 서버 IP 노출방지 체크리스트]]></title>
		<id>https://www.xpressengine.com/23195921</id>
		<published>2016-12-09T08:07:19+09:00</published>
		<updated>2016-12-09T08:07:19+09:00</updated>
		<link rel="alternate" type="text/html" href="https://www.xpressengine.com/23195921"/>
		<link rel="replies" type="text/html" href="https://www.xpressengine.com/23195921#comment"/>
		<author>
			<name><![CDATA[gnbstory]]></name>
					</author>
				<content type="html"><![CDATA[<div class="xe_content"><p>요즘 <a href="https://www.cloudflare.com/">클라우드플레어</a>를 사용하는 사이트가 부쩍 늘었죠?</p>

<p> </p>

<p>서버의 트래픽을 절약해 주기 때문에 사용하시는 분들이 제일 많지만, 공격을 차단해 주고 실제 서버의 IP를 숨겨주기 때문에 사용하시는 분들도 적지 않습니다. 특히 중소규모의 디도스 공격이 잦은 사이트라면 클플 사용으로 상당한 효과를 거둘 수 있지요.</p>

<p> </p>

<p>그런데 실제 서버의 IP가 노출되면 이것도 모두 소용없게 됩니다. 서버 IP를 직접 공격할 수 있게 되니까요.</p>

<p> </p>

<p>클플을 사용해서 서버 IP를 숨기고 싶은 분들은 아래의 항목들을 체크해 보시기 바랍니다.<br />
 </p>

<p> </p>

<p><strong>개요: 클플을 사용한 디도스 방어의 원리</strong></p>

<p> </p>

<p>디도스(DDoS, distributed denial of service) 공격은 특정 서버에 어마어마한 양의 트래픽을 쏟아부어서 사이트를 마비시켜 버리는 범죄행위입니다. 이제는 누구나 단돈 몇 만원이면 국내외의 해커를 고용하여 원하는 사이트 어디든지 공격할 수 있는 시대가 되어버렸는데요... 자기가 직접 공격하는 것이 아니라 수많은 좀비PC를 동원하여 트래픽을 발생시키기 때문에 공격자를 잡기가 매우 어렵습니다.</p>

<p> </p>

<p>디도스 공격도 여러 종류가 있지만, 크게 두 가지로 나눌 수 있습니다. 변조된 패킷을 무지막지하게 쏟아붇는 레이어 3/4 공격과, 정상적인 패킷을 사용하여 다수의 웹 요청을 발생시키는 레이어 7 공격입니다. 가게에 비유한다면 레이어 3/4 공격은 가게 문에 쓰레기를 퍼붇는 것이고, 레이어 7 공격은 사람을 마구 밀어넣는 것과 같습니다.</p>

<p> </p>

<p>클라우드플레어를 비롯한 대부분의 CDN 서비스는 자기네 IP로 일단 요청을 받은 후, HTTP Host: 헤더의 도메인을 기준으로 실제 서버에 연결해 주는 방식입니다. 이렇게 하면 HTTP Host: 헤더가 포함되어 있지 않은 레이어 3/4 공격은 일단 모두 막힙니다. 실제 서버에서는 여러 종류의 패킷을 주고받아야 하므로 쓰레기 패킷만 골라서 막기가 쉽지 않지만, 클플은 HTTP, HTTPS 외에는 전혀 관심이 없기 때문에 일괄적으로 막아버리기도 쉽습니다.</p>

<p> </p>

<p>실제 서버로 전달되는 것은 HTTP, HTTPS 등 정상적인 패킷으로 이루어진 레이어 7 공격뿐인데 (쓰레기가 아니라 멀쩡한 사람처럼 생겼거든요. 실제 사용자일지도 모르잖아요.) 이것도 클플 방화벽에서 한 번 필터링한 후 수상하다 싶으면 캡챠를 거치게 합니다. ("I'm under attack!" 모드를 켜면 모든 사용자가 의무적으로 캡챠를 거치도록 강제할 수도 있습니다.) 이렇게 실제 사용자만 통과시키기 때문에 클플을 사용하면 레이어 7 공격도 대부분 막을 수 있게 됩니다.</p>

<p> </p>

<p>물론 이건 실제 서버의 IP가 노출되지 않았을 때의 이야기입니다.</p>

<p> </p>

<p>주의: 디도스를 제대로 방어하려면 200달러짜리 플랜이 필요합니다. 무료나 20달러짜리는 작은 공격은 막아주지만 큰 공격이 들어오면 못 버틴다고 하네요.</p>

<p> </p>

<p> </p>

<p><strong>1. [초급] 무슨 일이 있어도 클플을 끄지 않는다</strong></p>

<p> </p>

<p>몇 초라도 클플(주황색 구름 아이콘)을 꺼두면 실제 IP가 노출되고, 한 번 노출된 IP는 다시 주워담을 수 없습니다. 테스트를 위해서든 디버깅을 위해서든, 잠시라도 클플을 끄는 일은 결코 없어야 하겠습니다.</p>

<p> </p>

<p>SSL, redirect, 실제 방문자 IP 파악 등을 위해 클플을 껐다 켰다 난리를 피우시는 분들을 종종 봅니다. <a href="https://gist.github.com/kijin/25be59ac4b0d7c5ef722">이 패치</a>를 적용하면 SSL이나 실제 방문자 IP 파악을 위해 클플을 끄지 않아도 됩니다.</p>

<p> </p>

<p>테스트를 위해 반드시 필요하다면 ycwehfbwd.example.com처럼 아무도 짐작할 수 없을 만한 서브도메인을 임시로 만들어서, 그 서브도메인만 클플을 끄고 테스트한 후 지워버리세요. 이것도 3번에 걸리지 않도록 주의해야 합니다.</p>

<p> </p>

<p> </p>

<p><strong>2. [초급] 클플 사용 전에 쓰던 IP를 계속 쓰면 위험</strong></p>

<p> </p>

<p>이미 공격이 시작된 후에 급히 클플을 적용하시는 경우가 있는데, 일반 방문자들은 클플을 경유하여 접속하겠지만 공격자는 기존의 IP를 기억하고 계속 공격할 수 있습니다. 이미 공격이 진행중이라면 클플 적용 후에 서버 IP를 바꾸는 것이 좋습니다. (호스팅 업체를 옮겨야 할 수도 있습니다.)</p>

<p> </p>

<p> </p>

<p><strong>3. [초급] 실제 서버 IP로 연결되는 서브도메인을 모두 제거해야</strong></p>

<p> </p>

<p>ftp.도메인.com, mail.도메인.com 같은 서브도메인을 자동으로 추가해 주는 호스팅 업체가 많습니다. 클플에 가입하면 이런 서브도메인을 자동으로 파악해서 클플 네임서버에 등록해 주는데, 도메인.com과 www.도메인.com은 클플을 경유하도록 (주황색 구름 아이콘) 설정하면서도 그 밖의 서브도메인은 그대로 두는 (회색 구름 아이콘) 분들이 꽤 있어요. ftp 같은 경우는 클플을 경유하면 접속이 안 되기 때문이기도 하고요.</p>

<p> </p>

<p>그런데 이런 서브도메인이 하나라도 남아 있으면 그걸 사용해서 실제 서버 IP를 파악할 수 있습니다. 아예 일반적인 서브도메인 정보를 바탕으로 <a href="http://iphostinfo.com/cloudflare/">실제 IP를 찾아 주는 사이트</a>도 있고요. 반드시 필요하지 않은 서브도메인은 모두 정리하도록 합시다.</p>

<p> </p>

<p>주의!!! CNAME 레코드도 마찬가지입니다. 클플은 CNAME 레코드를 특이한 방식으로 처리하기 때문에 사실상 A 레코드와 같은 효과가 발생합니다. 구름 아이콘이 꺼져 있으면 실제 서버 IP가 노출되는 것은 A 레코드와 마찬가지입니다.</p>

<p> </p>

<p>주의!!! 클플에서 와일드카드(*.example.com) 서브도메인을 추가하면 디도스 방어고 뭐고 다 날아가 버립니다. 요즘은 와일드카드 서브도메인을 추가하면 그 옆에 조그만 경고 아이콘이 뜨지만, 경고를 못 보는 분이 많습니다.</p>

<p> </p>

<p>관리자가 서버 접속을 위해 ftp나 ssh를 사용해야 한다면 서브도메인을 사용하지 말고 서버 IP로 직접 접속하시면 됩니다. 남에게는 꽁꽁 숨기더라도 관리자는 알고 있어야죠, 그쵸?</p>

<p> </p>

<p> </p>

<p><strong>4. [중급] 같은 서버에서 메일을 취급하면 절대 안된다</strong></p>

<p> </p>

<p>웹호스팅에 가입하면 메일 서비스가 제공됩니다. 그런데 이 서비스가 작동하기 위해서는 서버의 실제 IP를 가리키는 MX 레코드가 있어야 합니다. 그래서 웹호스팅 업체에서는 MX 레코드를 자동으로 설정해 주고, 클플에 가입할 때도 이것이 그대로 유지되는 것이 보통입니다. 클플은 메일을 취급하지 않기 때문에, 메일 전달을 위해서는 서버에 직접 연결해야 하거든요.</p>

<p> </p>

<p>실제 서버 IP를 숨기고 싶다면 서버에서 직접 메일을 받지 않아야 합니다. 호스팅 업체에서 지정해 준 MX 레코드는 삭제하고, 그 대신 네이버 Works나 해외의 메일호스팅 서비스를 사용해서 메일을 외부로 빼내면 됩니다.</p>

<p> </p>

<p>가입환영 메일이나 비번찾기 인증 메일도 마찬가지입니다. 서버에서 메일을 보내면 아래와 같이 메일 헤더에 서버 IP가 그대로 노출됩니다.</p>

<p> </p>

<p>Received: from [XXX.YY.ZZZ.ABC]</p>

<p> </p>

<p>Gmail이나 국내 포털의 SMTP를 사용하여 외부 서비스를 통해 발송해도 똑같습니다. 모두 서버 IP가 노출됩니다. 메일 발송 기능이 꼭 필요하다면 서버 IP를 숨겨주는 외부 API를 사용하는 것이 좋습니다. 이것은 API마다 차이가 있기 때문에 자세한 테스트가 필요합니다. 현재 <a href="https://www.xpressengine.com/index.php?mid=download&amp;package_id=22753677">고급 메일 발송 모듈</a>에서 지원하는 API들 중에는 <a href="http://woorimail.com/">우리메일</a>과 <a href="https://www.sparkpost.com/">SparkPost</a>가 서버 IP를 숨겨주는 것으로 알고 있으나, 각 서비스의 정책 변화에 따라 바뀔 수도 있습니다.</p>

<p> </p>

<p>스팸 방지에 사용되는 SPF 레코드도 마찬가지입니다. 예전에 서버에서 메일을 보내기 위해 <a href="https://www.kisarbl.or.kr/">화이트도메인 등록</a>을 해두었다면 SPF 레코드에 서버 IP가 남아있을 수 있습니다. 화이트도메인 등록을 하지 않았더라도 호스팅 업체에서 자동으로 SPF 레코드를 추가해 두었을 수도 있고요. 이것을 통해서도 서버 IP가 노출될 수 있으므로 삭제해야 합니다. 외부 서비스를 통해 메일을 발송한다면 화이트도메인 등록은 필요하지 않습니다.</p>

<p> </p>

<p> </p>

<p><strong>5. [중급] 호스팅 업체의 네임서버가 나를 배신할 수도!</strong></p>

<p> </p>

<p>위의 세 가지는 보안에 어느 정도 신경쓰는 분이라면 쉽게 해결할 수 있습니다. 문제는 여기부터입니다. 클플에 가입하면 클플에서 제공하는 네임서버(예: john.ns.cloudflare.com)로 변경하게 되는데, 그렇다고 그 때까지 잘 사용하던 호스팅 업체의 네임서버(예: ns1.cafe24.com)가 중단되는 건 아니거든요. 클플 네임서버에서 IP 주소를 숨기고 MX, SPF 등을 깨끗이 정리하더라도 예전 네임서버에는 여전히 실제 IP가 남아있을 가능성이 높습니다. 심지어 호스팅 업체를 바꾸더라도 새 호스팅 업체에서 님의 도메인을 자동으로 네임서버에 등록해 버릴지 몰라요. 그게 다 자동으로 된다는 것이 웹호스팅의 기본이거든요.</p>

<p> </p>

<p>DNS라는 것이 어떻게 작동하는지 조금이라도 알고 있다면 예전 네임서버를 검색하는 것은 전혀 어렵지 않아요. <a href="http://domaintools.com/">DomainTools</a> 같은 사이트에서 특정 도메인의 네임서버 변경 이력을 구입할 수도 있고, 정확히 알 수 없더라도 우리나라에서 널리 알려진 호스팅 업체들 수십 개만 찾아보면 99%는 답이 나옵니다. 가비아 네임서버도 검색해 보고, 카페24 네임서버도 검색해 보고... 심지어 도메인 등록업체와 현재 호스팅 업체가 같다면 1분도 안 걸리죠.</p>

<p> </p>

<p>이 문제를 해결하기 위해서는 호스팅 업체의 네임서버에서 님의 도메인을 삭제해 달라고 요청해야 합니다. 웹호스팅이라면 네임서버 설정이 고객정보와 연동되어 있기 때문에 쉽지 않을 수도 있습니다. 서버호스팅이나 가상서버호스팅이라면 그나마 쉽고요.</p>

<p> </p>

<p> </p>

<p><strong>6. [고급] 외부 요청을 통해 IP가 노출되지 않도록 한다</strong></p>

<p> </p>

<p>외부 이미지의 섬네일을 생성하거나 <a href="https://www.xpressengine.com/index.php?mid=download&amp;package_id=22753797">이미지 자동 첨부 애드온</a> 등을 사용하면 회원들이 쓴 글에 포함된 이미지를 서버에서 직접 다운받게 됩니다. 그러면 공격자는 자신의 서버에 올려놓은 이미지가 포함된 글을 써놓고 어느 IP에서 그 이미지를 요청하는지 확인할 수 있게 됩니다.</p>

<p> </p>

<p>이런 취약점을 차단하기 위해서는 가능하면 XE에서 외부 요청을 하지 않아야 합니다. 외부 요청을 발생시킬 만한 모듈이나 애드온은 사용하지 말고, 스킨이나 위젯 등에서 섬네일을 생성하는 코드도 모두 지우고, 꼭 섬네일을 써야겠으면 외부 이미지를 참조하지 말고 첨부파일만 사용하도록 document 및 comment 모듈을 수정할 필요가 있습니다.</p>

<p> </p>

<p>사용하시는 모듈, 애드온, 위젯, 스킨 등이 절대 외부 요청을 발생시키지 않는다는 확신이 들지 않는다면? 최악의 경우에도 서버 IP가 노출되지 않도록 프록시를 경유하여 요청해야 합니다. 무료 프록시 목록은 <a href="https://free-proxy-list.net/">이런</a> <a href="https://www.us-proxy.org/">사이트</a>에서 구할 수 있고 (반드시 anonymous, https 기능을 제공하는 것을 선택하세요), 해외 가상서버를 사용하여 직접 구축할 수도 있습니다.</p>

<p> </p>

<p>주의!!! 무료 프록시는 수시로 다운되고, 다른 사용자들이 말썽을 부리면 여기저기서 차단되어 버리곤 합니다. 프록시 사용이 많을 것으로 예상되는 사이트를 안정적으로 운영하려면 내 사이트 전용 프록시를 따로 구축하는 것이 좋습니다. 프록시 IP에 디도스 공격을 퍼부어 봤자 메인 사이트 운영에는 지장이 없으니까요.</p>

<p> </p>

<p>XE에서는 config.user.inc.php에 아래와 같이 프록시 IP와 포트를 넣고 (실제 프록시 정보로 대체해야 합니다.)</p>

<p> </p>

<p>define('__PROXY_SERVER__', '123.45.67.89:8080');</p>

<p> </p>

<p><a href="https://github.com/xpressengine/xe-core/pull/1921">이 패치를 적용</a>하여 외부 이미지 요청 등을 할 때 프록시를 사용하도록 코어를 수정해야 합니다. (라이믹스는 코어를 수정하지 않아도 정상 작동합니다.)</p>

<p> </p>

<p> </p>

<p><strong>7. [고급] IP가 노출되더라도 확인하거나 공격하기 어렵도록 만들자</strong></p>

<p> </p>

<p>위의 작업을 제대로 하지 않아서 IP가 이미 노출되었다면 어떻게 해야 할까요?</p>

<p> </p>

<p>우선, IP만 입력해서는 님의 사이트에 방문할 수 없도록 조치해야 합니다. 웹호스팅이라면 여러 사이트가 한 서버를 공유하므로 IP만 입력하면 호스팅 업체에서 미리 설정해 둔 에러 페이지가 뜨는 것이 보통입니다. 그렇다면 다행이고요... 그러나 서버를 직접 운영하시는 분들은 서버 세팅을 대강 해두어서 브라우저 주소창에 IP만 입력해도 사이트가 뜨는 경우가 은근히 많습니다. 심지어 IP를 입력하면 실제 도메인으로 리디렉트해주시는 친절한 분들도 있어요. 둘다 안됩니다. IP를 입력해서 찾아오는 방문자들에게는 간단한 에러 페이지만 보여주어야 합니다. 그래야 이 IP가 맞는지 공격자가 확인하기 힘들어집니다.</p>

<p> </p>

<p>그러나 공격자에게 좀더 실력이 있다면 Host: 헤더를 조작하는 것으로 위의 안전장치를 쉽게 우회할 수 있습니다. IP를 직접 방문하면서도 도메인을 방문한 것처럼 꾸밀 수 있다는 거예요. 따라서 IP로 접속해서 서버에 부담을 많이 주는 통합검색 요청을 대량으로 한다든지, 이런 공격이 가능하게 됩니다.</p>

<p> </p>

<p>이것까지 차단하려면 서버의 방화벽에서 <a href="https://www.cloudflare.com/ips/">클라우드플레어 IP 대역</a> 외에는 아예 80번 포트에 접속하지 못하도록 막는 방법밖에 없습니다. (SSL을 사용하실 경우 443번 포트도 마찬가지입니다. 웹호스팅에서는 .htaccess를 사용하여 비슷한 기능을 구현할 수 있습니다.) IP를 알고 있더라도 직접 접속이 안되고, 반드시 클플을 경유하여 접속하도록 강제하는 것입니다.</p>

<p> </p>

<p>주의!!! 서버의 방화벽을 잘못 건드리면 엉뚱한 사람을 차단해 버리거나, 심지어 관리자도 접속하지 못하게 되어 버릴 수도 있습니다. 당장 클플을 우회하여 공격이 들어오고 있는 긴급한 상황이 아니라면 여기까지는 하지 않아도 됩니다.</p>

<p> </p>

<p>주의!!! 물론 이것도 레이어 7 디도스 공격이나 막아주지, 서버 IP에 무의미한 패킷을 대량으로 전송하는 고전적인(?) 디도스 공격이라면 소용없긴 합니다. 따라서 애초에 서버 IP가 노출되지 않도록 하는 것이 가장 중요합니다.</p>

<p> </p>

<p> </p>

<p><strong>그 밖에 주의해야 할 점들</strong></p>

<p> </p>

<p><a href="https://www.cloudbric.com/main.php?lang=ko">클라우드브릭</a>, <a href="https://aws.amazon.com/cloudfront/">클라우드프론트</a>, 그 밖의 CDN 서비스를 사용하여 디도스 공격을 방어하는 경우에도 위의 내용은 동일하게 적용됩니다. 이런 서비스들의 공통점은 공격을 흡수할 수 있는 별도의 IP를 사용하도록 해주는 것인데, 실제 서버의 IP가 노출된다면 모두 소용없지요.</p>

<p> </p>

<p>대부분의 사이트 운영자들에게 아마존(AWS)의 <a href="https://aws.amazon.com/autoscaling/">오토스케일링(auto scaling)</a>은 디도스 공격에 대한 현실적인 방어 기술이 될 수 없습니다. 부하가 늘어날수록 서버를 자동으로 증설해 주는 기술인데, 레이어 7 공격을 당하여 서버가 마구 증설되거나 트래픽이 크게 늘어나면 다음 달에 요금 폭탄을 맞는 수가 있거든요. 사이트가 아닌 내 지갑을 디도스하게 되어버리는 거죠. (XE는 오토스케일링에 적합하지 않은 구조 때문에 애초에 쓰기도 힘들지만...) 물론 클라우드프론트와 Route 53 등의 상품을 조합하여 클라우드플레어와 비슷한 기능을 얻을 수도 있지만, 클플보다 기능도 부족하고 더 비쌀 뿐더러, 위에 나열한 체크리스트도 모두 마찬가지로 적용해야 합니다.</p>

<p> </p>

<p><a href="http://buyvm.net/ddos-protection/">BuyVM</a>, <a href="https://ramnode.com/">RamNode</a>, <a href="https://www.vultr.com/docs/ddos-protection">Vultr</a>, <a href="https://www.ovh.com/us/anti-ddos/">OVH</a> 등의 해외 호스팅 업체들이 광고하는 디도스 방어 상품도 있습니다. 가격과 퀄리티는 업체에 따라 천차만별입니다. 아주 저렴한 곳은 여러 고객이 디도스 방어 장비를 공동으로 사용하기 때문에 부담이 적지만, 여러 고객이 동시에 공격을 당할 경우 성능이 떨어질 수도 있습니다. (전용 프록시 서버를 구축하는 용도로는 꽤 괜찮습니다.)</p>

<p> </p>

<p>주의!!! 클라우드플레어와 그 밖의 디도스 방어 상품을 동시에 사용할 경우 서로 충돌해서 오히려 역효과를 일으킬 수 있습니다. 백신을 2개 설치한다고 두 배로 안전해지는 건 아니잖아요. 오히려 서로 충돌해서 둘 다 맛이 가버리곤 하죠.</p>

<p> </p>

<p>기진곰님의 작성 TIP</p></div>]]></content>
						
	</entry>
   <entry>
		<title><![CDATA[간단한 xe 관련 자바스크립트 질문]]></title>
		<id>https://www.xpressengine.com/23194731</id>
		<published>2016-12-01T11:29:17+09:00</published>
		<updated>2016-12-08T12:39:26+09:00</updated>
		<link rel="alternate" type="text/html" href="https://www.xpressengine.com/23194731"/>
		<link rel="replies" type="text/html" href="https://www.xpressengine.com/23194731#comment"/>
		<author>
			<name><![CDATA[마든남]]></name>
					</author>
				<content type="html"><![CDATA[<div class="xe_content"><p>if(Context::get('mid')=="board") {    <br />
       어쩌구 저쩌구<br />
}</p>

<p>else {<br />
         아니면 어쩌구 저쩌구<br />
}</p>

<p>이건 board라는 게시판에만 해당하는 자바스크립트인데요,</p>

<p>board2, board3에도 같은 방식으로 먹게 하려면 어떻게 해야 하나요? </p>

<p>자바스크립트를 잘하는 분들 도움 청합니다.</p>

<p>복받으실거에요.</p>

<p> </p></div>]]></content>
						
	</entry>
   <entry>
		<title><![CDATA[가상서버 고르실때 참고하시면 좋겠네요.]]></title>
		<id>https://www.xpressengine.com/23193757</id>
		<published>2016-11-24T22:53:45+09:00</published>
		<updated>2016-11-24T22:53:45+09:00</updated>
		<link rel="alternate" type="text/html" href="https://www.xpressengine.com/23193757"/>
		<link rel="replies" type="text/html" href="https://www.xpressengine.com/23193757#comment"/>
		<author>
			<name><![CDATA[로니]]></name>
					</author>
				<content type="html"><![CDATA[<div class="xe_content"><p>https://blog.lael.be/post/44</p>

<p> </p>

<p>잘나와있습니다.</p></div>]]></content>
						
	</entry>
   <entry>
		<title><![CDATA[네이버 웹마스터도구 최적화검증과 GZIP]]></title>
		<id>https://www.xpressengine.com/23192693</id>
		<published>2016-11-18T19:02:17+09:00</published>
		<updated>2016-11-18T19:02:17+09:00</updated>
		<link rel="alternate" type="text/html" href="https://www.xpressengine.com/23192693"/>
		<link rel="replies" type="text/html" href="https://www.xpressengine.com/23192693#comment"/>
		<author>
			<name><![CDATA[영흥도우럭1]]></name>
					</author>
				<content type="html"><![CDATA[<div class="xe_content"><p>비개발자 수준에서 쓴거라 올리기 부끄럽지만... 아무래도 이쪽 코너가 제 자리인듯하여 올려봅니다.</p>

<p> </p>

<p>무려 3주동안 새로 만든 사이트에 웹마스터 도구 최적화검증에서 '실시간 분석이 불가능한 웹 페이지입니다.'라고 나오더라구요.</p>

<p>이전 사이트는 웹마도에서 모든게 잘 나오는데요. 그래서 아직 더 기다려봐야 하나보다라고 생각하고 마냥 기다리다가..</p>

<p>오늘 기진곰님이 올려주신 모듈을 설치하고 옵션설정 내용을 읽다가 GZIP을 돌리면 일부 로봇이 접근하지 못하는 문제가 생길 수도 있다는 멘트를 보고 </p>

<p> </p>

<p><font face="tahoma">1. ./classes/display/DisplayHandler.class.php 파일을 에디터에서 불러오기 합니다.</font></p>

<p><font face="tahoma">2. 15번째줄에 <b>var $gz_enabled = false;</b> 을 <b>var $gz_enabled = true;</b> 로 수정합니다.</font></p>

<p><font face="tahoma">3. 수정한 DisplayHandler.class.php 파일을 서버의 해당 경로에 덮어쓰기 합니다.</font></p>

<p> </p>

<p><font face="tahoma">이렇게 설정했던 내용을 원위치로 돌렸더니 바로 즉시 최적화검증이 정상적으로 출력되더라구요. </font></p>

<p><font face="tahoma">검색과 관련해서 저와 비슷한 경우가 있는 분에게 혹시 도움이 될까해서 올려봅니다.</font></p></div>]]></content>
						
	</entry>
   <entry>
		<title><![CDATA[모바일환경에서, 스케치북스킨의 경우 포인트레벨아이콘이나 닉네임이미지 가 안 나타나는 경우 수정법]]></title>
		<id>https://www.xpressengine.com/23191617</id>
		<published>2016-11-13T18:18:54+09:00</published>
		<updated>2016-11-13T18:18:54+09:00</updated>
		<link rel="alternate" type="text/html" href="https://www.xpressengine.com/23191617"/>
		<link rel="replies" type="text/html" href="https://www.xpressengine.com/23191617#comment"/>
		<author>
			<name><![CDATA[sejin7940]]></name>
						<uri>http://sejin7940.co.kr</uri>
					</author>
				<content type="html"><![CDATA[<div class="xe_content"><p>원본글 출처 : http://sejin7940.co.kr/index.php?mid=xe_tips&amp;document_srl=110102<br />
제 사이트의 글을 퍼온글이기에 말이 조금 짧습니다 ^^</p>

<p>=================================</p>

<p> </p>

<p>모바일환경에서는 포인트레벨아이콘이라든지 닉네임이미지라든지<br />
이런 닉네임관련 이미지가 잘 안 나온다는 질문글이 종종 있다</p>

<p>답변들은 대부분 <br />
&lt;a href="#popup_menu_area" class="member_{$document-&gt;get('member_srl')}" onclick="return false"&gt;{$document-&gt;getNickName()}&lt;/a&gt;<br />
이 규칙으로 안 되어있어서라하지만,</p>

<p><br />
스케치북 스킨에서는 이 규칙이 적용되어있지만, 그래도 안 나온다..</p>

<p>원인은 스킨내부에 정의되어있는 css 때문이다</p>

<p> </p>

<p><br />
sketchbook5/css/board.css 에서</p>

<p>.bd_zine.zine .no_img,.bd_zine .info img,.bd_m_lst .attached_image{display:none}</p>

<p> </p>

<p>부분때문에 모바일환경에서는 게시판 목록을<br />
웹진형 (_list_webzine) 으로 하거나, 모바일전용 목록형 ( _list_m.html ) 로 하는 경우<br />
포인트레벨아이콘 , 이미지형닉네임, 그룹이미지 등이 전부 안 나타나게 된다</p>

<p> </p>

<p>포인트레벨 아이콘만 나타나게 하고픈 경우라면 위의 문구 아래에 아래문구를 추가해주면 된다.<br />
.bd_zine .info img.xe_point_level_icon { display:inline;}  /* sejin7940 */</p>

<p> </p>

<p>만약 모든 대체이미지가 나오게 하고픈거면  아래문구를 추가해주면 된다.<br />
.bd_zine .info img { display:inline; }  /* sejin7940 */</p></div>]]></content>
						
	</entry>
   <entry>
		<title><![CDATA[구글애드센스 한페이지에 3개 초과하시면 안됩니다.]]></title>
		<id>https://www.xpressengine.com/23191307</id>
		<published>2016-11-11T12:19:58+09:00</published>
		<updated>2016-11-14T15:39:53+09:00</updated>
		<link rel="alternate" type="text/html" href="https://www.xpressengine.com/23191307"/>
		<link rel="replies" type="text/html" href="https://www.xpressengine.com/23191307#comment"/>
		<author>
			<name><![CDATA[최윤한]]></name>
					</author>
				<content type="html"><![CDATA[<div class="xe_content"><p>구글정책위반으로 수익금 못받을수 있습니다.</p>

<p>조심하세요</p></div>]]></content>
						
	</entry>
   <entry>
		<title><![CDATA[관리자페이지의 게시판 목록에서 '모듈분류'로만 검색이 안 되는 버그 수정]]></title>
		<id>https://www.xpressengine.com/23190951</id>
		<published>2016-11-09T21:30:19+09:00</published>
		<updated>2016-11-09T21:30:19+09:00</updated>
		<link rel="alternate" type="text/html" href="https://www.xpressengine.com/23190951"/>
		<link rel="replies" type="text/html" href="https://www.xpressengine.com/23190951#comment"/>
		<author>
			<name><![CDATA[sejin7940]]></name>
						<uri>http://sejin7940.co.kr</uri>
					</author>
				<content type="html"><![CDATA[<div class="xe_content"><p>원본글 : http://sejin7940.co.kr/index.php?mid=xe_tips&amp;document_srl=110063<br />
퍼온글이기에 말이 짧을 수도 있습니다.<br />
XE Github 에도 올렸기에 추후 XE Core 에 반영되리라 예상합니다.</p>

<p>===================================================</p>

<p> </p>

<p>관리자페이지-&gt;게시판 목록에서<br />
모듈분류 만으로는 검색이 안 됨 ( 검색어가 없다는 에러가 남 )<br />
다른 검색이 아니라 단순히 모듈분류를 사용하고자할때 사용이 불가능해져서<br />
검색어 필수 처리되어있는걸 제거</p>

<p>modules/board/tpl/index.html 에서</p>

<p>&lt;input type="search" required name="search_keyword" value="{htmlspecialchars($search_keyword)}" /&gt;</p>

<p>부분을 아래걸로 수정</p>

<p>&lt;input type="search" name="search_keyword" value="{htmlspecialchars($search_keyword)}" /&gt;</p></div>]]></content>
						
	</entry>
   <entry>
		<title><![CDATA[내 작성글 보기에서 익명게시판에서 작성한 내 글도 보이게 하기 위해서]]></title>
		<id>https://www.xpressengine.com/23186380</id>
		<published>2016-10-19T20:47:05+09:00</published>
		<updated>2016-10-19T20:47:05+09:00</updated>
		<link rel="alternate" type="text/html" href="https://www.xpressengine.com/23186380"/>
		<link rel="replies" type="text/html" href="https://www.xpressengine.com/23186380#comment"/>
		<author>
			<name><![CDATA[sejin7940]]></name>
						<uri>http://sejin7940.co.kr</uri>
					</author>
				<content type="html"><![CDATA[<div class="xe_content"><p>원본글 출처 : http://sejin7940.co.kr/index.php?mid=xe_tips&amp;document_srl=109777</p>

<p>==========================================</p>

<p>내 작성글 보기에서 익명게시판에서 작성한 내 글도 보이게 하기 위해서</p>

<p> </p>

<p>현재 XE Core 기반에서,  익명으로 쓴 본인 글은 '작성글 보기'에서 안 나오는게 정상입니다<br />
(어떻게 보면 버그 같은건데,  항상 익명까지 검색되게 해놨다간 혹여나 다른 모듈이나 기반에서 실수로 해당 유저글을 추출해버릴 수도 있거든요 )</p>

<p>익명글까지도 정상적으로 나타나도록 Core 를 조금 수정해놨습니다<br />
혹시나의 경우를 대비해, 작성글보기 쪽에서만 이 기능이 작동되도록 해놨습니다.<br />
실수라도 다른 모듈이나 기반에서 익명글 정보가 노출되는걸 막기 위해서요<br />
내 작성글보기는 자기 글만 무조건 나오도록 자체 제한이 되어있기에 문제가 되지 않을거예요</p>

<p>이건 Core 에 보완요청을 해둬야겠군요</p>

<p> </p>

<p><br />
1) modules/document/document.model.php 에서</p>

<p>$output = executeQueryArray($query_id, $args, $columnList);</p>

<p>위에다가 추가</p>

<p>if(Context::get('act')=='dispMemberOwnDocument' &amp;&amp; $args-&gt;s_member_srl) {<br />
    $query_id = 'document.getDocumentListWithAnonymous';<br />
}</p>

<p> </p>

<p> </p>

<p>2) modules/document/queries/getDocumentListWithAnonymous.xml</p>

<p>&lt;query id="getDocumentListWithAnonymous" action="select"&gt;<br />
    &lt;tables&gt;<br />
        &lt;table name="documents" /&gt;<br />
    &lt;/tables&gt;<br />
    &lt;columns&gt;<br />
        &lt;column name="*" /&gt;<br />
    &lt;/columns&gt;<br />
    &lt;conditions&gt;<br />
        &lt;condition operation="in" column="module_srl" var="module_srl" filter="number" /&gt;<br />
        &lt;condition operation="notin" column="module_srl" var="exclude_module_srl" filter="number" pipe="and" /&gt;<br />
        &lt;condition operation="in" column="category_srl" var="category_srl" pipe="and" /&gt;<br />
        &lt;condition operation="equal" column="is_notice" var="s_is_notice" pipe="and" /&gt;<br />
        &lt;condition operation="equal" column="member_srl" var="member_srl" filter="number" pipe="and" /&gt;<br />
        &lt;condition operation="in" column="status" var="statusList" pipe="and" /&gt;<br />
        &lt;group pipe="and"&gt;<br />
            &lt;condition operation="more" column="list_order" var="division" pipe="and" /&gt;<br />
            &lt;condition operation="below" column="list_order" var="last_division" pipe="and" /&gt;<br />
        &lt;/group&gt;<br />
        &lt;group pipe="and"&gt;<br />
            &lt;condition operation="like" column="title" var="s_title" /&gt;<br />
            &lt;condition operation="like" column="content" var="s_content" pipe="or" /&gt;<br />
            &lt;condition operation="like" column="user_name" var="s_user_name" pipe="or" /&gt;<br />
            &lt;condition operation="like" column="user_id" var="s_user_id" pipe="or" /&gt;<br />
            &lt;condition operation="like" column="nick_name" var="s_nick_name" pipe="or" /&gt;<br />
            &lt;condition operation="like" column="email_address" var="s_email_address" pipe="or" /&gt;<br />
            &lt;condition operation="like" column="homepage" var="s_homepage" pipe="or" /&gt;<br />
            &lt;condition operation="like" column="tags" var="s_tags" pipe="or" /&gt;<br />
            &lt;condition operation="equal" column="abs(member_srl)" var="s_member_srl" pipe="or" /&gt;  &lt;!-- 추가 --&gt;<br />
            &lt;condition operation="more" column="readed_count" var="s_readed_count" pipe="or" /&gt;<br />
            &lt;condition operation="more" column="voted_count" var="s_voted_count" pipe="or" /&gt;<br />
            &lt;condition operation="less" column="blamed_count" var="s_blamed_count" pipe="or" /&gt;<br />
            &lt;condition operation="more" column="comment_count" var="s_comment_count" pipe="or" /&gt;<br />
            &lt;condition operation="more" column="trackback_count" var="s_trackback_count" pipe="or" /&gt;<br />
            &lt;condition operation="more" column="uploaded_count" var="s_uploaded_count" pipe="or" /&gt;<br />
            &lt;condition operation="like_prefix" column="regdate" var="s_regdate" pipe="or" /&gt;<br />
            &lt;condition operation="like_prefix" column="last_update" var="s_last_update" pipe="or" /&gt;<br />
            &lt;condition operation="like_prefix" column="ipaddress" var="s_ipaddress" pipe="or" /&gt;<br />
        &lt;/group&gt;<br />
        &lt;group pipe="and"&gt;<br />
            &lt;condition operation="more" column="last_update" var="start_date" pipe="and" /&gt;<br />
            &lt;condition operation="less" column="last_update" var="end_date" pipe="and" /&gt;<br />
        &lt;/group&gt;<br />
    &lt;/conditions&gt;<br />
    &lt;navigation&gt;<br />
        &lt;index var="sort_index" default="list_order" order="order_type" /&gt;<br />
        &lt;list_count var="list_count" default="20" /&gt;<br />
        &lt;page_count var="page_count" default="10" /&gt;<br />
        &lt;page var="page" default="1" /&gt;<br />
    &lt;/navigation&gt;<br />
&lt;/query&gt;</p></div>]]></content>
						
	</entry>
   <entry>
		<title><![CDATA[사이트 운영하시는분들 단체메일 가급적 보내지 마세요.]]></title>
		<id>https://www.xpressengine.com/23186243</id>
		<published>2016-10-19T14:57:59+09:00</published>
		<updated>2016-10-19T14:57:59+09:00</updated>
		<link rel="alternate" type="text/html" href="https://www.xpressengine.com/23186243"/>
		<link rel="replies" type="text/html" href="https://www.xpressengine.com/23186243#comment"/>
		<author>
			<name><![CDATA[최윤한]]></name>
					</author>
				<content type="html"><![CDATA[<div class="xe_content"><p>예전에 사이트 홍보한다고 단체메일 자주 보냈더니 도메인 블락먹어서 지금 아이디 패스워드 찾기및 회원가입인증등의 이메일조차 수신이 안됩니다.</p>

<p>아이피 화이트 리스트 사이트에 하라는데로 해도 아무런 소용이 없네요.</p>

<p>이참에 도메인을 바꿀려고 합니다.</p>

<p> </p></div>]]></content>
						
	</entry>
   <entry>
		<title><![CDATA[관리자페이지 첫페이지에서 최근글 / 최근댓글 리스트에서  닉네임 대신에 날짜가 나오게 하는 방법]]></title>
		<id>https://www.xpressengine.com/23186205</id>
		<published>2016-10-19T14:03:28+09:00</published>
		<updated>2016-10-19T14:03:28+09:00</updated>
		<link rel="alternate" type="text/html" href="https://www.xpressengine.com/23186205"/>
		<link rel="replies" type="text/html" href="https://www.xpressengine.com/23186205#comment"/>
		<author>
			<name><![CDATA[sejin7940]]></name>
						<uri>http://sejin7940.co.kr</uri>
					</author>
				<content type="html"><![CDATA[<div class="xe_content"><p>묻고답하기에 답변달다가..  작성하는 김에 팁란에도 적어둡니다.<br />
제 사이트 XE Tips 쪽에 올리는 글로 먼저 쓴거여서..  말이 짧습니다.<br />
http://sejin7940.co.kr/index.php?mid=xe_tips&amp;document_srl=109763</p>

<p>--------------------------------------------------------------------------</p>

<p> </p>

<p>관리자페이지 첫페이지에서 최근글 / 최근댓글 리스트에서  닉네임 대신에 날짜가 나오게 하는 방법</p>

<p><br />
1) modules/admin/admin.admin.view.php 에서</p>

<p>function dispAdminIndex()  함수에서</p>

<p>$columnList = array('document_srl', 'module_srl', 'category_srl', 'title', 'nick_name', 'member_srl');</p>

<p>를 아래걸로 변경</p>

<p>$columnList = array('document_srl', 'module_srl', 'category_srl', 'title', 'nick_name', 'member_srl','regdate');</p>

<p> </p>

<p>2) modules/admin/tpl/_dashboard_default.html 에서</p>

<p>&lt;span class="side"&gt;{$value-&gt;getNickName()}&lt;/span&gt;</p>

<p>대신에 아래걸로 변경</p>

<p>&lt;span class="side"&gt;{$value-&gt;getRegdate('m.d')}&lt;/span&gt;</p>

<p> </p>

<p>각각 관련구문이 두개씩 있을겁니다<br />
앞에건 최근글 / 뒤에건 최근댓글  이기에<br />
수정 원하면 각각 두군데를 다 고쳐주면 됩니다.</p>

<p> </p>

<p>ps. 날짜와 닉네임 둘 다 나오게 하려면 class 까지 재지정해줘야해서 패스</p>

<p> </p></div>]]></content>
						
	</entry>
</feed> 
