목공 4~1랭크
마비노기 생활계 2012/01/23 05:51스타2 테란
AnythingElse 2012/01/21 21:33기본적인 테란부터 알려드리면, 우선 테란 기본빌드인 10서플 12병영 13가스(선택) 16궤도 17보급은 되도록이면 암기하셔야합니다.
우선 저그전엔 염차더블 하시는걸 추천해드려요. 염차로 견제하면서 확장과 생산건물을 늘려 한방병력을 모을수있습니다. 뮤링링은 보통 공성전차 해병 의료선으로 상대하고요 바드라는 소수불곰 해병 공성전차 의료선으로 상대합니다. 보통 바드라는 잘안쓰죠..테란한테 바퀴 히드라는 약합니다.
대플토전은 공허는 보통 해병으로막죠. 우주공항이 빨랐다면 바이킹 1~2기정도 찍으신후 긴사거리를 이용해 잡아주시는것도 괞찮습니다.
추적 거신 파수기 질럿 조합은 바이킹 해병 불곰 의료선으로 막으셔야해요. 가스 여유가 된다면 유령 섞어주시는것도 좋습니다. 보통 병영은 기술실과 반응로 비율이 2:1이에요.
대플토전 추천해드리는 빌드는 기술실더블입니다. 빠른더블을 가져가면서도 자극제나 방패업이 빨라 수비,공격 모두 좋습니다.
테테전은 원래 싸움은 공성전차와 해병 의료선 입니다. 근데 요즘추세가 바이오닉이나 메카닉 쪽으로 흘러가고 있어서 대충 알려드리면,
바이오닉빌드는 상대가 메카닉일떄 쓰는빌든데요, 다수불곰과 소수 해병 의료선 바이킹 조합입니다. 공성전차와 다수 화염차로 조여오는 메카닉을 산개컨으로 잡아먹어야되죠. 우선 바이오닉빌드를 타시면 드랍을 꾸준히 보내세요. 기동성좋은 바이오닉을 메카닉이 따라잡기 힘듭니다.
메카닉 빌드는 공성 염차 토르 조합입니다. 우선 3다 스플유닛으로 화력이 어마어마하죠. 상대를 조이거나 염차견제등 쌓이면 쌓일수록 강한체제죠. 다만 기동성이 느리다는게 단점입니다.
스타2 테란
AnythingElse 2012/01/21 21:30[1] 테테전
크게 나누어서 4가지 종류가 있습니다.
1. 1/1/1
2. 메카닉
3. 사신더블
4. 스카이 테란
1. 1/1/1
10보급고 - 12병영 - 13가스 - 15궤도사령부 - 해병1기 - 15가스 후 가스되는대로 군수공장, 완성되면 바로 우주공항
군수공장에선 기술실 다시고 탱크 뽑아주시구요, 병영에선 해병 꾸준히, 우주공항 완성되면 반응로 달고 바이킹 꾸준히 모아줍시다.
진출타이밍은 인구같은거 안막혔다면 8분대 쯤에 진출타이밍 나올겁니다. 건설로봇 몇기 자동수리 붙여놓고 데려가시면서 하나씩 던지면서 자리 잡아서 조여들어가시면 이깁니다. 미네랄이 많이 남으니까 멀티는 미네랄 남으면 먹어주세요.
2. 메카닉
1/1/1과 초반 빌드는 비슷합니다. 하지만, 그냥 메카닉은 앞마당을 일찍 먹고 안정적으로 갑니다.
3. 사신 더블
10보급 - 12병영 - 13가스 - 15궤도사령부 해병1기 이후 가스모이는대로 기술실, 사신1기 찍어주시고 돈되는대로 바로 두번째 사령부
그 후로 운영하시면서 병영 폭발적으로 늘려주시면서 해병+의료선 조합으로 갑니다. 두번째 가스는 앞마당 드신 후에 가주시면 되구요, 기술실에선 자극제, 방패업 눌러주시고 군수공장에 반응로 달고 우주공항 지으셔서 군수공장과 우주공항 스왑(위치 바꿔달기)합니다. 그 후, 의료선 뽑아주시면서 그걸로 견제다니시면 됩니다. 상대가 메카닉이라 좀 힘들어진다 싶으시면 거기서 탱크도 뽑아주시는게 좋습니다.
4. 스카이 테란
10보급 - 12병영 - 13가스 - 15궤사 - 15가스 - 해병1기 - 기술실 사신 더블 후에 군수공장 1개에 기술실 , 우주공항 2개 올려주시면서 두개다 반응로.
군수공장에 기술실 완성되면 지옥불과 화염차 2기정도 찍어주시고, 우주공항은 1개에선 바이킹 2개씩, 나머지 1개는 지옥불 끝나면 군수공장과 스왑하셔서 은폐밴시를 모아줍니다. 군수공장에선 2화염차, 우주공항에선 2바이킹 1밴시씩 꾸준히 모아주시면서 공중을 장악하시는 빌드입니다.
[2] 테프전 전략
일단 4차관은 메카닉에 정말, 엄청, 존나게 취약합니다.
메카닉 카운터가 불멸자인데 로공을 안올라가니까 불멸자가 나오지 않거든요.
빌드는
1. 3병영(기본빌드, 로공 카운터, 초반찌르기용)
2. 1/1/1(기본빌드, 웬만하면 승률 80% 이상, 4차관과 암흑기사 카운터)
3. 토르러쉬(엄청난 날빌, 4차관 카운터)
가 있습니다. 대략..
뭐 은폐밴시나 1/1/1 변형인 2/1/1 등도 있는데 그런 자잘한 류는 생략할게요.
1. 3병영
10보급 - 12병영 - 13가스 - 15궤도 후 해병 1기 눌러주고 돈남는대로 병영을 2개 더 늘리고 이후 운영가는 빌드입니다. 상대가 불멸자나 고위기사, 집정관류면 여기서 유령 섞어주시면 되고, 거신이면 바이킹 섞어주시면 됩니다. 의료선은 당연히 필수겠죠? 주 병력은 해불유의(해병+불곰+유령+의료선) 입니다.
2. 1/1/1
10보급 - 12병영 - 13가스 - 15궤도 - 15가스 후 가스남는대로 군수공장, 그 후에 보급고 지어주시면서 해병이랑 건설로봇 꾸준히 뽑아주시구요(해병은 필수) 상대가 4차관인거 같다하면 얼쑤 하시면서 입구에 벙커1개 건설, 아닌거 같다 싶으면 탱크까지만 버티면 되니까요 뭐. 군수공장 완성되면 우주공항 바로, 군수공장에 기술실, 기술실 완성되면 공성전차(아직 공성모드는 찍지 않습니다.), 우주공항 완성되면 기술실, 기술실 완성되면 바로 밤까마귀 1기 찍을 가스가 거의 딱 되거나 약간 넘칩니다. 밤까마귀 1기 후 공성모드, 공성전차와 밴시를 눌러주면서 밤까마귀 마나 85~90정도에 진출합니다. 이 때, 건설로봇 4~5기를 대동하면서 공성전차와 밤까마귀, 밴시 리페어 해주시구요, 상대가 로공이 없다 싶으면 공성전차 생산을 잠시 멈추시고 은폐 찍어줍시다. 미네랄이 남으므로 400모이면 앞마당 먹어주시구요.(장래를 생각합시다) 밤까마귀는 국지방어기 용입니다. 추적자 공격을 20회 막고 마나차는대로 한발씩 또 막아주니 이게 얼마나 좋습니까. 아무래도 관측선 없는 경우가 대부분이므로 은폐완성되면 ㅈㅈ. 공성전차로 조이기하고 밴시와 해병으로 엄호해주시는 공격형태를 취하시면 됩니다.
3. 토르러쉬
1/1/1과 기본빌드는 같습니다. 군수공장 완성되면 바로 무기고 올려주시고, (가스가 딱 될겁니다.) 가스 되는대로 기술실 달아주세요. 보급고는 15~20인구수 정도 여유있어야 합니다. 무기고 완성되면 토르 2기를 모읍시다. 이 빌드는 초반찌르기에 굉장히 약하므로 해병 꾸준히 모으기와 벙커 1~2개 건설을 의무화 합시다. 토르가 2기정도 완성되면 건설로봇 10기정도를 대동하여(자동리페어보단 직접 붙여주는게 좋습니다.) 러쉬를 갑니다. 이 때, 토르는 보조 화력이고 주 화력은 해병임을 명심합시다. 그래도 토르 죽으면 큰일납니다.
[3] 테저전 전략
1. 1-4병영 더블 온리해병 푸쉬
이 빌드는 초싸이언 해병이라고도 불리는 빌드입니다.
그만큼 사기소리 듣는 해병을 극대화시켜서 사용하는 빌드입죠.
빌드오더는 대충 이렇습니다.
10보급고->12병영->15궤도사령부->해병 한기->정찰 끊어주면서(해병 허리돌리기 연습해주세요.) 본진 사령부 바로 옆에 추가 사령부 -> 병영 3개(해병 한기 이후엔 아무 유닛도 뽑지 않습니다.) -> 건설로봇, 해병 꾸준히 눌러주기->17정제소->17보급고(보급고 막히면 적당히 기술실 달아주세요.1개에만)
사령부가 완성되면 궤도사령부로 바꾸신 후 지게로봇 꾸준히 떨궈주시고, 만약 기술실이 1개 있는 상태라면 선 전투방패 -> 자극제 가줍니다.인구 50정도에 해병 모두와 건설로봇 4~5기 데리고 러쉬갑니다. 가시면서 두번째 사령부를 앞마당으로 옮겨주시고, 가스 2개 더 먹고, 군수공장 1개 늘려주고, 상대 본진에 스캔 한번 뿌려줍시다. 자 여기서 갈림길.
①. 상대가 링링이고 번식지를 타고 있다.
-> 맹독충이 소수라면 해병 적당히 산개해주시면서 밀어주시고, 다수라면 2번 선택지로 갑니다.
②. 상대가 맹독충 올인 또는 다수이다.
-> 앞마당에 벙커짓고 군수공장 1개 더늘려서 총 2개 만들어줍시다. 완성된 군수공장은 바로 기술실 달고 공성전차와 공성모드 눌러주시고, 병영에 2개 반응로 다시고, 그거 완성되면 나머지 하나도 반응로 달아줍시다. 그 후엔 우주공항 가시고 반응로 다셔서 의료선 뽑아주세요.
②. 상대가 바퀴다.
-> 꽁승 ㄳ 그냥 쭉쭉
④. 상대가 뭔진 잘 모르겟으나 앞마당에 성큰이 3~4기나 된다.
-> 지금 모인 해병으로 성큰 2방 ㅅㄱ 쭉쭉 밀어줍시다.
일단 이정도 되고, 이번엔 두번째.
2. 해탱선
위와 빌드는 비슷합니다. 다만 처음 병영이 2~3개이고, 2가스를 좀더 빨리 먹는다는 점이 다릅니다.
3. 화토밤
화염차 + 토르 + 밤까마귀 입니다. 상대 무리군주 전에 밀어주시는 빌드인데, 3멀티 안돌리면 자원력이 딸려서 힘들겁니다.
출처 : 지식IN
다양한 이벤트
마비노기 2012/01/19 16:05마비노기 운영팀입니다.
2012년 흑룡의 해를 맞이하여,
마비노기에서는 다양한 이벤트와
설날 당일에만 누릴 수 있는 특별한 혜택을 준비했습니다.
자세한 내용은 아래와 같습니다.
============================================================================================================================
■ 흑룡의 해 기념 이벤트
이벤트 기간 : 2012년 1월 19일 (목) ~ 2월 5일 (일) 23시 59분
에린 전역에서 펼쳐지는 다양한 이벤트를 즐기시고,
밀레시안끼리 합심하여 '흑룡의 조각'을 모아 흑룡을 소환하면, 소원도 이루어줍니다.

