2016. 1. 22. 13:31

한글 이름 로마자 표기

성씨는 규정된 표기법이 없어 다양한 표기가 가능합니다. (문화관광부 고시 제2000-8호 제3장 제4항)

이름은 규정에 따른 표기 이외에 관습적으로 사용해 온 표기도 가능합니다. (문화관광부 고시 제2000-8호 제3장 제7항)

  • Ctrl + F(Mac OS X: Command + F)로 원하는 키워드를 검색하시면 더욱 쉽게 찾으실 수 있습니다.
한글 이름 로마자 표기법
가 ga 각 gak 간 gan 갈 gal 감 gam
갑 gap 갓 gat 강 gang 개 gae 객 gaek
거 geo 건 geon 걸 geol 검 geom 겁 geop
게 ge 겨 gyeo 격 gyeok 견 gyeon 결 gyeol
겸 gyeom 겹 gyeop 경 gyeong 계 gye 고 go
곡 gok 곤 gon 골 gol 곳 got 공 gong
곶 got 과 gwa 곽 gwak 관 gwan 괄 gwal
광 gwang 괘 gwae 괴 goe 굉 goeng 교 gyo
구 gu 국 guk 군 gun 굴 gul 굿 gut
궁 gung 권 gwon 궐 gwol 귀 gwi 규 gyu
균 gyun 귤 gyul 그 geu 극 geuk 근 geun
글 geul 금 geum 급 geup 긍 geung 기 gi
긴 gin 길 gil 김 gim 까 kka 깨 kkae
꼬 kko 꼭 kkok 꽃 kkot 꾀 kkoe 꾸 kku
꿈 kkum 끝 kkeut 끼 kki
한글 이름 로마자 표기법
나 na 낙 nak
난 nan 날 nal 남 nam 납 nap 낭 nang
내 nae 냉 naeng 너 neo 널 neol 네 ne
녀 nyeo 녁 nyeok 년 nyeon 념 nyeom 녕 nyeong
노 no 녹 nok 논 non 놀 nol 농 nong
뇌 noe 누 nu 눈 nun 눌 nul 느 neu
늑 neuk 늠 neum 능 neung 늬 nui 니 ni
닉 nik 닌 nin 닐 nil 님 nim
한글 이름 로마자 표기법
다 da
단 dan 달 dal 담 dam 답 dap 당 dang
대 dae 댁 daek 더 deo 덕 deok 도 do
독 dok 돈 don 돌 dol 동 dong 돼 dwae
되 doe 된 doen 두 du 둑 duk 둔 dun
뒤 dwi 드 deu 득 deuk 들 deul 등 deung
디 di 따 tta 땅 ttang 때 ttae 또 tto
뚜 ttu 뚝 ttuk 뜨 tteu 띠 tti
한글 이름 로마자 표기법
라 ra
락 rak 란 ran 람 ram 랑 rang 래 rae
랭 raeng 량 ryang 렁 reong 레 re 려 ryeo
력 ryeok 련 ryeon 렬 ryeol 렴 ryeom 렵 ryeop
령 ryeong 례 rye 로 ro 록 rok 론 ron
롱 rong 뢰 roe 료 ryo 룡 ryong 루 ru
류 ryu 륙 ryuk 륜 ryun 률 ryul 륭 ryung
르 reu 륵 reuk 른 reun 름 reum 릉 reung
리 ri 린 rin 림 rim 립 rip
한글 이름 로마자 표기법
마 ma
막 mak 만 man 말 mal 망 mang 매 mae
맥 maek 맨 maen 맹 maeng 머 meo 먹 meok
메 me 며 myeo 멱 myeok 면 myeon 멸 myeol
명 myeong 모 mo 목 mok 몰 mol 못 mot
몽 mong 뫼 moe 묘 myo 무 mu 묵 muk
문 mun 물 mul 므 meu 미 mi 민 min
밀 mil
한글 이름 로마자 표기법
바 ba 박 bak 반 ban 발 bal
밥 bap 방 bang 배 bae 백 baek 뱀 baem
버 beo 번 beon 벌 beol 범 beom 법 beop
벼 byeo 벽 byeok 변 byeon 별 byeol 병 byeong
보 bo 복 bok 본 bon 봉 bong 부 bu
북 buk 분 bun 불 bul 붕 bung 비 bi
빈 bin 빌 bil 빔 bim 빙 bing 빠 ppa
빼 ppae 뻐 ppeo 뽀 ppo 뿌 ppu 쁘 ppeu
삐 ppi
한글 이름 로마자 표기법
사 sa 삭 sak 산 san 살 sal
삼 sam 삽 sap 상 sang 샅 sat 새 sae
색 saek 생 saeng 서 seo 석 seok 선 seon
설 seol 섬 seom 섭 seop 성 seong 세 se
셔 syeo 소 so 속 sok 손 son 솔 sol
솟 sot 송 song 쇄 swae 쇠 soe 수 su
숙 suk 순 sun 술 sul 숨 sum 숭 sung
쉬 swi 스 seu 슬 seul 슴 seum 습 seup
승 seung 시 si 식 sik 신 sin 실 sil
심 sim 십 sip 싱 sing 싸 ssa 쌍 ssang
쌔 ssae 쏘 sso 쑥 ssuk 씨 ssi
한글 이름 로마자 표기법
아 a
악 ak 안 an 알 al 암 am 압 ap
앙 ang 앞 ap 애 ae 액 aek 앵 aeng
야 ya 약 yak 얀 yan 양 yang 어 eo
억 eok 언 eon 얼 eol 엄 eom 업 eop
에 e 여 yeo 역 yeok 연 yeon 열 yeol
염 yeom 엽 yeop 영 yeong 예 ye 오 o
옥 ok 온 on 올 ol 옴 om 옹 ong
와 wa 완 wan 왈 wal 왕 wang 왜 wae
외 oe 왼 oen 요 yo 욕 yok 용 yong
우 u 욱 uk 운 un 울 ul 움 um
웅 ung 워 wo 원 won 월 wol 위 wi
유 yu 육 yuk 윤 yun 율 yul 융 yung
윷 yut 으 eu 은 eun 을 eul 음 eum
읍 eup 응 eung 의 ui 이 i 익 ik
인 in 일 il 임 im 입 ip 잉 ing
한글 이름 로마자 표기법
자 ja 작 jak 잔 jan 잠 jam 잡 jap
장 jang 재 jae 쟁 jaeng 저 jeo 적 jeok
전 jeon 절 jeol 점 jeom 접 jeop 정 jeong
제 je 조 jo 족 jok 존 jon 졸 jol
종 jong 좌 jwa 죄 joe 주 ju 죽 juk
준 jun 줄 jul 중 jung 쥐 jwi 즈 jeu
즉 jeuk 즐 jeul 즘 jeum 즙 jeup 증 jeung
지 ji 직 jik 진 jin 질 jil 짐 jim
집 jip 징 jing 짜 jja 째 jjae 쪼 jjo
찌 jji
한글 이름 로마자 표기법
차 cha 착 chak 찬 chan 찰 chal
참 cham 창 chang 채 chae 책 chaek 처 cheo
척 cheok 천 cheon cheol 첨 cheom 첩 cheop
청 cheong 체 che 초 cho 촉 chok 촌 chon
총 chong 최 choe 추 chu 축 chuk 춘 chun
출 chul 춤 chum 충 chung 측 cheuk 층 cheung
치 chi 칙 chik 친 chin 칠 chil 침 chim
칩 chip 칭 ching
칩 chip 칭 ching
한글 이름 로마자 표기법
코 ko 쾌 kwae 크 keu 큰 keun 키 ki
한글 이름 로마자 표기법
타 ta 탁 tak 탄 tan
탈 tal 탐 tam 탑 tap 탕 tang 태 tae
택 taek 탱 taeng 터 teo 테 te 토 to
톤 ton 톨 tol 통 tong 퇴 toe 투 tu
퉁 tung 튀 twi 트 teu 특 teuk 틈 teum
티 ti
한글 이름 로마자 표기법
파 pa 판 pan 팔 pal 패 pae
팽 paeng 퍼 peo 페 pe 펴 pyeo 편 pyeon
폄 pyeom 평 pyeong 폐 pye 포 po 폭 pok
표 pyo 푸 pu 품 pum 풍 pung 프 peu
피 pi 픽 pik 필 pil 핍 pip
한글 이름 로마자 표기법
하 ha
학 hak 한 han 할 hal 함 ham 합 hap
항 hang 해 hae 핵 haek 행 haeng 향 hyang
허 heo 헌 heon 험 heom 헤 he 혀 hyeo
혁 hyeok 현 hyeon 혈 hyeol 혐 hyeom 협 hyeop
형 hyeong 혜 hye 호 ho 혹 hok 혼 hon
홀 hol 홉 hop 홍 hong 화 hwa 확 hwak
환 hwan 활 hwal 황 hwang 홰 hwae 횃 hwaet
회 hoe 획 hoek 횡 hoeng 효 hyo 후 hu
훈 hun 훤 hwon 훼 hwe 휘 hwi 휴 hyu
휼 hyul 흉 hyung 흐 heu 흑 heuk 흔 heun
흘 heul 흠 heum 흡 heup 흥 heung 희 hui
흰 huin 히 hi 힘 him