다양한 이벤트에 참여해서, 각종 쿠폰을 모으시면 여러가지 선물을 받으실 수 있습니다.
이벤트에 대한 자세한 내용은 아래 표를 참고해주세요~!
1. 쿠폰을 획득할 수 있는 이벤트 참여 방법
|
이벤트 |
내용 |
보상 |
|
제스쳐 |
에린 시간 오전/오후 8시마다 제스쳐 제시 문구 안내 |
제스쳐 성공 시, |
|
널뛰기 |
흑룡의 사절 NPC에게 '널뛰기 조립 키트' 구매 |
1명이라도 10M 이상 널뛰기 성공 시, |
|
스키 |
스키 점프 이벤트 도우미에게 입장권 구매 | 1600점 이상 획득 시, '스키 점프 쿠폰' 획득 점수가 높을수록 쿠폰 추가 획득 |
|
OX |
현실 시간으로 매 시간 정각에 OX 퀴즈 진행 OX 퀴즈 시작 1분 전까지 발판 위에 있어야 참여 가능 오답 시, 다음 OX 퀴즈 시작 전까지 참여 불가 |
퀴즈 정답 획득 시, 'OX 쿠폰' 획득 문제를 많이 맞추면 쿠폰 추가 획득 |
|
비밀의 |
에린 시간 오후 6시 ~ 오전 6시에 비밀의 야시장 출현 |
미니게임 순위에 따라 '야시장 쿠폰' 획득 단, 획득 점수가 100점 이하인 경우, 순위에 관계없이 쿠폰 획득 불가 |
[쿠폰 사용 안내]
다양한 이벤트에 참여하여 각종 쿠폰을 모아보세요!
쿠폰 종류별로 일정 개수 이상 모아 흑룡 사절단에게 가져가면, 각각의 선물 상자로 교환이 가능합니다.
|
쿠폰 종류 |
보상 아이템 |
|
제스쳐 쿠폰 2장 |
제스쳐 선물 상자 |
|
널뛰기 쿠폰 10장 |
널뛰기 선물 상자 |
|
스키 점프 쿠폰 5장 |
스키 점프 선물 상자 |
|
OX 쿠폰 20장 |
OX 선물 상자 |
|
야시장 쿠폰 10장 |
야시장 선물 상자 |
위 선물 상자와 흑룡의 선물 상자를 사용하면,
아래 아이템을 포함한 게임에 필요한 아이템 1가지와 '흑룡의 조각'을 100% 확률로 얻을 수 있습니다.


* 참고 사항
- 흑룡의 사절 NPC는 티르코네일/던바튼/타라/탈틴/이멘마하와
스키점프/OX퀴즈/비밀의 야시장/흑룡에게 소원을 이벤트 지역에서 만나실 수 있습니다.
- 흑룡의 사절 NPC와 대화하시면, 각 이벤트 지역으로 이동할 수 있는 '노란 이벤트 날개'를 받으실 수 있으며
해당 아이템은 최대 1개만 보유할 수 있습니다.
- 노란 이벤트 날개는 에린 시간으로 하루에 1번만 받을 수 있으며, 유효시간이 존재합니다.
- 선물 상자에서 획득 할 수 있는 세트 아이템은, 각각의 아이템으로 획득되며, 일부 거래가 불가능합니다.
- 흑룡의 선물 상자는 '흑룡에게 소원을' 이벤트에서 획득 가능하며,
다른 선물 상자보다 특별한 아이템을 획득할 확률이 조금 높습니다.
2. 흑룡에게 소원을 이벤트
각각의 선물 상자에서 획득한 '흑룡의 조각'을 '흑룡의 사절단 NPC'에게 바쳐보세요.
동일한 서버 내 유저들이 힘을 모아 '흑룡의 조각'을 일정 갯수 이상 모으면,
무유 사막 새문양 근처에 흑룡과 흑룡의 현신이 30분 동안 소환됩니다.
'흑룡의 현신'에게 소원을 빌면, 흑룡의 소원 선물 상자 혹은
아래의 아이템을 포함한 게임에 필요한 아이템 1가지를 받을 수 있습니다.