http://viewit.kr/3

Posted by 물색없는세상
2013. 9. 11. 15:45

스토리보드를 구성작업을 하다보면 잔손길이 많이 필요하다.

Wulfsoft사에서 제공하고 있는 "Powermockup" 프로그램을 설치하면 아주 간편하게 끌어 쓰기만하면 쉽게 스토리보드를 구성할 수 있다.

자세한 정보는 이곳을 참조하기 바람. => http://www.powermockup.com/

 

 

 

 


이 프로그램을 설치하면 MS Powerpoint 프로그램에 Add-On 설치가 된다.

설치후 컴퓨터를 파워포인트 재시작하면 상단 리본메뉴 최우측에 새로운 탭이 생성되어 있는 것을 확인할 수 있다.


그리고 화면 우측에 파워목업 스텐실 라이브러리 창이 노출되어 있는 것을 볼 수 있다.

 


 



 


지금껏 노가다로 작업하던 기획자들에게 정말 필요한 프로그램 인것 같다.

더 많은 정보는 Wulfsoft사 홈페이지에서 확인바람! http://www.powermockup.com/


끝으로 라이센스 가격정보는 아래와 같다.

 


 

Posted by 물색없는세상
2013. 4. 15. 19:13

■ 실행 명령어 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━


calc : 계산기
charmap : 문자표
cleanmgr : 디스크정리
clipbrd : 클립보드에 복사된 내용 표시
control : 제어판
dfrg.msc : 디스크 조각모음
dxdiag : 다이렉트X 진단도구 및 그래픽과 사운드의 세부정보를 보여줌
eudcedit : 사용자 정의 문자 편집기
explorer : 탐색기
magnify : 돋보기
mobsync : 동기화
msconfig : 시작프로그램 제어등 많은기능 제공
msinfo32 : 시스템정보
mstsc : 원격 데스크톱 연결
netstat -na : 현재 열린포트와 TCP/IP 프로토콜정보를 보여줌
: 열린포트로 트라이목마형 바이러스 침투 유무확인가능
notepad : 메모장
ntbackup : 백업 및 복원 마법사
osk : 화상키보드
pbrush 또는 mspaint : 그림판
ping 사이트주소 : 핑테스트 해당 사이트의 인터넷연결 유무 확인
regedit : 레지스트리 편집기
sfc : 시스템 파일 검사기
- 시스템 파일을 검사한후 깨지거난 손실된 파일을 원본 압축파일에서 찾아서 복원시켜줌
단, 윈2000에서는 cmd실행 후 sfc사용 - 마지막 설정된 값을 다음 윈도우부팅시 곧바로 실행됨
sndrec32 : 녹음기
sndvol32 : 시스템 사운드 등록정보,볼륨조절
sysedit : autoexec.bat, config.sys, win.ini, system.ini 시스템구성편집기
systray : 사운드 볼륨설정 노란색 스피커 아이콘을 트라이목록에 띄움
telnet open 사이트주소 : 텔넷접속명령어
tourstart : 윈도우 기능안내 html 문서표시
wab : 주소록
winipcfg : 인터넷에 접속된 자신의 아이피 주소를 보여줌 ( 단, 윈2000 이상은 ipconfig로 변경됨 )
winmine : 지뢰찾기;
winver : 윈도우 버전확인
wmplayer : 윈도우 미디어 플레이어
wordpad : 워드패드
wscui.cpl : 보안센터
wupdmgr : 윈도우업데이트

■ msc 명령어 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━


certmgr.msc : 인증서 관리
ciadv.msc : 인덱싱 서비스
compmgmt.msc : 컴퓨터 관리
devmgmt.msc : 장치관리자
dfrg.msc : 디스크 조각 모음
diskmgmt.msc : 디스크 관리
eventvwr.msc : 이벤트 뷰어 (이벤트 로그)
fsmgmt.msc : 공유 폴더 (공유 폴더 관리)
gpedit.msc : 그룹 정책
lusrmgr.msc : 로컬 사용자 및 그룹
ntmsmgr.msc : Removable Storage
ntmsoprq.msc : 이동식 저장소 운영자 요청
perfmon.msc : 성능
rsop.msc : 정책의 결과 집합
secpol.msc : 로컬 보안 설정
services.msc : 서비스
wmimgmt.msc : WMI 서비스 구성
comexp.msc : comexp 구성 요소 서비스
control userpasswords2 : 사용자 계정

 

http://blog.naver.com/lunarhorizon/100036450897

 

Posted by 물색없는세상
2013. 4. 4. 11:00

################################################

접근통제 취약점

################################################

□ 취약한 프로그래밍 예

<HTML>
<HEAD><TITLE> 관리자 페이지 </TITLE>
<SCRIPT language="JavaScript“>
function getCookie(name)
var cname = name +"=";
var dc = document.cookie;

if(dc.length > 0)
begin = dc.indexOf(cname);
if(begin != -1)
begin += cname.length;
end = dc.indexOf(";", begin);

if(end == -1) end = dc.length;
retrun unescape(dc.substring(begin, end));


return null;

function getValue(element)
var value = getCookie(element.name);
if(value != null) element.value = value;

</SCRIPT>
</HEAD>
<BODY>
<SCRIPT language="JavaScript“>
var auth;
auth = getCookie("logged_in");

if(auth != 1) // 인증 성공 쿠키가 없을경우 Main Page로 이동
window.location = "http://victim.com/login.html";

</SCRIPT>

관리자 페이지 내용

==========================================================

□ 안전한 프로그래밍 예

o ASP

<%
If myfunc_userauth(userid, userpw) <> 1 Then 'DB에서 사용자 인증을 처리
Response.write "인증 실패"
Else
If Request.ServerVariables("REMOTE_ADDR") <> "10.10.1.1" Then' 관리자 IP 확인
Response.write "관리자 IP가 아닙니다."
Response.write "인증실패“
LogSave(userid, user_ip, 0)'접속에 실패한 ID 및 IP 기록
Else
Session("logged_in") = 1'인증에 성공했을경우 logged_in 에 1의 값을 셋팅
Session("userid") = userid
Session("user_ip") = Request.ServerVariables("REMOTE_ADDR")

LogSave($userid, $user_ip)'접속에 사용한 ID 및 IP 기록

... 중략 ...
End If
End If
%>


o PHP