* 참고 사항
- 흑룡의 조각이 일정 개수 이상 누적되면, 흑룡과 흑룡의 현신이 소환되지만
소원 아이템은 현실 시간으로 하루에 1번만 받으 수 있습니다.
- 흑룡의 기운 아이템은 보유 중인 아이스 드래곤 중 하나의 색상을 검정색으로 변경할 수 있으며
변경된 아이스 드래곤의 색상은 되돌릴 수 없습니다.
- 불안정한 아이스 드래곤의 알 아이템을 사용하면, 일정 확률로 아이스 드래곤을 생성할 수 있는
'아이스 드래곤의 알' 아이템을 획득할 수 있습니다.
3. 1월 23일 설날의 특별한 혜택
- 1월 23일 접속만 해도 특별한 타이틀을 획득할 수 있습니다.
'흑룡의 기운을 담은' 타이틀은 접두 타이틀로, 다른 타이틀과 함께 사용하실 수 있습니다.
- 1월 23일 단 하루!!
전투 경험치, 교역 보상 2배와 함께, 대장간 수리 성공 100% 효과를 누리실 수 있습니다.
* 참고 사항
- 1월 22일부터 접속 중인 분들은, 23일에 새로 접속하셔야 '흑룡의 기운을 담은' 타이틀을 획득할 수 있습니다.
============================================================================================================================
마비노기에서 준비한 다양한 이벤트와 함께
활기차고 힘찬 새해 맞으시기 바랍니다.
감사합니다.
[이벤트 페이지 보러가기]
csrf
php 2012/01/18 22:12 http://www.securityplus.or.kr/xe/?mid=textyle&category=18992&vid=bangrip1&document_srl=20993
CSRF 대응에 대한 고민
이번 쓰레드 주제는 CSRF 입니다.
CSRF 는 Cross Site Request Forgery 의 약자로서 XSS 를 이용한 요청 위조를 의미합니다.
CSRF는 OWASP에서 XSS와는 또다른 하나의 항목으로 분류되고 있으며
외국에서는 이미 많이 연구가 되어있고, 문서도 많은 반면에
우리나라에서는 XSS의 아류? 정도로 분류하고 있는 것 같습니다.
대응을 예기하기에 앞서 일단 어떤 취약점인지 간단히 알고 가겠습니다.
웹은 페이지 단위로 동작합니다.
login.asp insert.asp delete.asp write.asp upload.asp 등등 각각의 페이지마다 역할이 정해져 있습니다.
만일 인터넷 뱅킹 웹에서 계좌이체를 처리하는 iche.asp 라는 페이지가 있고
송신 계좌, 이체금액이 파라메터로 처리되어 아래와 같이 페이지가 동작한다고 가정한다면
"http://www.xxxbank.com/iche.asp?accountnum=1111111111&money=50000"
공격자는 자신의 계좌로 계좌이체를 하는 스크립트를 뱅킹사이트 게시판에 삽입하고
누군가가 게시판을 읽기를 기다리면 됩니다.
아래와 같은 iframe 태그를 게시판에 삽입하면 되겠네요..
<iframe src="http://www.xxxbank.com/iche.asp?accountnum=1111111111&money=50000 width=0 height=0></iframe>
만일 A라는 사람이 게시판을 읽게되고 공격자가 삽입한 스크립트가 실행된다면
A는 해커에게 자신도 모르게 50000만원을 이체하게 됩니다.
즉 불특정 다수를 대상으로 중요 행위를 하는 Action을 강요함으로서
특정 사용자를 해킹할 수 있는 것입니다.
위와같은 경우는 단순히 개념 이해를 위해 예를 든 것이고
실제 국내 환경에서 가장 대표적이 CASE는 싸이월드의 방문자 추적기 입니다.
원리는 굉장히 단순합니다.
비공개 게시판을 하나 생성하고 성성된 게시판에 글을 하나 쓰게하는 스크립트를 삽입합니다.
싸이에 방문한 사람은 자신도 모르게 게시판에 글을 남기게 될 것이니 게시판에 쓰여진 사용자를 확인한다면 누가 왔다갔는지 알 수 있는 것이죠.
위에서 보듯이 CSRF는 단순 XSS 보다 훨씬 큰 문제점을 일으킬 수 있습니다.
왜냐하면 첫번째는 사이트의 비지니스 로직 취약점을 파고들기 때문에 피해 발생시 금전적이 손해로 직결될 수 있으며
두번째는 불특정 다수를 공격 대상으로 하고 있기 때문에 피해 범위가 예측할 수 없다는 점입니다.
최근에는 제로보드에서 csrf 취약점이 발견되어 긴급 패치되었는데
악의적인 스크립트를 삽입하여 관리자에게 쪽지를 보내고
관리자가 쪽지를 읽을때 스크립트가 실행되어 특정 사용자에게 관리자 권한을 부여하는 취약점이었습니다.
이것은 CSRF가 다양한 방법으로도 응용될 수 있다는 것을 알 수 있습니다.
참고로 아래는 이베이에서 csrf 취약점이 발견되었다는 기사입니다.
ebay :
http://www.eweek.com/c/a/Security/Researcher-Uncovers-eBay-Security-Vulnerabilities-684970/
다음에는 CSRF에 대한 실제 대응방안에 대해서 알아보겠습니다.
이제 CSRF에 대한 대응에 대해서 논해 보겠습니다.
CSRF 공격이 성립하려면 2가지 조건이 필요합니다.
첫번째는 사이트에서 계좌이체, 관리자 권한 부여, 게시판 글작성 등등
중요한 Action을 하는 페이지가 존재해야 하는 것이고
두번째는 사이트에서 인증에 대한 처리를 쿠키로만 하고 있어야 합니다.
그렇다면 스크립트 삽입이 가능한 XSS 취약점은??? 이라는 의문을 가질 수 있는데
XSS 취약점이 존재한다면 CSRF공격이 성공하는데 충분조건이지 필수 조건은 아닙니다.
XSS 취약점이 존재하지 않더라도 스크립트를 실행시킬 수 있기 때문입니다.
예를 들어 악성 메일을 통해서도 CSRF를 실행할 수 있습니다.
먼저 로그인 버튼을 삽입하여 로그인을 유도하고
아래에 이벤트 참가 등으로 가장한 버튼(실제로는 계좌에체 Action을 수행)을 삽입하여 차례로 글릭하도록 유도하면
이메일을 발송을 통해 공격을 성공 시킬 수 있기 때문입니다.
즉 꼭 해당 사이트에 XSS 취약점이 존재하지 않아도 되는 것이죠..
첫번째 필수 조건인 중요한 Action이 사이트에 존재 해야 한다는 것은 당연한 예기 이기에 넘어가고
두번째 필수 조건인 쿠키로만 인증관리를 해야 한다는 것에 대해서 설명하도록 하겠습니다.
CSRF 공격이 반드시 성공을 하려면 사용자가 로그인한 상태 이어야 합니다.
즉 계좌이체를 하는 스크립트를 만들었더라도 스크립트가 실행될때
어떠한 사용자라는 인증 정보가 서버에 같이 송신 되어야 하는 것이죠..
GET 이나 POST 로 전송되는 파라메터는 공격자가 얼마든지 분석해서 알아낼수 있지만
사용자를 구분하는 인증값(일반적으로 쿠키에 암호화 되어 저장되는 쿠키값)은
공격자가 스니핑을 하지 않는 이상 알아낼 수가 없습니다.
그런데 쿠키값은 서버를 호출할때 브라우저가 알아서 HTTP 헤더에 붙여 보내줍니다.
따라서 공격자는 브라우저가 알아서 쿠키를 서버로 전송시켜 주기 때문에 쿠키값에 대한 고민을 안해도 되는 것이죠..
만일 서버에서 쿠키 이외의 다른 파라메터 값으로 추가 인증을 처리한다면
그리고 그 값이 매번 바뀌는 ONE TIME 값이라면...
CSRF가 성공하기는 굉장히 어려울 것입니다.
예를들어 중요 Action을 처리할때 OTP, 캅챠, 공인인증서, 보안카드 같은 추가 인증 수단을 사용한다면
거의 공격은 불가능 합니다.
인증값을 알아내는것도 힘들 뿐더러 사용자 마다 매번 인증값이 바뀔 테니까요!!
즉 CSRF에 대응하는데 가장 효과적인 방법은
쿠키가 아닌 다른 형태의 매번 바뀌는 인증값을 사용하는 것입니다.
캅챠 같은 것은 사용자가 매번 입력을 별도로 해야 하는 불편함이 있기 때문에
원타임 토큰을 사용하는 것이 가장 일반적인 방법입니다.
OWASP 의 CSRF 항목을 보면 이내용이 자세히 나와 있습니다.
http://www.owasp.org/index.php/Cross-Site_Request_Forgery_(CSRF)_Prevention_Cheat_Sheet
이렇게 인증상의 문제점을 해결하는 것이 첫번째이고
두번째가 가능하다면 XSS 스크립트가 실행되지 않게 막는 것이죠..
XSS 취약점이 있다면 아무래도 쉽게 CSRF를 실행할 수 있기 때문에
XSS 가 동작하지 않도록 하는것 또한 중요합니다.
다시한번 강조하지만 인증상의 문제를 해결하면 CSRF를 해결했다고 말할 수 있지만
XSS를 막았다고 해서 CSRF를 막았다고는 할 수 없습니다.
XSS와는 반드시 구분해야할 개념입니다.
마지막으로 IPS나 웹방화벽을 활용할 수는 없을까?
CSRF 스크립트는 정상적인 HTML 스크립트 입니다.
그렇기 때문에 보안 솔루션으로는 방어할 수가 없습니다.
안전한 웹 어플리케이션 개발만이 살길입니다.~~
일일이 사이트에서 행해지는 중요 Action의 로직을 파악하고 분석하여 개별 건으로 대응할 수 밖에 없습니다.//
comet
php 2012/01/13 11:48좀 예전에 작성해 놓았던 건데 걍 정리 하는 차원에서 맛보기 들어 갑니다.
아래 기술하는 내용은 XMLHttpRequest polling 방식 입니다.
아주 예전에 제가 쓰던 방식은 hidden iframe 을 이용한 remote scripting 이였는데 뭐.. 세상은 날로 좋아지고 있으니.. ㅎㅎ
관련 글 WebSocket 도 참고하세요.
- http://jjeong.tistory.com/485
[참고링크]
- http://en.wikipedia.org/wiki/Comet_(programming)
- http://www.google.co.kr/search?q=reverse+ajax
[Server]
// server.html
<?php
header("Cache-Control: no-cache, must-revalidate");
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
header('Content-Type: multipart/x-mixed-replace; Charset=utf-8');
$filename = 'comet.txt';
$currentTime = filemtime($filename);
$inputTime = filter_input(INPUT_GET, 'inputTime', FILTER_SANITIZE_STRIPPED);
clearstatcache();
while ( $inputTime < $currentTime ) {
$inputTime = $currentTime;
echo $currentTime;
flush();
usleep(10000);
}
?>
[Client]
// client.html
<!DOCTYPE html>
<html>
<head>
<title>XMLHttpRequest</title>
<script type="text/javascript">
//<![CDATA[
var XHR = {
conn : null,
request : {
url : '',
method : 'GET',
data : '',
async : true
},
header : {
key : [],
value : {}
},
data : {
key : [],
value : {}
},
response : {
type : "XML"
},
createConnection : function() {
if (typeof window.XMLHttpRequest) {
this.conn = new XMLHttpRequest();
} else if (typeof window.ActiveXObject) {
this.conn = new ActiveXObject("Microsoft.XMLHTTP");
}
return this.conn;
},
createRequestData : function() {
var size = this.data.key.length;
for ( var i = 0; i < size; i++) {
this.request.data += this.data.key[i] + '='
+ this.data.value[this.data.key[i]] + '&';
}
this.request.data = this.request.data.substr(0,
this.request.data.length - 1);
return this.request.data;
},
createRequestHeader : function() {
var size = this.header.key.length;
for ( var i = 0; i < size; i++) {
this.conn.setRequestHeader(this.header.key[i],
this.header.value[this.header.key[i]]);
}
},
open : function() {
var requestUrl;
if (this.request.method == 'GET') {
requestUrl = this.request.url + '?' + this.request.data;
} else {
requestUrl = this.request.url;
}
this.conn.open(this.request.method, requestUrl, this.request.async);
},
send : function() {
if (this.request.method == 'GET') {
this.conn.send();
} else {
this.conn.send(this.request.data);
}
}
}
XHR.request.url = "http://192.168.1.1/comet/server.html";
XHR.request.method = "GET"; // "POST";
XHR.header.key = ["Content-Type"];
XHR.header.value = {
"Content-Type":"application/x-www-form-urlencoded"
};
XHR.data.key = ["id", "s", "ts", "inputTime"];
XHR.data.value = {
"id":12345678,
"s":"320x48",
"ts": Math.floor(new Date().getTime()/1000),
"inputTime":0
};
function xhrRequest() {
XHR.createConnection();
XHR.createRequestData();
XHR.conn.onreadystatechange = function () {
switch ( XHR.conn.readyState ) {
case 0 : // XHR.conn.UNSENT :
break;
case 1 : // XHR.conn.OPENED :
break;
case 2 : // XHR.conn.HEADERS_RECEIVED :
break;
case 3 : // XHR.conn.LOADING :
break;
case 4 : // XHR.conn.DONE :
doReadyStateChange();
break;
}
/*
별도로 수행해야 하는 함수 작성 필요
*/
function doReadyStateChange() {
if ( XHR.conn.status >= 200 && XHR.conn.status < 300 ) {
testConsole(XHR.conn.responseText);
XHR.data.value.inputTime = XHR.conn.responseText;
} else if ( XHR.conn.status == 404 ) {
alert('Not Found.');
} else {
alert(XHR.conn.status);
}
}
};
XHR.open();
XHR.createRequestHeader();
XHR.send();
}
function testConsole (log) {
var console = document.getElementById("console");
console.innerHTML = log + '<br>' + console.innerHTML;
}
window.setInterval("xhrRequest();", 5000);
//]]>
</script>
</head>
<body>
<div id="console" style="width:800px; height:400px"></div>
</body>
</html>
[Content&Message File]
- comet.txt
- 이 파일은 Client 로 전달한 content 나 message 등을 넣어 놓으면 server.html 에서 while loop 내 file_get_contents 함수를 통해서 Data 를 읽고 Client 로 전달해 주면 됨.
[간단설명]
- Client 에서 주기적으로 Server 에 Request 를 보냅니다.
- Server 에서는 comet.txt 파일의수정 시간을 검사를 합니다.
- 전달할 메시지가 추가 되었다면 file의 수정된 시간이 크기 때문에 comet.txt 파일의 Content 를 읽어서 Client 로 전달을 합니다.
- Async 방식은 잘 아실테니 설명 생략하구요.
※ 작성된 코드는 아주 옛날에 작성된것으로 ㅋ 초간단 버전 입니다. - 태클금지 -
RadRails
Ruby 2012/01/11 21:37Ruby on Rails가 최고의 시기를 맞고 있다. 개발자들은 더욱더 접근성 있는 Rails를 만드는 통합 개발 환경을 필요로 하고 있다. Eclipse 기반 환경인 RadRails는 많은 개발자들의 필요를 채우고 있다.
이 글에서 RadRails IDE를 소개한다. 여러분이 Ruby on Rails로 웹 애플리케이션을 개발하는 방법을 알고 있다는 전제로, 루비 또는 Rails 코드를 설명하는 대신 IDE 자체에만 초점을 맞추기로 하겠다.
여러분은 Ruby on Rails에 편승하고 싶지만, IDE가 주는 안락함을 포기할 준비가 되지 않았다. 아니면, 잠시 동안 Rails를 사용하다가 이제는 과거 에디터로 다시 돌아가기 원하고 있을지도 모른다. 어떻게 하다가 RadRails 세계에 오게 되었는지 모르지만, 좋은 소식은 라Rails는 설치와 사용이 쉽다는 것이다. 이 섹션에서는 설치 방법을 설명하고, 나머지 섹션에서는 RadRails 사용법을 설명하겠다.
RadRails는 많은 조건이 필요치 않다. Microsoft® Windows®, Linux®, Mac OS X 시스템에서 Ruby V1.8.4, Rails V1.1 또는 이후 버전, Java™ V1.4 또는 이후 버전으로 실행된다.
여러분의 시스템이 이러한 요구 사항에 맞는다면, 프로젝트의 웹 사이트(참고자료)에서 RadRails를 다운로드 하라. Eclipse 플러그인 링크를 찾아서 기존 Eclipse와 소스 코드에서 RadRails를 실행할 수 있다. 주:이러한 배포판들을 실행하는 방법은 이 글에서는 설명하지 않겠다.
알맞은 zip 파일을 다운로드하면, radrails 실행 파일을 추출하여 실행한다. $PATH를 조정하여 RadRails가 자바를 찾을 수 있도록 한다.
RadRails를 설치했다면, 이제는 사용 방법에 대해 알아보자. 이 섹션에서는 RadRails 애플리케이션과 프로젝트에서 실행하는 방법을 살펴볼 것이다. 새로운 프로젝트를 시작하고 기존 프로젝트를 반입하는 등 프로젝트에서 실행할 수 있는 여러 방법들이 있다.
어떤 경로를 선택했든지 간에, 시작은 가장 중요한 부분이다. RadRails를 배우는 최상의 방법은 뛰어들어 사용해 보는 것이다. 하지만 뛰어들기 전에 몇 가지를 살펴보도록 하자.
우리의 여행은 하나의 프로젝트를 포함하고 있는 RadRails 애플리케이션부터 시작한다. 프로젝트를 추가하는 방법을 설명하겠다.
그림 1은 RadRails 애플리케이션 모습이다. 실제로는, 애플리케이션의 Rails "퍼스펙티브"를 보여주고 있지만, 걱정하지 말라. 이것을 여섯 개의 영역으로 나뉜 창으로 생각할 수 잇다. Menu bar, Tool bar, Navigator와 Test::Unit pane, Editor pane, Outline pane, External Tools pane.
그림 1. RadRails 애플리케이션
- Menu bar
- Menu bar는 애플리케이션 윈도우의 맨 위에 있다. 여느 다른 애플리케이션의 메New 바와 같은 역할을 한다. 한 가지 중요한 메New 아이템은 Window > Preferences인데, 여기에서 Ruby 인터프리터를 설정 또는 선택할 수 있다. 이렇게 하지 않으면, 많은 스크립트를 실행해도, Rails는 실패할 것이다. (예, 단위 테스트 스크립트)
- Tool bar
- Tool bar는 Menu bar 바로 밑에 있다. 다른 툴바와 비슷한 역할을 한다. 가장 왼쪽에 있는 버튼은 New 버튼이다.
- Navigator and Test::Unit pane
- Navigator와 Test::Unit pane은 애플리케이션 윈도우의 왼편을 차지한다. 프로젝트의 네비게이션이 간략히 설명된다. Test::Unit 부분에서는 단위 테스팅 상태를 모니터링 할 수 있다.
- Editor pane
- Editor pane은 애플리케이션 윈도우의 중앙에 있다. 이 에디터는 신택스 컬러링(coloring), 인덴팅(indenting), 기타 툴을 제공하는 좋은 위젯이다. 에디터를 오른쪽 클릭하면 디버깅 옵션, 파일에서 코드를 실행하는 방식, 선택된 영역에 주석 달기/해제 같은 많은 툴을 가진 메New가 나타난다.
- Outline pane
- Outline pane은 애플리케이션 윈도우의 오른편에 있다. 현재 편집되고 있는 소스 파일의 아웃라인 뷰를 보여준다. 이 뷰에서는 파일 안에 있는 메소드와 클래스를 빠르게 검색할 수 있다.
- External Tools pane
- External Tools pane은 애플리케이션 윈도우의 우측 아래에 있다. 웹 서버 컨트롤, 제너레이터, RegExp 툴, 기타 툴로의 액세스를 제공한다.
Navigation pane에는 워크스페이스에 존재하는 프로젝트들의 계층이 있다. 프로젝트를 클릭하면 프로젝트를 구성하고 있는 디렉토리와 파일들이 나타난다. (그림 2는 Navigation pane에서 확장된 프로젝트가 있는 RadRails 윈도우를 보여주고 있다.)
그림 2. 확장된 프로젝트
프로젝트가 하이라이팅 되어있다면, RadRails의 활성 프로젝트인 것이다. 제너레이터를 실행할 수 있고, 웹 서버를 시작할 수 있다.
파일을 더블 클릭하면 Editor Pane에 있는 에디터에서 파일이 열린다. 여러 파일들을 열면 탭에 여러 파일들이 열린다. 그림 3은 Editor Pane에 네 개의 파일들이 열린 모습이다.
그림 3. 탭의 여러 파일들
새로운 프로젝트를 시작하는 것은 쉽다. Tool bar의 New를 클릭하거나, Menu bar에서 File > New를 선택한다. 두 경우 모두 새로운 다이얼로그 박스가 생긴다. 이 박스에서는 여러분이 시작한 프로젝트 유형에 맞는 마법사를 선택할 수 있다. 옵션에는 웹 서버 구성, SQL 파일, Ruby 프로젝트와 클래스, Ruby 프로젝트(이 글에서 설명할 유일한 옵션)가 포함된다.
Rails > Rails Project를 선택하고 Next를 클릭한다. 새로운 스크린이 뜨고, 여기에서 프로젝트 이름을 입력한다. 다른 옵션에 대한 기본 값들은 실험용으로는 괜찮지만, 나중에 조정해야 한다.
- 기본 위치를 사용한다. (워크스페이스 디렉토리에서 프로젝트와 같은 이름을 가진 디렉토리로 설정한다.)
- Rails 애플리케이션 골격을 만든다. (true로 설정한다.)
- WEBrick 서버를 만든다. (true로 설정한다.)
- 복수 테이블을 실행 불가로 한다. (false로 설정한다.)
수정한 후에, Finish를 클릭한다. 이렇게 하면 프로젝트가 생성되고, 이것은 RadRails 인터페이스의 왼편에 있는 Rails Navigator pane에 보이게 된다.
Rails 프로젝트가 이미 있고 새롭게 시작하는 것 보다는 이것을 사용하고 싶다면 반입하는 간단한 방법이 있다. Tool bar의 New를 클릭하거나 메뉴 바에서 File > New를 선택하여 시작한다. 마치 새로운 프로젝트를 시작하는 것과 같다. 다이얼로그 박스에서 Rails > Rails Project를 선택하고 Next를 클릭한다. 프로젝트 이름을 정한 다음에 Generate Rails application skeleton 체크 박스를 클릭하여 옵션을 끈다. 그런 다음, Finish를 클릭한다.
프로젝트가 Rails Navigator Pane에 나타나면 이것을 오른쪽 클릭하여 옵션들의 메뉴를 가져올 수 있다. 이 메뉴에서 Import를 선택하면 Import 다이얼로그 박스가 뜬다. General > File System을 선택하고 Next를 클릭한다. 이렇게 하면 반입 할 소스를 선택할 수 있다. 소스를 선택하는 것 외에도 반입할 폴더용 옵션도 있고(기본적으로 프로젝트의 워크스페이스가 된다.), 기존 파일들을 겹쳐쓰기 할지, 필요한 파일이나 폴더를 생성할 것인지(기본은 false이다.), 여러분이 선택한 폴더로만 반입을 제한할 것인지(기본은 true이다.)에 대한 옵션이 있다.
선택된 디렉토리가 파일 검색 윈도우에 나타나면 이것을 선택하고(무엇이든 선택할 때까지 에러 메시지 "There are no resources currently selected for import"가 다이얼로그 박스의 상단에 나타난다.) Finish를 클릭하여 파일을 반입한다. 중복이 있다면 추가 다이얼로그 박스가 나타나고, 원래 버전을 반입된 버전으로 겹쳐 쓰기 할 것인지 여부를 묻게 된다.
기반 데이터베이스를 생성하는 것으로 프로젝트를 시작한다. 가장 좋은 방법은 명령행이다. 제너레이터를 사용하여 마이그레이션 스크립트를 만들고, 스크립트를 편집한다. RadRails에서 같은 패턴을 따라간다.
Navigation Pane에서 프로젝트(또는 여기에 속해있는 리소스들 중 하나)를 클릭하여 활성 프로젝트를 선택한다. 그런 다음 External Tools Pane에서 Generators 탭을 클릭하여 Generator 툴을 가져온다. (그림 4) Pane의 좌측 상단에 있는 풀다운 메New에서 Migration 제너레이터를 선택한다. 제너레이터를 실행하려면 우측 상단 코너에 있는 Go를 클릭한다.
그림 4. Generator 툴
Go를 클릭하면 Editor Pane에 터미널 위젯이 열리고 이 안에 있는 제너레이터 스크립트가 실행되면서, 명령어의 결과를 보여준다. Navigator Pane에 있는 프로젝트 트리의 db > migrate 브랜치를 확장하고 파일 이름을 클릭하여 Editor Pane에 있는 에디터에서 파일을 연다. (그림 5) 여러분의 필요를 만족시킬 만한 마이그레이션 스크립트를 편집했다면, Rake에서 이를 실행할 수 있고 애플리케이션 작동을 시작할 수 있다.
그림 5. 마이그레이션 편집하기
다시 제너레이터로 가서 거기서부터 실행한다. 이번에는, Scaffold 제너레이터를 선택하고 Options 필드(풀다운 메뉴와 Go 버튼 중간에 있는 필드)에 Example Admin이라는 이름을 정한다. Go를 클릭하여 터미널 위젯에서 제너레이터를 실행한다.
이 부분에서, 웹 서버를 실행할 수 있는 애플리케이션이 생기고 모든 것이 작동하고 있는 것을 볼 수 있다. External Tools Pane에 있는 Servers 탭을 클릭하고, Pane에 나타난 리스트에서 해당 서버를 클릭하고 Start를 클릭한다. (녹색 화살표. External Tools Pane의 상단에 있는 작은 툴바의 왼쪽에서 두 번째.) 이렇게 하면 웹 서버와 콘솔이 시작된다. External Tools Pane의 Console 탭을 클릭하여 이 콘솔에 액세스 한다. (그림 6)
그림 6. Console 탭
생성된 스카폴드에는 단위 테스트가 포함되기 때문에 이를 실행할 수 있다. 여러분은 일찍이 Ruby 인터프리터를 설정한바 있다. 기본 테스트는 통과하겠지만(true만 true로 선언한다.), 오류 작동을 실행하여 어떤 일이 발생하는지 볼 수 있다. Navigator Pane에서 choosing Test > Unit > example_test.rb를 선택하여 단위 테스트 스크립트를 편집하고, test_truth 메소드에 있는 선언을 수정하여assert false를 읽는다. 이제 이것이 실패할 것이라는 것을 알 수 있다.
테스트를 실행하려면, Tool bar에 있는 Run Unit Tests를 클릭한다. (왼쪽에서 세 번째 버튼 그룹에서 좌측에서 세 번째 버튼) 테스트가 실패하기 때문에, Navigation Pane의 Test::Unit 탭의 위쪽 가까이에 있는 녹색 바가 빨간색으로 변한다. Pane의 중앙 필드의 Failures 탭에 오류 리스트가 나타나고(이 경우, 단 하나이다.) 선택된 오류에 대한 스택 트레이스가 Pane의 Failure Trace 필드에 나타난다. (여러분의 관찰력이 뛰어나다면, 탭의 제목 공간에서는 단위 테스트용 런타임을 보여준다는 것도 알 수 있을 것이다.)
Test::Unit Pane의 중간 필드의 Hierarchy 탭을 클릭하여 현재 실행되는 것 중 오류에 대한 트리 뷰를 본다. 이 탭에서 오류(또는 Failures 탭)를 선택하면 Test::Unit Pane에 있는 다른 모든 탭들에서 같은 오류를 선택하게 된다.
Tool bar의 해당 버튼(또는 Run All Tests 버튼을 가진 테스트)을 클릭하여 통합 테스트 또는 함수 테스트를 실행한다. 이렇게 하면, 테스트 슈트가 실행되고 Test::Unit Pane을 통해 결과에 액세스 할 수 있다.
이 글에서는 Ruby on Rails용 RadRails IDE를 설명했다. RadRails의 설치 방법, 애플리케이션 윈도우의 구조와 사용법, 애플리케이션 개발 과정을 살펴보았다. 다음 단계는 여러분에게 달려있다. RadRails를 다운로드 하여 설치하고, 이 글에서 설명한 단계들을 다 완료했다면 여러분의 개발 환경에 맞게 RadRails를 사용 할 수 있을 것이다.
교육
- RadRails.org
- Aptana, RadRails.org 미러사이트
- Eclipse Platform을 소개한다. "Eclipse Platform 시작하기 (한글)."
- Eclipse Foundation에 관한 자료 및 다양한 프로젝트 보기.
- Ruby on Rails: Up and Running 을 반드시 읽어보라,
- IBM developerWorks' Eclipse 프로젝트 리소스 사이트에 방문해 Eclipse 스킬을 넓혀보라.
- Eclipse 콘텐트(developerWorks)
- Eclipse 콘텐트(한국 developerWorks)
- 한국 developerWorks 오픈 소스 존을 방문해 오픈 소스 기술을 사용하고, IBM의 제품들과 함께 사용하는데 있어서 도움이 될 만한 HOT-TO 정보, 툴, 프로젝트 업데이트를 만나보라.
- developerWorks 기술 이벤트와 웹캐스트.
제품 및 기술 얻기
- RadRails 다운로드
- Sun Microsystems 또는 IBM에서 자바 기술자료 받기
- 최신 Eclipse 기술자료 다운로드(IBM alphaWorks)
- IBM 시험판 소프트웨어를 다운로드 하거나 DVD를 이용해 다음 오픈 소스 개발 프로젝트를 개선해보라.
토론
- Eclipse 뉴스그룹
- developerWorks 블로그와 developerWorks 커뮤니티에 참여해보라.
루비 온 레일스 설치하기
Ruby 2012/01/10 19:10http://uzooro.tistory.com/2#1-1
루비 온 레일스 설치하기
Contents
루비온레일스 프레임워크의 모든 설치 과정은 Ruby 설치 , 패키지 관리자인 RubyGems 설치 , Rails 패키지 설치로 이루어집니다.
또한 여러가지 DB를 지원하고 있으며 보통 Mysql을 많이들 사용하며 필요에 따라 선택하여 설치사용하시면 됩니다.
1. WINDOWS에 설치하기
http://rubyforge.org/frs/?group_id=167
위의 경로가서 최신 루비 버전을 다운로드 합니다.
지금은 ruby186-25.exe 가 최신버전이군요. 선택하셔서 다운완료가 되면
일반적 프로그램을 설치하는 것 처럼 기본항목 나두고 next를 계속 하시면 됩니다.
Windows 에서의 인스톨 버전은 RubyGems 항목이 기본설치로 되어 있습니다. 이 프로그램을 활용하여 레일스를 설치 할 수 있습니다.
시작>실행 cmd를 치셔서 명령프롬프트 창을 띄웁니다.
cd \
gem install rails --include-dependencies
커멘드를 치시고 차분히 기다리면 레일스가 자동으로 설치가 됩니다.
(인터넷 연결이 되어 있어야 합니다.)
어느분인지 고맙게도 설치과정을 동영상으로 제작을 하여 주셨더군요. 참고하시면 많은 도움이 될듯합니다.
http://www.saeinsw.co.kr/support/download/RUBY/INSTALL/ruby_install.html
2. 리눅스에 설치하기
루비와 루비잼을 다운로드한 후 압축을 풉니다.
wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.6.tar.gz
wget http://rubyforge.org/frs/download.php/20585/rubygems-0.9.3.tgz
tar -xvzf ruby-1.8.6.tar.gz
tar -xvzf rubygems-0.9.3.tgz
이젠 root 계정으로 루비를 설치하겠습니다.
cd ruby-1.8.6
./configure
make
make install 다시 경로로 돌아와 루비잼도 아래와 같이 설치합니다.
cd rubygems-0.9.3
ruby setup.rb 이젠 아래의 커멘드로 레일스를 설치할수 있습니다.
gem install rails --include-dependencies
(네트워크 상황이 좋지 않을 때 에러가 자주 나더군요 재시도 하여 에러메세지 뜨지 않으면 성공입니다.)
3. 데비안(우분투)에 설치하기
데비안이나 우분투 리눅스를 사용중이라면, apt-get을 이용해서도 설치할 수 있습니다.
sudo apt-get install ruby irb rdoc 아직 루비잼은 apt-get 연결이 안되어 있군요.
sudo wget http://rubyforge.org/frs/download.php/20585/rubygems-0.9.3.tgz
tar -xvzf rubygems-0.9.3.tgz
cd rubygems-0.9.3
sudo ruby setup.rb 레일스를 설치합니다.
sudo gem install rails --include-dependencies
4. 설치확인하기
마지막으로 레일스 프로젝트를 생성하여 설치 확인을 해보겠습니다.
rails test
cd test
ruby script/server
사용해서 웹서버를 실행합니다. http://localhost:3000 로 접속하셔서
오류없이 테스트 페이지가 나오면 설치 성공 커멘트 창에서 Ctrl+C 를 누르고 웹서버를 중지 하시면 됩니다.



