<?PHP
@session_start(); //세션 데이터를 초기화
if(!myfunc_userauth($userid, $userpw) || $_SERVER["REMOTE_ADDR'] != "10.10.1.1")
//DB 에서 사용자 인증을 처리, 관리자 IP인지 확인
print "인증 실패";
LogSave(userid, user_ip, 0)'접속에 실패한 ID 및 IP 기록
exit;//인증 실패시 종료


//인증에 성공한 경우 처리 해야 되는 부분
if (!session_is_registered("logged_in"))

$logged_in = 1;//인증에 성공했을경우 logged_in 에 1의 값을 셋팅
$user_ip = $_SERVER["REMOTE_ADDR"];
session_register("logged_in");//인증 결과 저장
session_register("userid");//사용자 ID를 저장
session_register("user_ip");//사용자 IP를 저장

LogSave($userid, $user_ip);// 접속한 사용자 ID 및 IP 기록
... 중략 ...


o JSP

<%@ page contentType="text/html;charset=euc-kr" %>
<%@ page import="java.util.* " %>
<%@ page import="java.sql.* " %>
<%
//HttpSession session = request.getSession(true);
String user_ip = request.getRemoteAddr();

// form 에서 사용자 id와 사용자 password를 아래 변수로 전달
if(!myfunc_userauth(userid, userpw) || !user_ip.equals("10.10.1.1"))
//DB 에서 사용자 인증을 처리, 관리자 IP인지 확인
out.println "인증 실패";
LogSave(userid, user_ip, 0)'접속에 실패한 ID 및 IP 기록
else
//인증에 성공한 경우 처리 해야 되는 부분
session.putValue("logged_in","logok");
session.putValue("userid",userid);
session.putValue("user_ip", user_ip);

LogSave(userid, user_ip);// 접속한 사용자 ID 및 IP기록
...

==========================================================

##################################################

부적절한 파라미터 - 소스

##################################################


□ ASP


o 취약한 프로그래밍 예

<%
strSize = Request.QueryString("font_size")'사용자로부터 폰트의 크기 입력

Response.Write "<HTML><TITLE>사용자 입력값 검증</TITLE></HEAD>"
Response.Write "<BODY>"
Response.Write "<FONT size=" & strSize & ">글자 크기 조절</FONT>"

' ... 중략 ...

===========================================================

o 안전한 프로그래밍 예

<%
Size = Request.QueryString("font_size")' 사용자로부터 폰트의 크기 입력

Size = CInt(Size)' 입력되는 값을 정수로 형 변환

Response.Write "<HTML><TITLE>사용자 입력값 검증</TITLE></HEAD>"
Response.Write "<BODY>"
Response.Write "<FONT size=" & Size ">글자 크기 조절</FONT>"

' ... 중략 ...

============================================================

□ PHP


o 취약한 프로그래밍 예


<?PHP
include "./inc/dbconn.inc";// DB 연결 헤더
include $language . "/head.html";// 각 국가 언어별 HTML 출력

$conn = mysql_connect($SERVER, $USER, $PASSWD);
$query = "select count(*) from main_tbl";

// ... 중략 ...

============================================================

o 안전한 프로그래밍 예

<?PHP
@require_once "./inc/dbconn.inc";// DB 연결 헤더
$default_lang = "korea";// 기본값 설정

if(!file_exists($language."/head.html")) // 파일이 존재하는지 체크
if(eregi(":\/\/", $language)) $language = $default_lang;// URL이 포함되는지 체크
else // 파일이 없는 경우 기본값 설정
$language = $default_lang;

@require_once $language . "/head.html";// 각 국가 언어별 HTML 출력

$conn = @mysql_connect($SERVER, $USER, $PASSWD);
$query = "select count(*) from main_tbl";

// ... 중략 ...

==============================================================

□ JSP

o 취약한 프로그래밍 예

<%@ page contentType="text/html;charset=euc-kr" %>
<%@ page import="java.util.* " %>

<HTML><HEAD><TITLE> 사이트 접속 불가 </TITLE>
<META HTTP-EQUIV="Refresh" CONTENT="10;URL=http://victim.com/bye.html">
</HEAD>
<BODY>
<%
out.print("지금 사용하고 계신 ");
out.print(request.getHeader("USER-AGENT"));
out.print(" 브라우져로는 사이트 접속이 불가능 합니다.");
%>
</BODY>
</HTML>

=========================================================

o 안전한 프로그래밍 예

<%@ page contentType="text/html;charset=euc-kr" %>
<%@ page import="java.util.* " %>

<HTML><HEAD><TITLE> 사이트 접속 불가 </TITLE>
<META HTTP-EQUIV="Refresh" CONTENT="10;URL=http://victim.com/bye.html">
</HEAD>
<BODY>
<%
String user_agent = request.getHeader("USER-AGENT");

// HTTP HEADER 중 USER_AGENT를 변경 하여 크로스사이트 스크립트 공격하는 것을 차단
user_agent = user_agent.replaceAll("<","&lt;");// HTML tag가 있을 경우 제거
user_agent = user_agent.replaceAll(">","&gt;");

out.print("지금 사용하고 계신 ");
out.print(user_agent);
out.print(" 브라우져로는 사이트 접속이 불가능 합니다.");

%>
</BODY>
</HTML>

==========================================================

##################################################

취약한 세션 관리 (Cookie Injection) - 소스

##################################################

□ ASP


o 취약한 프로그래밍 예

'login_ok.asp 사용자 인증 처리를 하는 스크립트
<%
' form 에서 사용자 id와 사용자 password를 아래 변수로 전달
If myfunc_userauth(userid, userpw) <> 1 Then ' DB 에서 사용자 인증을 처리하는 부분
Response.write "인증 실패"
Else
'인증에 성공한 경우 처리 해야 되는 부분
Response.Cookies("logged_in") = 1
' 인증에 성공했을경우 logged_in 에 1의 값을 셋팅
Response.Cookies("userid") = userid
End If
...
%>

user_menu.asp' 사용자 검증이 필요한 페이지
<%
IF Request.Cookies("logged_in") = 1 Then
Response.write "허가된 사용자 입니다."
Else
Response.write "허가되지 않은 사용자 입니다."
End If
%>

===========================================================

o 안전한 프로그래밍 예

‘login_ok.asp 사용자 인증 처리를 하는 스크립트
<%
' form 에서 사용자 id와 사용자 password를 아래 변수로 전달
If myfunc_userauth(userid, userpw) <> 1 Then ' DB 에서 사용자 인증을 처리하는 부분
Response.write "인증 실패"
Else
'인증에 성공한 경우 처리 해야 되는 부분

If Session("logged_in") <> 1 Then
Session("logged_in") = 1'인증에 성공했을경우 logged_in 에 1의 값을 셋팅
Session("userid") = userid
Session("user_ip") = Request.Servervariables("REMOTE_ADDR")
End If
End If
...
%>

‘user_menu.asp 사용자 검증이 필요한 페이지
<%
IF Session("user_ip) = Request.Servervariables("REMOTE_ADDR") AND Session("logged_in") = 1 Then
'인증에 성공한 IP와 사용자 IP를 비교, 인증 여부 비교
'...
Else
Response.write "허가되지 않은 사용자 입니다."
End If
%>

==========================================================

□ PHP

o 취약한 프로그래밍 예

//login_ok.php// 사용자 인증 처리를 하는 스크립트
<?PHP
// form 에서 사용자 id와 사용자 password를 아래 변수로 전달
if(!myfunc_userauth($userid,$userpw)) //DB 에서 사용자 인증을 처리하는 부분
print "인증 실패";
exit;//인증 실패시 종료


//인증에 성공한 경우 처리 해야 되는 부분
setcookie("logged_in", "1");//인증에 성공했을경우 logged_in 에 1의 값을 셋팅
setcookie("userid", $userid);
...
?>

//user_menu.php// 사용자 검증이 필요한 페이지
<?PHP
if($_COOKIE["logged_in"] == 1)
echo "인증 성공: " . $_COOKIE["userid"];

?>

===========================================================

o 안전한 프로그래밍 예

//login_ok.php// 사용자 인증 처리를 하는 스크립트
<?PHP
@session_start(); //세션 데이터를 초기화
// form 에서 사용자 id와 사용자 password를 아래 변수로 전달
if(!myfunc_userauth($userid,$userpw)) //DB 에서 사용자 인증을 처리하는 부분
print "인증 실패";
exit;//인증 실패시 종료

//인증에 성공한 경우 처리 해야 되는 부분
if (!session_is_registered("logged_in"))

$logged_in = 1;//인증에 성공했을경우 logged_in 에 1의 값을 셋팅
$user_ip = $_SERVER["REMOTE_ADDR"];
session_register("logged_in");//인증 결과 저장
session_register("userid");//사용자 ID를 저장
session_register("user_ip");//사용자 IP를 저장

...
?>

//user_menu.php// 사용자 검증이 필요한 페이지
<?PHP
session_start();
if(strcmp($_SESSION['user_ip'], $_SERVER['REMOTE_ADDR']) == 0 && session_is_registered('logged_in'))
//인증에 성공한 IP와 사용자 IP를 비교, 인증 여부 비교
//...
else
print "허가되지 않은 사용자 입니다.";
exit;

?>

=========================================================

□ JSP

o 취약한 프로그래밍 예

<%@ page contentType="text/html;charset=euc-kr" %>
<%@ page import="java.util.*" %>
<%@ page import="java.sql.* " %>
//login_ok.jsp// 사용자 로그인 처리를 하는 스크립트
<%
// form 에서 사용자 id와 사용자 password를 아래 변수로 전달
if(!myfunc_userauth(userid, userpw)) //DB 에서 사용자 인증을 처리하는 부분
out.println "인증 실패";
else
//인증에 성공한 경우 처리 해야 되는 부분
Cookie cookie1 = new Cookie("logged_in", "1");
response.addCookie(cookie1);//인증에 성공했을경우 logged_in 에 1의 값을 셋팅
Cookie cookie2 = new Cookie("userid", userid);
response.addCookie(cookie2);
...
%>

//user_menu.jsp// 사용자 검증이 필요한 페이지
<%
Cookie[] cookies = request.getCookies();
for(int i=0; i< cookies.length; i++)
Cookie thisCookie = cookie[i];
if(thisCookie.getName.equals("logged_in"))
String logged_in = thisCookie.getValue();
if(thisCookie.getName.equals("userid"))
String userid = thisCookie.getValue();


if(logged_in.equals("1"))
out.println("인증 성공: " + userid);

%>

==========================================================

o 안전한 프로그래밍 예

<%@ page contentType="text/html;charset=euc-kr" %>
<%@ page import="java.util.*" %>
<%@ page import="java.sql.* " %>
//login_ok.jsp// 사용자 로그인 처리를 하는 스크립트
<%
//HttpSession session = request.getSession(true);
// form 에서 사용자 id와 사용자 password를 아래 변수로 전달
if(!myfunc_userauth(userid, userpw)) //DB 에서 사용자 인증을 처리하는 부분
out.println "인증 실패";
else
//인증에 성공한 경우 처리 해야 되는 부분
session.putValue('logged_in',"1");
session.putValue('userid',userid);
session.putValue('user_ip',request.getRemoteAddr());
...
%>

//user_menu.jsp// 사용자 검증이 필요한 페이지
<%
//HttpSession session = request.getSession(true);
String user_ip = session.getValue("user_ip");

if(user_ip.equals(request.getRemoteAddr()) && logged_in.equals("1"))
//인증에 성공한 IP와 사용자 IP를 비교, 인증 여부 비교
//...
else
out.println "허가되지 않은 사용자 처리.";

%>

=======================================================

###############################################

악의적인 명령 실행(XSS) - 소스

###############################################

□ ASP

o 취약한 프로그래밍 예

<%
Set objDBConn = Server.CreateObject("ADODB.Connection")' 게시물 읽기
Set objRs = Server.CreateObject("ADODB.RecordSet")
objDBConn.Open "board", "user", "passwd"

query = "SELECT id, name, memo FROM board_tbl WHERE id=1"
objRs.Open query, objDBConn

memo = objRs("memo")
Response.write "게시물 내용-" & memo & "<BR>"' DB에서 게시판의 내용 출력

============================================================

o 안전한 프로그래밍 예

If use_html Then' HTML tag를 사용하게 할 경우 부분 허용
memo = Server.HTMLEncode(memo) 'HTML tag를 모두 제거

' 허용할 HTML tag만 변경
memo = replace(memo, "&lt;p&gt;", "<p>")
memo = replace(memo, "&lt;P&gt;", "<P>")
memo = replace(memo, "&lt;br&gt;", "<br>")
memo = replace(memo, "&lt;BR&gt;", "<BR>")

Else' HTML tag를 사용하지 못하게 할 경우
memo = Server.HTMLEncode(memo)' HTML encoding 수행
memo = replace(memo, "<", "&lt;")
memo = replace(memo, ">", "&gt;")
End If

Response.write "게시물 내용-" & memo & "<BR>"

============================================================

□ PHP

o 취약한 프로그래밍 예

$query = "SELECT id, name, memo FROM board_tbl WHERE id=1";// 게시물 읽기
$result = mysql_query($query, $connect);

while($row = mysql_fetch_array($result))
$name = $row[name];
$memo = $row[memo];
echo "게시물 내용-" . $memo . "<BR>\n";// DB에서 게시판의 내용을 출력

=============================================================

o 안전한 프로그래밍 예

$use_tag = "img,font,p,br";// 허용할 HTML tag

if($use_html == 1) // HTML tag를 사용하게 할 경우 부분 허용
$memo = str_replace("<", "&lt;", $memo);// HTML TAG를 모두 제거

$tag = explode(",", $use_tag);
for($i=0; $i<count($tag); $i++) // 허용할 TAG만 사용 가능하게 변경
$memo = eregi_replace("&lt;".$tag[$i]." ", "<".$tag[$i]." ", $memo);
$memo = eregi_replace("&lt;".$tag[$i].">", "<".$tag[$i].">", $memo);
$memo = eregi_replace("&lt;/".$tag[$i], "</".$tag[$i], $memo);

else // HTML tag를 사용하지 못하게 할 경우

// $memo = htmlspecialchars($memo);
// htmlspecialchars() 사용시 일부 한글이 깨어지는 현상이 발생 할 수 있음

$memo = str_replace("<", "&lt;", $memo);
$memo = str_replace(">", "&gt;", $memo);


echo "게시물 내용-" . $memo . "<BR>\n";

===========================================================

□ JSP

o 취약한 프로그래밍 예

Connection conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);
Statement stmt = conn.createStatement();
ResultSet rs=null;

String query = "SELECT memo FROM board_tbl WHERE id=1";
rs = stmt.executeQuery(query);
String memo = rs.getString(1);
out.print("게시물 내용-" + memo + "<BR>");

===========================================================

o 안전한 프로그래밍 예

if(use_html) // HTML tag를 사용하게 할 경우 부분 허용
memo = memo.replaceAll("<","&lt;");//HTML tag를 모두 제거
memo = memo.replaceAll(">","&gt;");

// 허용할 HTML tag만 변경
memo = memo.replaceAll("&lt;p&gt;", "<p>");
memo = memo.replaceAll("&lt;P&gt;", "<P>");
memo = memo.replaceAll("&lt;br&gt;", "<br>");
memo = memo.replaceAll("&lt;BR&gt;", "<BR>");

else // HTML tag를 사용하지 못하게 할 경우
memo = memo.replaceAll("<","&lt;");
memo = memo.replaceAll(">","&gt;");

out.print("게시물 내용-" + memo + "<BR>");

===========================================================

###################################################

버퍼 오버플로우 - 소스

###################################################

□ strcpy() 함수의 대체

o 취약한 프로그래밍 예

void func(char *str) {
char buffer[256];
strcpy(buffer, str);
return;
}

============================================================

o 안전한 프로그래밍 예

void func(char *str) {
char buffer[256];
strncpy(buffer, str, sizeof(buffer)-1);
buffer[sizeof(buffer)-1] = 0;
return;
}

=============================================================

□ strcat() 함수의 대체

o 취약한 프로그래밍 예

void func(char *str) {
char buffer[256];
strcat(buffer, str);
return;
}

==============================================================

o 안전한 프로그래밍 예

void func(char *str) {
char buffer[256];
strncat(buffer, str, sizeof(buffer)-1);
return;
}

==============================================================

□ sprintf() 함수의 대체

o 취약한 프로그래밍 예

void func(char *str) {
char buffer[256];
sprintf(buffer, "%s", str);
return;
}
========================================================

□ gets() 함수의 대체

o 취약한 프로그래밍 예

void func(char *str) {
char buffer[256];
gets(buffer);
return;
}

========================================================

o 안전한 프로그래밍 예

void func(char *str) {
char buffer[256];
fgets(buffer, sizeof(buffer)-1, stdin);
return;
}

========================================================

□ scanf(), sscanf(), fscanf() 함수의 대체

o 취약한 프로그래밍 예

void func() {
char buffer[256];
int num;
num = fscanf(stdio, "%s", buffer); char buffer[256];
return;
}

========================================================

o 안전한 프로그래밍 예

void func() {
char buffer[256];
int num;
num = fscanf(stdio, "%255s", buffer);
return;
}

========================================================

□ C로 개발한 프로그램

o 버퍼오버플로우 취약점 예제

#include <stdio.h>
#include <string.h>
#define FILENAME "/usr/local/apache/cgi-bin/counter.dat"

int main() {
FILE *fp;
int counter=0;
char envc[255], *env;

env = getenv("HTTP_USER_AGENT");

printf("Content-Type: text/html \n\n");

if (!env)
exit(1);

strcpy(envc, env);
strtok(envc," ");

if((fp=fopen(FILENAME,"rt")) == NULL ) exit(1);
fscanf(fp,"%d",&counter);
fclose(fp);
printf("<FONT size=2><B>VISIT</B>: %d / <B>BROWSER</B>: %s</FONT>\n",counter, envc);

if((fp=fopen(FILENAME,"wt")) == NULL ) exit(1);
fprintf(fp,"%d\n",counter+1);
fclose(fp);

return 0;
}

======================================================

o 버퍼오버플로우 취약점 제거 예제

#include <stdio.h>
#include <string.h>
#define FILENAME "/usr/local/apache/cgi-bin/counter.dat"

int main() {
FILE *fp;
int counter=0;
char envc[255], *env;

env = getenv("HTTP_USER_AGENT");
printf("Content-Type: text/html \n\n");

if (!env)
exit(1);


strncpy(envc, env, sizeof(envc)-1);
strtok(envc," ");

if((fp=fopen(FILENAME,"rt")) == NULL ) exit(1);
fscanf(fp,"%d",&counter);
fclose(fp);
printf("<FONT size=2><B>VISIT</B>: %d / <B>BROWSER</B>: %s</FONT>\n",counter, envc);


if((fp=fopen(FILENAME,"wt")) == NULL ) exit(1);
fprintf(fp,"%d\n",counter+1);
fclose(fp);

return 0;
}

======================================================

##############################################

악의적인 명령어 주입 공격 (SQL Injection) - 소스

##############################################

□ ASP

o 취약한 SQL Injection 예제

prodId = Request.QueryString("productId")

Set conn = server.createObject("ADODB.Connection")
Set rs = server.createObject("ADODB.Recordset")

query = "select prodName from products where id = " & prodId

conn.Open "Provider=SQLOLEDB; Data Source=(local);
Initial Catalog=productDB; User Id=dbid; Password="
rs.activeConnection = conn
rs.open query

If not rs.eof Then
response.write "제품명" & rs.fields("prodName").value
Else
response.write "제품이 없습니다"
End If

=======================================================

o 안전한 SQL Injection 예제

prodId = Request.QueryString("productId")
prodId = replace(prodId, "'", "''")' 특수문자 제거
prodId = replace(prodId, ";", "")
set conn = server.createObject("ADODB.Connection")
set rs = server.createObject("ADODB.Recordset")
query = "select prodName from products where id = " & prodId
conn.Open "Provider=SQLOLEDB; Data Source=(local);
Initial Catalog=productDB; User Id=dbid; Password="
rs.activeConnection = conn
rs.open query
If not rs.eof Then
response.write "제품명" & rs.fields("prodName").value
Else
response.write "제품이 없습니다"
End If

=======================================================

□ PHP

o 취약한 SQL Injection 예제

$query = "SELECT id, password, username FROM user_table WHERE id='$id'";
// 사용자로부터 입력받은 id 값을 사용자 table에서 조회
$result = OCIParse($conn, $query);
if (!OCIExecute($result))
echo "<META http-equiv=\"refresh\" content=\"0;URL=http://victim.com\">";
// 메인 페이지로 redirect

OCIFetchInto($result, &$rows);
... 중략 ...

=======================================================

o 안전한 SQL Injection 예제

$query = sprintf("SELECT id,password,username FROM user_table WHERE id='%s';",addslashes($id));
// id변수를 문자형으로 받고, id변수의 특수문자를 일반문자로 변환한다.

// @ 로 php 에러 메시지를 막는다.
$result = @OCIParse($conn, $query);
if (!@OCIExecute($result))
error("SQL 구문 에러");
exit;

@OCIFetchInto($result,&$rows);
... 중략 ...

========================================================

□ JSP

o 취약한 SQL Injection 예제

String sql = "SELECT * FROM user_table" + " WHERE id = " + response.getParameter("id") + " AND password = " + response.getParameter("password");

Class.forName("org.gjt.mm.mysql.Driver");
conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);

stmt = conn.createStatement();
rs = stmt.executeQuery(query);

while(rs.next())

========================================================

o 안전한 SQL Injection 예제

String sql = "SELECT * FROM user_table" + " WHERE id = ?" + " AND password = ?";
ResultSet rs = null;
PreparedStatement pstmt = null;
try
conn = DBManager.getConnection();
pstmt = conn.prepareStatement(sql);

pstmt.setString(1, request.getParameter("id"));
pstmt.setString(2, request.getParameter("password"));

rs = pstmt.executeQuery();

=========================================================

#################################################

업로드 취약점 - 소스

#################################################

□ ASP

o 취약한 파일 업로드 예

<%
Set Up = Server.CreateObject("SiteGalaxyUpload.Form")

uploadPath = server.mappath(".") & "\upload\"' 업로드 디렉토리

Fname = Up("file1")
if Fname <> "" then'파일 첨부가 되었으면
fileName=Mid(Fname,InstrRev(Fname,"\")+1)'파일이름부분 추출
savePath = uploadPath & fileName

Set fso = CreateObject("Scripting.FileSystemObject")
Up("file1").SaveAs(savePath)
response.write(savePath & " 저장 완료")
else
response.write("Error")
end if

Set Up = nothing
%>

========================================================

o 안전한 파일 업로드 예

<%
Set Up = Server.CreateObject("SiteGalaxyUpload.Form")
Path1 = server.mappath(".") & "\upload\"

Fname = Up("file1")

if Fname <> "" then'파일 첨부가 되었으면

if Up("file1").Size > 10240 then' 용량 제한
Response.Write "용량 초과"
Response.End
end if

if Up("file1").MimeType <> "image" then' 이미지만 업로드 허용
Response.Write "이미지 파일이 아닙니다."
Response.End
end if

Filename=Mid(Fname,InstrRev(Fname,"\")+1)'파일이름부분 추출

' 중복시에 파일이름부분을 변경하기 위해 분리를 한다
Farry=split(Filename,".")'.을 기준으로 분리
preFname=Farry(0)'파일이름 앞부분
extFname=Farry(1)'파일의 확장자

' 저장할 전체 path를 만든다, 파일이름을 구한다
Path2 = Path1 & Filename
saveFname=preFname & "." & extFname


Set fso = CreateObject("Scripting.FileSystemObject")
countNo = 0' 파일 중복될경우 셋팅 값
fExist=0' 같은 이름의 파일 존재 체크

Do until fExist = 1
If(fso.FileExists(Path2)) Then
countNo = countNo + 1
Path2 = Path1 & preFname & countNo & "." & extFname
saveFname=preFname & countNo & "." & extFname
else
fExist=1
End If
Loop

Up("file1").SaveAs(Path2)
response.write(saveFname & " 저장완료")
else
response.write("Error")
end if

Set Up = nothing
%>

=====================================================================

□ PHP

o 취약한 파일 업로드 예

<?php
$uploaddir = '/var/www/uploads/';

$uploadfile = $uploaddir. $_FILES['userfile']['name'];

if(copy($_FILES['userfile']['tmp_name'], $uploadfile))
print "성공적으로 업로드 되었습니다.";
print_r($_FILES);
else
print "파일 업로드 실패";
print_r($_FILES);

?>

=====================================================================

o 안전한 파일 업로드 예

<?php
$uploaddir = '/var/www/uploads/';

//파일 사이즈가 0byte 보다 작거나 최대 업로드 사이즈보다 크면 업로드를 금지 시킨다.
if($_FILES['userfile']['name'])
if($_FILES['userfile']['size'] <= 0) // 최대 업로드 사이즈 체크 삽입
print "파일 업로드 에러";
exit;

//파일 이름의 특수문자가 있을 경우 업로드를 금지 시킨다.
if (eregi("[^a-z0-9\._\-]",$_FILES['userfile']['name']))
print "파일 이름의 특수문자 체크";
exit;

//파일 확장자중 업로드를 허용할 확장자를 정의한다.
$full_filename = explode(".", $_FILES['userfile']['name']);
$extension = $full_filename[sizeof($full_filename)-1];

/* PHP의 경우 확장자 체크를 할 때 strcmp(확장자,"php3"); 로 체크를 하게 되면
pHp3 이나 phP3는 구별을 하지 못하게 되므로 strcasecmp처럼 대소문자 구별을 하지
않고 비교하는 함수를 사용한다. 또한 .를 기준으로 하여 확장자가 하나로 간주하고
프로그램을 할 경우 file.zip.php3 이라고 올린다면 zip파일로 인식하고 그냥 첨부가
되므로 아래와 같이 제일 끝에 존재하는 확장자를 기준으로 점검하도록 한다. */

$extension= strtolower($extension);
if (!( ereg($extension","hwp") || ereg($extension","pdf") || ereg($extension","jpg")) )
print "업로드 금지 파일 입니다";
exit;


$uploadfile = $uploaddir. $_FILES['userfile']['name'];
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile))
print "파일이 존재하고, 성공적으로 업로드 되었습니다.";
print_r($_FILES);
else
print "파일 업로드 공격의 가능성이 있습니다! 디버깅 정보입니다:\n";
print_r($_FILES);

?>

=====================================================================

□ JSP

o 취약한 파일 업로드 예

<%@ page contentType="text/html;charset=euc-kr" %>
<%@ page import="com.oreilly.servlet.MultipartRequest,com.oreilly.servlet.multipart.DefaultFileRenamePolicy, java.util.*"%>
<%
String savePath="/var/www/uploads";// 업로드 디렉토리
int sizeLimit = 5 * 1024 * 1024 ;// 업로드 파일 사이즈 제한

try
MultipartRequest multi=new MultipartRequest(request, savePath, sizeLimit, new DefaultFileRenamePolicy());
Enumeration formNames=multi.getFileNames();// 폼의 이름 반환
String formName=(String)formNames.nextElement();
String fileName=multi.getFilesystemName(formName);// 파일의 이름 얻기

if(fileName == null)
out.print("Error");
else
fileName=new String(fileName.getBytes("8859_1"),"euc-kr");
out.print("User Name : " + multi.getParameter("userName") + "<BR>");
out.print("Form Name : " + formName + "<BR>");
out.print("File Name : " + fileName);


catch(Exception e)
out.print("Error");

%>

=====================================================================

o 안전한 파일 업로드 예

<%@ page contentType="text/html;charset=euc-kr" %>
<%@ page import="com.oreilly.servlet.MultipartRequest,com.oreilly.servlet.multipart.DefaultFileRenamePolicy, java.util.*"%>
<%
String savePath="/var/www/uploads";// 업로드 디렉토리
int sizeLimit = 5 * 1024 * 1024 ; // 업로드 파일 사이즈 제한

try
MultipartRequest multi=new MultipartRequest(request, savePath, sizeLimit, "euc-kr", new DefaultFileRenamePolicy());
Enumeration formNames=multi.getFileNames(); // 폼의 이름 반환
String formName=(String)formNames.nextElement();
String fileName=multi.getFilesystemName(formName); // 파일의 이름 얻기

String file_ext = fileName.substring(fileName.lastIndexOf('.') + 1);
if(!( file_ext.equalsIgnoreCase("hwp") || file_ext.equalsIgnoreCase("pdf") || file_ext.equalsIgnoreCase("jpg")) )
out.print("업로드 금지 파일");


if(fileName == null)
out.print("파일 업로드 실패");
else
fileName=new String(fileName.getBytes("8859_1"),"euc-kr"); // 한글인코딩
out.print("File Name : " + fileName);

catch(Exception e)

===========================================================

###################################################

다운로드 취약점 - 소스

###################################################

□ ASP

o 취약한 파일 다운로드 예

<%
file = Request.Form ("file")'파일 이름

Response.ContentType = "application/unknown"'ContentType 선언
Response.AddHeader "Content-Disposition","attachment; filename=" & file

Set objStream = Server.CreateObject("ADODB.Stream")'Stream 이용

objStream.Open
objStream.Type = 1
objStream.LoadFromFile Server.MapPath("./upfiles/")&"\"& file '서버 절대경로

download = objStream.Read
Response.BinaryWrite download

Set objStream = nothing'객체 초기화

==========================================================

o 안전한 파일 다운로드 예제

<%
file = Request.Form ("file")'파일 이름

Response.ContentType = "application/unknown"'ContentType 선언
Response.AddHeader "Content-Disposition","attachment; filename=" & file

Set objStream = Server.CreateObject("ADODB.Stream")'Stream 이용

strFile = Server.MapPath("./upfiles/") & "\" & file '서버 절대경로
strFname=Mid(Fname,InstrRev(file,"\")+1) '파일 이름 추출, ..\ 등의 하위 경로 탐색은 제거 됨
strFPath = Server.MapPath("./upfiles/") & "\" & strFname '웹서버의 파일 다운로드 절대 경로

If strFile = strFPath Then'사용자가 다운 받는 파일과 웹서버의 파일 다운로드 경로가 맞는지 비교
objStream.Open
objStream.Type = 1
objStream.LoadFromFile strFile

download = objStream.Read
Response.BinaryWrite download
End If
Set objstream = nothing'객체 초기화
%>

==========================================================

□ PHP

o 취약한 파일 다운로드 예

$dn_path = "/var/www/data/$up_dir/$dn_file_name";

//파일 전송 루틴
header("Content-Type: doesn/matter");
header("Content-Length: ".filesize("$dn_path"));
header("Content-Disposition: filename=".$dn_file_name]);
header("Content-Transfer-Encoding: binary\r\n");
header("Pragma: no-cache");
header("Expires: 0");

==========================================================

o 안전한 파일 다운로드 예

if (preg_match("/[^a-z0-9_-]/i",$up_dir))
print "디렉토리에 특수문자 체크";
exit;

if (preg_match("/[^\xA1-\xFEa-z0-9._-]|\.\./i",urldecode($dn_file_name)))
print "파일이름에 특수문자 체크";
exit;

$dn_path = "/var/www/data/$up_dir/$dn_file_name";
if (!file_exists($dn_path))
print "파일이 존재여부 체크";
exit;

//파일 전송 루틴
header("Content-Type: doesn/matter");
header("Content-Length: ".filesize("$dn_path"));
header("Content-Disposition: filename=".$dn_file_name]);
header("Content-Transfer-Encoding: binary\r\n");
header("Pragma: no-cache");
header("Expires: 0");

===========================================================

□ JSP

o 취약한 파일 다운로드 예

String UPLOAD_PATH= "/var/www/upload/";
String filename= response.getParameter("filename");
String filepathname = UPLOAD_PATH + filename;

// 파일 전송 루틴
response.setContentType("application/unknown; charset=euc-kr");
response.setHeader("Content-Disposition","attachment;filename=" + filename + ";");
response.setHeader("Content-Transfer-Encoding:" , "base64");

BufferedInputStream in = new BufferedInputStream(new FileInputStream(filepathname));

==========================================================

o 안전한 파일 다운로드 예

String UPLOAD_PATH= "/var/www/upload/";
String filename= response.getParameter("filename");
String filepathname = UPLOAD_PATH + filename;

if(filename.equalsIgnoreCase("..") || filename.equalsIgnoreCase("/"))
// 파일 이름 체크
return 0;

// 파일 전송 루틴
response.setContentType("application/unknown; charset=euc-kr");
response.setHeader("Content-Disposition","attachment;filename=" + filename + ";");
response.setHeader("Content-Transfer-Encoding:" , "base64");

try
BufferedInputStream in = new BufferedInputStream(new FileInputStream(filepathname));
.........
catch(Exception e)
// 에러 체크 [파일 존재 유무등]

==========================================================

##################################################

개발 언어별 로그인 인증 프로세스 예제

##################################################

1. ASP 예제
가. login.html

<html>
<head>
<title> Login </title>
<script>
function check_submit()
if(!login.user_id.value)
alert("아이디를 입력하세요");
login.user_id.focus();
return false;

if(!login.password.value)
alert("아이디를 입력하세요");
login.password.focus();
return false;

return true;

</script>
</head>
<body>
<form method=post action=login.asp onsubmit="return check_submit();" name=login>
<TABLE border=0>
<TR>
<TD>아이디</TD>
<TD><input type=text name="user_id" value="" maxlength=12 size=19></TD>
</TR>
<TR>
<TD>패스워드</TD>
<TD><input type=password name="password" value="" maxlength=12 size=19><input type=submit value="login"></TD>
</TR>
</TABLE>
</form>
</body>
</html>

===========================================================

나. login.asp

<% Option Explicit %>
<%
Dim user_id, password
user_id = Request.Form("user_id")' 사용자로부터 입력 받은 아이디
password = Request.Form("password")' 사용자로부터 입력 받은 패스워드

If UserAuth(user_id, password) <> 1 Then
Response.redirect("/login.html")' 인증 실패시 인증 페이지로 Redirect
Else
If Session("logged_in") <> 1 Then' 인증된 사용자 인지 체크
Session("logged_in") = 1' 인증에 성공했을경우 logged_in 에 1의 값을 셋팅
Session("user_id") = user_id' 사용자 ID 저장
Session("user_ip") = Request.Servervariables("REMOTE_ADDR")' IP 저장
End If
Response.redirect("/main.asp")' 인증 성공시 Main 페이지로 Redirect
End If
%>

<%
Function stripQuotes(strWords)
stripQuotes = replace(strWords, "'", "''")' 특수문자 제거
End Function

Function UserAuth(user_id, user_pwd)' 사용자 인증
Dim objConn, objRs
Dim strConnection, strQuery

Set objConn = Server.CreateObject("ADODB.Connection")
Set objRs = Server.CreateObject("ADODB.RecordSet")

' DB 연결 정보, 별도의 헤더 파일로 관리하여 INCLUDE
strConnection = "DSN=MEMBER;uid=DBUSER;pwd=DBPASSWD"

On Error Resume Next' 에러가 생길경우
objConn.Open strConnection
objRs.ActiveConnection = objConn

strQuery = "SELECT * FROM user_tbl WHERE user_id= '" &_
stripQuotes(user_id) & "' AND password='" &_
stripQuotes(user_pwd) & "'"
objRs.Open strQuery

If objRs.BOF or objRs.EOF Then' 올바른 사용자를 찾지 못했을경우
UserAuth = 0
Else
UserAuth = 1
End If

objRs.Close' DB 연결 해제
Set objRs = Nothing
objConn.Close
Set objConn = Nothing
End Function

===========================================================

다. main.asp

<%
If Session("user_ip") = Request.Servervariables("REMOTE_ADDR") AND Session("logged_in") = 1 Then
Response.Write Session("user_id") & "님은 " & Session("user_ip") & "에서 접속하셨습니다."
'인증에 성공한 IP와 사용자 IP를 비교, 인증 여부 비교
'... 중략 ...
Else
Response.write "허가되지 않은 사용자 입니다."
End If
%>

===========================================================

2. PHP

가. login.html

<html>
<head>
<title> Login </title>
<script>
function check_submit()
if(!login.user_id.value)
alert("아이디를 입력하세요");
login.user_id.focus();
return false;

if(!login.password.value)
alert("아이디를 입력하세요");
login.password.focus();
return false;

return true;

</script>
</head>
<body>
<form method=post action=login.php onsubmit="return check_submit();" name=login>
<TABLE border=0>
<TR>
<TD>아이디</TD>
<TD><input type=text name="user_id" value="" maxlength=12 size=19></TD>
</TR>
<TR>
<TD>패스워드</TD>
<TD><input type=password name="password" value="" maxlength=12 size=19><input type=submit value="login"></TD>
</TR>
</TABLE>
</form>
</body>
</html>

===========================================================

나. login.php

<?PHP
@session_cache_limiter('nocache');
@session_start(); //세션 데이터를 초기화

// form 에서 사용자 id와 사용자 password를 아래 변수로 전달
if(!UserAuth($_POST['user_id'],$_POST['password'])) //DB 에서 사용자 인증 처리하는 부분
header("Location: login.html");
exit;//인증 실패시 종료

//인증에 성공한 경우 처리 해야 되는 부분
if (!session_is_registered("logged_in"))

$logged_in = 1;//인증에 성공했을경우 logged_in 에 1의 값을 셋팅
$user_id = $_POST["user_id"];
$user_ip = $_SERVER["REMOTE_ADDR"];
session_register("logged_in");//인증 결과 저장
session_register("user_id");//사용자 ID를 저장
session_register("user_ip");//사용자 IP를 저장

header("Location: main.php");
?>
<?PHP
function UserAuth($userid, $userpwd)
$connect = mysql_connect("localhost","DBUSER","DBPASSWD");
mysql_select_db("MEMBER");

$strQuery = "SELECT * FROM user_tbl WHERE user_id ='" . addslashes($userid) . "' AND password='" . addslashes($userpwd) . "'";
$result = @mysql_query($strQuery);
if($result)
if(mysql_num_rows($result))
$data = mysql_fetch_array($result);
$userLevel = $data["level"];
@mysql_free_result($result);
@mysql_close($connect);
return 1;

return 0;
@mysql_close($connect);
return 0;
?>

===========================================================

다. main.php

<?PHP
@session_start();
if(strcmp($_SESSION['user_ip'], $_SERVER['REMOTE_ADDR']) == 0 && session_is_registered('logged_in'))
//인증에 성공한 IP와 사용자 IP를 비교, 인증 여부 비교
//... 중략 ...
echo $_SESSION['user_id'] . "님은 " . $_SESSION['user_ip'] . "에서 접속하셨습니다.";
else
echo "허가되지 않은 사용자 입니다.";
exit;

?>

==========================================================

3. JSP

가. login.html

<html>
<head>
<title> Login </title>
<script>
function check_submit()
if(!login.user_id.value)
alert("아이디를 입력하세요");
login.user_id.focus();
return false;


if(!login.password.value)
alert("아이디를 입력하세요");
login.password.focus();
return false;

return true;

</script>
</head>
<body>
<form method=post action=login.jsp onsubmit="return check_submit();" name=login>
<TABLE border=0>
<TR>
<TD>아이디</TD>
<TD><input type=text name="user_id" value="" maxlength=12 size=19></TD>
</TR>
<TR>
<TD>패스워드</TD>
<TD><input type=password name="password" value="" maxlength=12 size=19><input type=submit value="login"></TD>
</TR>
</TABLE>
</form>
</body>
</html>

==========================================================

나. login.jsp

<%@ page contentType="text/html;charset=euc-kr" %>
<%@ page import="java.util.*" %>
<%@ page import="java.sql.* " %>

<%
String DB_URL = "jdbc:mysql://127.0.0.1/MEMBER";// DB 연결 정보, 별도의 헤더 파일로 관리하여 INCLUDE
String DB_USER = "DBUSER";
String DB_PASSWORD= "DBPASSWD";

//HttpSession session = request.getSession(true);// Servlet 의 경우만 추가
String user_ip = request.getRemoteAddr();// 연결된 사용자의 IP 획득
String user_id = null;

Connection conn;
PreparedStatement pstmt = null;
ResultSet rs = null;

try
Class.forName("org.gjt.mm.mysql.Driver");// 드라이버 등록
conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);// DB연결
String query = "SELECT * FROM user_tbl WHERE user_id = ? AND password = ?";
pstmt = conn.prepareStatement(query);

pstmt.setString(1, request.getParameter("user_id"));// 사용자 입력값 전달
pstmt.setString(2, request.getParameter("password"));

rs = pstmt.executeQuery();
if(rs.next())
user_id = rs.getString(1);// DB에서 사용자 정보 획득


if(user_id != null)
if(session.getValue("logged_in") != "1") // 인증된 사용자 인지 체크
session.putValue("logged_in", "1");// SESSION에 사용자 정보 기록
session.putValue("user_id", user_id);
session.putValue("user_ip", user_ip);

//LogSave(user_id, user_ip);// 인증에 성공한 사용자 정보 기록

response.sendRedirect("/main.jsp");// 인증 성공시 Main 페이지로 Redirect
else
response.sendRedirect("/login.html");// 인증 실패시 인증 페이지로 Redirect

catch(Exception ex) // 에러처리
out.println(ex);
finally // DB연결 종료
if(rs != null) try rs.close(); catch(SQLException ex)
if(pstmt != null) try pstmt.close(); catch(SQLException ex)

%>

==========================================================

나. main.jsp

<%@ page contentType="text/html;charset=euc-kr" %>
<%@ page import="java.util.*" %>

<%
//HttpSession session = request.getSession(true);

if(session.getValue("user_ip") == request.getRemoteAddr() && session.getValue("logged_in") == "1")
//인증에 성공한 IP와 사용자 IP를 비교, 인증 여부 비교
//...
out.println(session.getValue("user_id") + " 님은 " + session.getValue("user_ip") + " 에서 접속하셨습니다.");
//... 중략 ...
else
response.sendRedirect("/login.html");// 인증 실패시 인증 페이지로 Redirect

%>

===========================================================

 

http://blog.naver.com/jaisonyi/40027002213

Posted by 물색없는세상
2013. 3. 10. 02:13

1. 들어가는 말

대체로 개발자들은 GUI 환경 보다는 명령어를 직접 입력하여 그 결과를 바로 확인할 수 있는 console환경을 선호합니다.
물론 어디까지나 대체로 그렇다는 것이니 이 부분에 대한 논의는 피하도록 하겠습니다. 우선 저 부터도 소위 말하는 CUI를
선호하는 편입니다. 특히 리눅스나 유닉스 등의 서버에 원격으로 접속하여 작업을 할 때는 거의 그렇지요.

원격접속은 통상 전용 클라이언트 프로그램을 이용하기 때문에 해당 프로그램의 옵션에서 자신이 원하는 폰트를 결정할 수
있습니다. 그렇다면 윈도에선 어떨까요? 윈도의 명령 프롬프트(cmd)에서 말입니다.



2. 윈도의 명령 프롬프트에 폰트 추가하기 전 사전지식

기본적으로 한글 폰트는 굴림체가 내정되어 있습니다. 영문 환경에선 Lucida ConsoleConsolas가 준비되어 있구요.
개인적으로 저는 <Courier New>폰트를 선호하는 편입니다. 그리고 최근엔 <나눔고딕코딩>이라는 폰트를 알게 되었구요.

어쩌면 눈치 채셨을지도 모르겠습니다. 앞에 나열한 폰트들의 공통점이요, 모두 고정폭 폰트들입니다. 콘솔에선 기본적으로
고정폭 폰트 만을 사용할 수 있도록 되어 있기 때문에 폰트를 추가하실 때 이점을 꼭 기억해두셔야 합니다.



3. RegEdit을 이용한 레지스트리 수정으로 폰트 추가

명령 프롬프트에서 사용할 폰트를 추가하시려면 레지스트를 수정해야 합니다. 시작>실행에서 regedit 이라고 입력하신 후
엔터를 누르면 레지스트리 편집 프로그램이 기동됩니다. 아래 그림을 참고 하십시오.




수정해야 할 레지스트리의 경로는 다음과 같습니다.

HKLM\Software\Microsoft\WindowsNT\CurrentVersion\Console\TrueTypeFont





해당 키에 새로운 문자열값을 입력해주면 됩니다. 다음 그림을 참고하세요. 참고로 한글 로케일 코드는 949입니다.







4. 명령 프롬프트의 속성(폰트) 변경하기

이렇게 레지스트리를 수정하였으면 명령프롬프트의 속성 창을 열어 사용하고 싶은 폰트를 지정해주시면 됩니다.
우선 명령 프롬프트에서 사용할 로케일을 먼저 선택해주시구요. 한국어로 선택을 했습니다. 참고로 레지스트리에
0, 00, 000으로 등록된 값은 437 (OEM-미국)에 해당하는 값입니다.






글꼴 탭을 보시면 전에 없던 나눔고딕코딩이라는 폰트가 보이지요? 이걸 선택하시고 폰트 크기도 적당하게 지정해주세요.
물론 당연한 것이지만 윈도에 나눔고딕코딩 폰트가 먼저 설치되어 있어야 겠지요?






결과를 확인해 보도록 하겠습니다. 우선 아래 첫번째 그림은 영문 로케일에서 Courier New폰트를 지정한 경우이구요,
두번째 그림은 한글 로케일에서 나눔고딕코딩을 지정한 경우입니다.








 






5. 짧은 글을 마치며

늘 옆에 끼고 살아야 하는 콘솔창(명령 프롬프트)을 내 입맛에 맞게 꾸밀 수 있다는 것, 즐거운 일이지요!
그리고 나눔고딕코딩 폰트가 필요하신 분은 프로젝트 홈페이지[각주:1]를 방문하셔서 다운로드 하실 수 있습니다.









  1. http://dev.naver.com/projects/nanumfont [본문으로]

http://likebnb.tistory.com/92

Posted by 물색없는세상
2012. 5. 4. 16:09

현재 블로그에서 코드를 좀 더 이쁘게 보여주기 위해 CodeHighlighter를 사용하고 있습니다.
그런데, 문제는 자바 코드는 상관이 없는데 레이아웃 코드, 즉 XML 코드를 그대로 입력하게 되면 티스토리에서 각 태그 (<LinearLayout> 등...)을 모두 대문자로 바꿔버리는 만행(!)을 저지르더군요. -_-;;


그래서 한동안은 그냥 글씨를 붙여넣어 코드를 작성하다가.. 검색을 해보니 꺽쇠(<,>)를 &gt;, &lt;로 바꿔주면 정상적으로 표시가 된다는 사실을 알았습니다.

그래서! 꺽쇠를 &gt;와 &lt;로 바꿔주는 프로그램을 작성하였습니다. :)
간단하지만 안드로이드 XML 파일을 티스토리 블로그에 포스팅하는 분들께는 유용할 것이라 판단됩니다. :)

 변환할 파일을 직접 입력할 수도 있고, 파일로부터 불러올 수도 있습니다.
CodeHighlighter 사용을 선택하시면 바로 HTML 코드에 붙여넣을 수 있도록 앞, 뒤에 <pre class .. 및 </pre> 코드를 추가해줍니다.

업데이트 (11/9)
* <pre>  태그의 꺽쇠까지 변환되는 문제 수정
* 변환 옵션에서 XML, Java 선택 가능

출처 - http://androidhuman.tistory.com/264 


Posted by 물색없는세상