Search Results for '전체 분류'


2064 posts related to '전체 분류'

  1. 2008/02/21 ASP에서 Eval 함수 쓰기
  2. 2008/02/21 난수를 이용한 쿠폰번호(알파벳+숫자) 생성
  3. 2008/02/21 입력값이 들어왔을때 난수구하기!!
  4. 2008/02/21 간단한 파일 쓰기
  5. 2008/02/21 간단한 파일(file) 읽기 (라인단위 읽기)
  6. 2008/02/21 간단한 파일 읽기 (전체읽기)
  7. 2008/02/21 간단한 날짜 구하기(오늘은 몇주째인가?)
  8. 2008/02/21 간단한 날짜 구하기 (기본)
  9. 2008/02/18 아티보드 테이블 정의서
  10. 2008/02/14 아티보드 1.5 2008년 2월 1일자 버전 [홈페이지 제작 솔루션]
  11. 2008/02/13 EditPlus v3.00.323
  12. 2008/02/12 mp3 다운로더 프로그램
  13. 2008/02/12 Classic Menu for Office 2007 v 3.9.0.10
  14. 2008/02/12 FlashSpring Pro 3.0
  15. 2008/02/12 플래시 n:n 채팅 [소스 포함]
  16. 2008/01/11 포토샵 msvcrt10.dll 오류
  17. 2007/12/27 플래쉬 8 파일 업로드
  18. 2007/12/20 웹 관리자를 위한 응급처치법 SQL Injection 해킹 보안
  19. 2007/12/05 SQLyog Enterprise v6.11
  20. 2007/11/30 [정규직 채용 5명]웹디자이너/ 웹프로그래머/ 모십니다.
  21. 2007/11/22 [팁] 원하는 부분만 프린트하기.
  22. 2007/11/22 [팁] 소스훔쳐보기
  23. 2007/11/22 [소스] 문서내 이미지갯수 출력
  24. 2007/11/22 [소스] 폼 버튼을 클릭하면 경고 메세지 보내기
  25. 2007/11/22 [소스] 가짜 바이러스 경고 하는 스크립트
  26. 2007/11/22 [소스] 창을 열면 인사하는 간단한 스크립트
  27. 2007/11/22 [소스] 웹문서에 주소창 넣기 스크립트
  28. 2007/11/22 [소스] 이름을 물어보고 인사하는 스크립트
  29. 2007/11/22 [소스] 들어올때, 나갈때 지겹도록 인사하는 스크립트
  30. 2007/11/22 [소스] 들어올때나 나갈때나 인사는 착실히 해야죠..ㅋㅋㅋㅋ

<%
  temp1 = 20
  temp2 = 30
  temp3 = 50


  i = 1 
  j = 2
  k= 3


  addTemp1 = Eval("temp" & i) 'temp1의 값을 저장
  addTemp2 = Eval("temp" & j) 'temp2의 값을 저장
  addTemp3 = Eval("temp" & k) 'temp3의 값을 저장

  Response.Write addTemp1
  Response.Write addTemp2
  Response.Write addTemp3

%>

2008/02/21 15:06 2008/02/21 15:06

<%

   Function MyRandom( couponLength )


     Dim  couponValue(35)
     couponValue(0)   = "A"
     couponValue(1)   = "B"
     couponValue(2)   = "C"
     couponValue(3)   = "D"
     couponValue(4)   = "E"
     couponValue(5)   = "F"
     couponValue(6)   = "G"
     couponValue(7)   = "H"
     couponValue(8)   = "I"
     couponValue(9)   = "J"
     couponValue(10)  = "K"
     couponValue(11)  = "L"
     couponValue(12)  = "M"
     couponValue(13)  = "N"
     couponValue(14)  = "O"
     couponValue(15)  = "P"
     couponValue(16)  = "Q"
     couponValue(17)  = "R"
     couponValue(18)  = "S"
     couponValue(19)  = "T"
     couponValue(20)  = "U"
     couponValue(21)  = "V"
     couponValue(22)  = "W"
     couponValue(23)  = "X"
     couponValue(24)  = "Y"
     couponValue(25)  = "Z"
     couponValue(26)  = "0"
     couponValue(27)  = "1"
     couponValue(28)  = "2"
     couponValue(29)  = "3"
     couponValue(30)  = "4"
     couponValue(31)  = "5"
     couponValue(32)  = "6"
     couponValue(33)  = "7"
     couponValue(34)  = "8"
     couponValue(35)  = "9"


    'ex) idvalue = Int(( 100-1+1 )*Rnd + 1 )  '1부터 100까지의 난수발생
    'ex) idvalue = Int((50-2+1 ) *Rnd+2 ) '2부터 50까지의 난수발생
    'ex) idvalue = Int((35-0+1 )*Rnd+0 ) '0부터 35까지의 난수 발생

    
    'couponLength 길이 만큼의 쿠폰번호를 만든다
     For i=1 To couponLength
     '난수 발생 초기화
      Randomize
      idvalue=Int((35- 0 + 1) * Rnd + 0)
      couponNo = couponNo & couponValue(idvalue)
     Next

    

     MyRandom = couponNo '리턴값

   End Function


   Response.Write MyRandom( 16 ) '16자리의 쿠폰번호를 생성한다

 %>

2008/02/21 15:06 2008/02/21 15:06

// 1 에서 50까지의 A개수 만큼 난수를 출력해줌


<%
Function RandomEA(EA)
Dim min, max, i

min=1 : max=50

Randomize
Response.Write min & "부터 ~" & max &  "까지 &nbsp;" & EA & "개의 난수 발생 <br><br>"
For i=1 to EA
     Response.Write Int((max-min+1) * Rnd + min) & "<br>" //난수공식
Next
end function
%>



<% if request("EA") = "" then %>
<form name = "fm" method = "post" action = "URL">
* 난수를 발생시킬 갯수 : <INPUT TYPE="text" NAME="EA"><INPUT TYPE="submit" value="전송">
</form>
<% else %>
<form name = "fm" method = "post" action = "111.html">
* 난수를 발생시킬 갯수 : <INPUT TYPE="text" NAME="EA"><INPUT TYPE="submit" value="전송">
<% RandomEA(request("EA")) %>
<% end if %>

2008/02/21 15:05 2008/02/21 15:05

<%

   Dim objFSO, FileName
  
   set objFSO = Server.CreateObject("scripting.FileSystemObject")
 
   '지정해 준 경로로 readme.txt 파일을 만든다. 만든 파일은 빈 파일이다.
   set FileName = objFSO.CreateTextFile("C:\readme.txt", true)
 
   'Write와 WriteLine 메서드는 모두 텍스트를 열린 파일에 추가하지만 WriteLine은 후행 줄 바꿈 문자도 추가합니다.
   FileName.WriteLine("웹마당에 카페의 멤버가 되세요!!!")
   FileName.WriteLine("언제나 환영합니다.!!")

  
   'FileName.Write ("웹마당 까페의 멤버가 되세요")

   ' Write three newline characters to the file.
  
   FileName.Close
 
%>

2008/02/21 15:05 2008/02/21 15:05

<%
   

    Dim objFSO, objOpenedFile, Filepath, sRead
    Const ForReading = 1, ForWriting = 2, ForAppending = 8
   

    Const FileName = "\readme.txt"

   

    '파일시스템 객체를 생성한다
    Set objFSO = CreateObject("Scripting.FileSystemObject")

   

    Filepath = Server.MapPath(Filename)

    '파일이 존재하면
    If objFSO.FileExists(Filepath) Then


      Response.Write "<pre>"

      Set objOpenedFile = objFSO.OpenTextFile(Filepath, ForReading, False, TristateUseDefault)

   

     '라인단위로 읽는다
     Do While Not objOpenedFile.AtEndOfStream
 
     sRead = objOpenedFile.readline
     sRead = sRead & vbCRLF
 
     Response.write sRead
     Loop
 
    Response.Write "</pre>"
    Set TextStream = nothing
   
    Else


    Response.Write "파일명 " & Filename & " 파일이 없습니다."

                   

    End If

   

   Set objFSO = nothing
%>

2008/02/21 15:05 2008/02/21 15:05

<%
  Dim objFSO, objOpenedFile, Filepath, sRead
  Const ForReading = 1, ForWriting = 2, ForAppending = 8
 

  Const FileName = "\readme.txt"

  '파일시스템 객체를 생성한다
  Set objFSO = CreateObject("Scripting.FileSystemObject")

   Filepath = Server.MapPath(Filename)


  '파일이 존재하면
  If objFSO.FileExists(Filepath) Then


     '함수원형 object.OpenTextFile(filename[, iomode[, create[, format]]])
     'TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0
     '-2 시스템 기본값을 이용하여 파일을 연다, -1 유니코드 형식으로 파일을 연다,  0 ASCII 형식으로 파일을 연다
 

      Set objOpenedFile = objFSO.OpenTextFile(Filepath, ForReading, False, TristateUseDefault)
 
 

      sRead     = objOpenedFile.ReadAll  'ReadAll 메서드는 열린 파일 전체를 읽는다
      'sRead     = objOpenedFile.ReadLine 'ReadLine 메서드는 줄 바꿈 문자는 제외하고 줄 전체를 읽는다
      'sRead     = objOpenedFile.Read(4)  'Read 메서드는 열린 파일의 현재 위치에서 지정된 수의 문자를 읽는다
 

      Response.write "<pre>" & sRead & "</pre>"
      objOpenedFile.Close
      Set objOpenedFile = nothing
 
  Else

    

     Response.Write "파일명 " & Filename & " 파일이 없습니다."

                   

  End If

   

  Set objFSO = nothing
%>

2008/02/21 15:04 2008/02/21 15:04

<%

function weekFunc(today)
 
     '//-------1년 52주중 오늘은 몇번째 주인가?--------------------//
     wcountYear = datepart("ww", today)

    

    '날짜의 유효성 검사
     if isDate(today) = false then
     weekFunc = "유효한 날짜가 아닙니다."
     end if

    '//-------이번달중 오늘은 몇번째 주인가?----------------------//
    '이번달의 첫번째일
    firstdate = year(today) & "-" & month(today) & "-01"
    wcountMonth = datepart("ww", today) - datepart("ww", firstdate) + 1


     '리턴값
     weekFunc = "오늘은 1년중 " & wcountYear & "주 째이며 이번달 중 " & wcountMonth & "주 째입니다. "

end function


Response.Write weekFunc(date())

%>

2008/02/21 15:04 2008/02/21 15:04

<%


 '올해
 yearTemp  = year(date)


 '이번달
 monthTemp = month(date)


 '오늘
 dayTemp  = day(date)


 '오늘날짜
 today = date()


 '오늘날짜시간분초
 iday = now()


 '오늘은 무슨요일인가?
 wday = weekday(now())
 select case wday
 case "1" wday = "일요일"
 case "2" wday = "월요일"
 case "3" wday = "화요일"
 case "4" wday = "수요일"
 case "5" wday = "목요일"
 case "6" wday = "금요일"
 case "7" wday = "토요일"
 end select



 Response.Write "올해:" & yearTemp & "<br>"
 Response.Write "이번달:" & monthTemp &  "<br>"
 Response.Write "오늘:" & dayTemp & "<br>"
 Response.Write "오늘날짜:" & today & "<br>"
 Response.Write "오늘날짜시간분초:" & iday & "<br>"
 Response.Write "무슨요일:" & wday & "<br>"


%>

2008/02/21 15:03 2008/02/21 15:03
아티보드 테이블 정의서
사용자 삽입 이미지
2008/02/18 19:33 2008/02/18 19:33

아티보드 데모페이지 http://test.webarty.com/admin/

아티보드 제작회사 http://webarty.com


 
 
 
 
 
 
 
 
 
2008/02/14 17:13 2008/02/14 17:13
사용자 삽입 이미지
에디트플러스는 다양한 기능으로 새로워진 에디터, 즉 문서편집 유틸리티입니다. 일반 윈도우용 에디터용으로도 쓰이지만 HTML 편집시 태그를 다른 색으로 표시하고, 프로그래밍에도 도움이 될 수 있는 편리한 에디터입니다.

자바, C/C++, Perl등 여러 프로그램의 파일을 편집, 수정, 제작 할 수 있는 다기능 에디터입니다.




  • -cursor 명령줄 옵션을 사용하면 프로그램이 다운될 수 있던 문제 해결.
  • Ctrl+'끌어서 놓기' 가 어떤 경우에 작동하지 않던 문제 해결.
  • 여러 줄로 된 정규식이 올바로 작동하지 않던 문제 해결.
  • 단어 단위 선택이 자동 줄 바꿈 모드에서 올바로 작동하지 않던 문제 해결.
  • '첫 글자 대문자로' 명령이 생략기호를 인식하지 않던 문제 해결.
  • 원격 열기 대화상자에서 일부 서버에서 ".." 아이콘이 동작하지 않던 문제 해결.
  • 디렉토리 창이 일부 일본어 문자를 처리하지 못하던 문제 해결.
  • 칸단위 선택에서 코드생략 명령을 사용할 때 프로그램이 다운될 수 있던 문제 해결.
  • @LANGUAGE=VBScript 지시문이 JavaScript 구문 색상을 깨뜨릴 수 있던 문제 해결 .
  • 아주 큰 파일에서 여러 파일 찾기 명령에서 프로그램이 다운될 수 있던 문제 해결.
  • 함수 목록에 '대화상자글꼴' 옵션 추가.
  • 일부 네트워크 드라이브에서 잘못된 파일 변경 경고가 나오던 문제 해결.
  • '자동으로 접속종료' 옵션이 제대로 작동하지 않던 문제 해결.
  • '디렉토리 이름 포함' 백업 옵션 추가.
  • 'USER with no logon' firewall 옵션이 제대로 작동하지 않던 문제 해결.
  • '창 폭 저장' 명령 추가 (창->다른 기능).
  • 'HTML로 복사' 가 대문자로만 되던 문제 해결.
  • '모양 재구성' 명령이 일부 일본어 파일에서 제대로 작동하지 않던 문제 해결.
  • '늘이기' 명령 추가 (창->다른 기능).
  • 정규식 검색 시 무한 루프가 발생할 수 있던 문제 해결.
  • "Unexpected Error GLP" 문제 해결.
  • 윈도우 비스타에서 일부 마우스 휠이 작동하지 않던 문제 해결.
  • '날짜와 시간 포함' 백업 옵션 추가.
  • 네트워크 드라이브에서 나타날 수 있는 브라우저 새로고침 문제 방지.
  • 사용자 지정 출력 패턴이 저장되지 않은 버퍼에서 적용되지 않던 문제 해결.
  • 선택부분열기 명령이 끝 공백을 처리하지 못하던 문제 해결.
  • 원격 열기 대화상자에서 일부 서버에서 ".." 아이콘이 동작하지 않던 문제 해결.
  • '브라우저 2 로 보기' 명령이 '다른 브라우저' 옵션으로는 작동하지 않던 문제 해결.
  • 자동줄바꿈 옵션 선택/제거 시 발생하던 화면 스크롤 버그 수정.
  • Page Up/Down 키를 누를 때 커서위치표시 버그 수정.
  • 윈도우 비스타에서 시스템 기본 브라우저 옵션이 제대로 작동하지 않던 문제 해결.




  • 구문 강조
    ㆍHTML, CSS, PHP, ASP, Perl, C/C++, 자바, 자바스크립트, VB스크립트 파일에서 구문 강조 기능을 지원합니다. 사용자가 작성한 구문 파일을 추가하여 다른 프로그래밍 언어도 지원할 수 있습니다.

  • 인터넷 기능
    ㆍ브라우저를 따로 실행시키지 않고도 HTML 문서를 내장 브라우저로 간편하게 확인해 볼 수 있습니다.작성한 파일을 FTP 서버로 업로드 하거나 FTP 서버상에 있는 파일을 직접 편집할 수 있습니다.URL과 전자 메일 주소를 강조해 주고, F8 키를 누르거나 마우스로 'Ctrl + 더블클릭' 하여 그 URL로 바로 접속할 수 있습니다.

  • HTML 도구모음
    ㆍHTML 도구모음을 사용하면 자주 쓰이는 HTML 태그를 마우스로 쉽고 빠르게 입력할 수 있습니다. 또한 HTML 색상 선택기, 특수문자 선택기, 표 생성기, 오브젝트 선택기 등의 도구들을 이용할 수 있습니다.

  • 문서 선택기
    ㆍ문서 선택기를 사용하면 열려진 문서 사이를 마우스로 빠르게 전환할 수 있어서 윈도우 메뉴나 Ctrl+Tab 키를 사용하는 것 보다 훨씬 편리합니다.

  • 사용자 도구
    ㆍ자주 쓰는 프로그램이나 도움말 파일, 키 입력 기록 파일 등을 등록해서 편리하게 실행시킬 수 있습니다. 그리고 컴파일러 에러 메시지 등의 출력 내용을 캡쳐 할 수 있는 기능을 지원합니다.

  • 자동 완성
    ㆍ자동으로 짧은 단어를 완전한 구절로 바꾸어 주어 입력 시간을 줄여 주는 기능입니다. C/C++ 와 Perl 파일들을 지원하며 사용자가 작성한 자동 완성 파일을 추가하여 다른 프로그래밍 언어도 지원할 수 있습니다.

  • 클립텍스트 창
    ㆍ클립텍스트 창을 이용하면 자주 쓰이는 텍스트 조각을 모아 두었다가 마우스로 빠르고 편리하게 문서에 입력할 수 있습니다. 기본 클립텍스트 파일을 필요에 따라 수정 할 수도 있고 사용자가 작성한 클립텍스트 파일을 추가할 수도 있습니다.

  • 문서 템플릿
    ㆍ문서 템플릿은 새 문서를 작성할 때 매번 같은 내용을 입력할 필요없이 미리 서식으로 지정해 둘 수 있는 기능입니다.

  • 다른 기능들
    ㆍ이 밖에 줄 번호, 눈금자, URL 강조, 칸 단위 선택, 강력한 찾기와 바꾸기, 다중 실행 취소및 재실행, 사용자 정의 단축키 등 다양한 기능들을 쉽고 편리하게 사용할 수 있습니다.
  • 2008/02/13 14:26 2008/02/13 14:26
    mp3 다운로더 프로그램
    사용자 삽입 이미지
    2008/02/12 23:01 2008/02/12 23:01
    사용자 삽입 이미지
    Classic Menu for Office 2007은 오피스 2007의 엑셀, 워드, 파워포인트에서 클래식 메뉴를 볼 수 있게 해주는 프로그램입니다.

    2007의 새롭게 변경된 인터페이스가 적응이 안되시는 분들을 위한 프로그램으로 오피스 2003/XP의 클래식 메뉴로 사용할 수 있게 해줍니다.

    AddingTools Manager를 실행하시면 Excel, Word, PowerPoint의 탭 메뉴가 나타나고 그 메뉴에서 Show 항목에 체크를 하시면 오피스 2007에서 클래식 메뉴를 볼 수 있게됩니다.

    사용방법이 무척이나 간단하기 때문에 체크를 풀면 엑셀 2007, 워드 2007, 파워포인트 2007의 메뉴로 보실 수 있고 체크를하면 클래식 메뉴로 볼 수 있습니다.
    2008/02/12 22:55 2008/02/12 22:55

    사용자 삽입 이미지
    파워포인트를 플래쉬로 변경해주는 툴입니다.

     

    간단하게 말하면 파워포인트 문서 작성시 플래쉬를 쉽고 간편하게 삽입하는 툴입니다.

    2008/02/12 22:52 2008/02/12 22:52

    두개의 브라우저를 띄워놓고 채팅한 화면입니다.

    사용자 삽입 이미지


    서버는 C# 2.0으로 제작되었으며


    클라이언트는 플래시8로 제작되어있습니다.


    플래시의 디자인을 변경해서 디자인을 바꿀 수 있습니다.


    플래시파일을 올리는 웹서버에  크로스도메인.xml파일만 올려서 설정해주면 바로 가능합니다.



    서비스 하기전에 서버쪽 소스에서


    Server클래스에


    79, 80번 라인에 주석으로 막아두고


    72라인에 주석을 해제 하셔야 합니다.

    2008/02/12 22:14 2008/02/12 22:14


    포토샵 버전과 상관없이 아래창이 뜨는것은 필터 추가시 생기는 오류입니다.

    추가 필터중에서도 실행파일을 이용해 추가했을경우 생기죠.

    파일을 다운받아셔서

    압축을 푸시고

    압축을 푸신 msvcrt10.dll 파일을

    C:/Windows/System32 폴더 안에 넣어 주시면 됩니다.

    사용자 삽입 이미지
    2008/01/11 18:52 2008/01/11 18:52
    사용자 삽입 이미지


    플래쉬 8 버전이 출시되었으나...


    역시나 파일 업로드 기능만 눈에 들어왔습니다;;


    그래서 한번 만들어 봤습니다.


    환경설정 부분은 config.xml 에 정의하시면 되구요.


    파일 업로드 자체 구현은 JSP 이나 PHP 같은 다른 언어에서 쓰고자 하시는 분은


    기존 파일 업로드 구현한대로 코딩하신 후 업로드 URL만 변경하시면 됩니다.


    윈도우 익스플로러, 파이어폭스에서 잘되고,


    리눅스에서 파이어폭스에선 잘 안되는 것 같네요.


    리눅스용 플래쉬 플레이어 8 버전도 아직 안나온 것 같던데;;


    추후에 테스트 해보도록 하겠습니다.


    예제는 다음과 같습니다.


    http://www.ghlab.com/blog/flashupload/upload.html


    소스 경로는 다음과 같습니다.


    http://www.ghlab.com/blog/flashupload/flashupload.zip


    05.09.23 - 환경 설정을 xml 로 변경( xml 주석 참조 바랍니다. )

    05.09.24 - 윈도우용 파이어폭스 테스트 완료.

    2007/12/27 17:02 2007/12/27 17:02

    웹 관리자를 위한 응급처치법
    SQL Injection 해킹 보안


    박상옥│호스트웨이코리아


    몇 해 전부터 중국 해커들로부터 한국의 서버들이 해킹당하는 사례가 급격히 증가하고 있다. 이 같은 해킹 피해 사례가 외부로 알려지지 않은 경우가 많지만, 윈도우 환경에서 서버를 운영하는 국내 유수의 사이트들은 드러난 수치보다 훨씬 빈번하게 SQL Injection으로 인한 피해를 입어왔다.

    필자의 실제 경험으로도 그렇다. 필자와 상담한 어느 고객의 경우 SQL Injection의 침입으로 참담한 피해를 감수해야 했다. 이 고객은 MS SQL의 시스템 관리자 계정으로 웹 사이트의 DB 연동을 수행했는데 이 과정에서 SQL Injection의 공격을 받아 시스템은 물론이고, 디스크에 저장된 데이터 모두를 잃고 말았다.

    당시 고객이 이용한 디스크는 73GB 용량의 SCSI 디스크였으나, 이것이 논리적으로 인식된 크기는 1TB에 달했다. 이를 로 레벨 포맷하고 나서야 정상적인 크기로 돌아왔지만, 이미 모든 데이터는 사라진 후였다. 이처럼 SQL Injection은 단순한 웹 변조 수준을 넘어 시스템과 디스크 장치까지 피해를 주고 있다.


    웹서버 보안을 강화하자


    지금부터는 자신이 관리하는 윈도우 시스템에 SQL Injection의 침입 흔적이 있는지를 확인하고, 웹서버의 보안을 강화하는 방법을 살펴보자.

    사실 SQL Injection으로 인한 피해는 프로그래머의 부주의에서 비롯된다고 해도 지나치지 않다. 따라서 SQL Injection으로 인한 피해를 예방하려면 다음의 3가지를 우선적으로 지켜야 한다.

    ①Sysadmin 권한의 계정으로 DB Connection을 하지 말자.
    ②입력폼 등에서 특수문자나 예외문자에 대한 Replace를 수행한다.
    ③저장 프로시저(Stored Procedure)를 이용한다.

    SQL Injection 방지와 관련한 프로그래밍 자료는 다음 사이트(KISA)에서 다운로드할 수 있다(http://www.kisa.or.kr/ news/2005/announce_20050427_submit.html).


    SQL Injection의 3가지 기법


    SQL Injection을 이용한 해킹은 시스템의 취약성에 따라 Authentication Bypass, OS call, Query manipulation 등을 조합해 이뤄진다.


    ■ Authentication Bypass
    주로 로그인 창에 적용되는 기법으로 이용자 아이디와 패스워드를 몰라도 로그인할 수 있게 해준다. 테이블의 첫 번째 Row 값을 써서 로그인하고, 만약 그것이 관리자 페이지라면 웹사이트 관리자로 로그인할 수 있다.

    <화면1>Authentication Bypass를 써서 보안이 취약한 웹사이트에 로그인 할수 있다.


    ■ OS Call
    OS Call은 Sysadmin 권한 계정으로 DB 연동을 수행했을 때를 노린다. 마스터 DB의 확장 저장 프로시저에서 윈도우 시스템을 핸들링할 수 있는 확장 저장 프로시저들을 실행케 해주는 것이다.

    OS Call을 방지하기 위해서는 아래의 확장 저장 프로시저들을 쓰지 못하도록 Disable하거나, 확장 프로시저에 해당하는 DLL 파일을 삭제해야 한다. 그러나 이 역시 완전한 대비책은 못 된다. 삭제된 DLL 파일은 해커에 의해 재생성되거나, 업로드돼 이용될 수 있기 때문이다. 그러므로 해킹을 염려한다면 Sysadmin 권한 계정으로 DB 연동을 절대 수행하지 말아야 한다.


    <화면2> OS Call은 확장 프로시저를 이용해 Admin 권한 계정을 생성하는 원리다.



    ■ Query Manipulation
    아래 URL 주소와 같이 예외 처리를 하지 않은 사이트는 SQL Query를 조작할 수 있다.

    http://www.somecompany.com/notice.asp?no=5 ;EXEC master. dbo.xp_cmdshell’ cmd.exe dir c:



    Injection 자료의 수집


    SQL Injection을 위한 데이터는 주로 웹 랭킹 사이트에서 수집된다. 특히 구글 해킹을 통한 admin 페이지 수집이 빈번한 것으로 알려져 있다. 일반적으로 admin 페이지들은 http:// website.com/admin을 이용하는 경우가 많은데 이런 데이터 수집 과정을 감안하면 이는 결코 바람직하지 않다. 또한 해당 사이트나 제품의 취약점을 찾아내주는 SQL Injection Tool도 침입을 위한 자료 수집에 많이 이용되고 있다. 이 도구들은 주로 중국에서 제작돼, 심지어 상용화되기도 한다.


    <화면3> Googledock을 이용한 정보 수집



    SQL Injection의 피해 확인


    일반적으로 웹사이트가 Injection 툴에 의해 침입을 받았다면 DB에 해당 툴을 암시하는 테이블이나, 이용자 계정 정보가 남아 있게 된다. 또한 IIS 웹로그에도 로그 기록이 남기 때문에 이를 통해서도 침입 흔적을 확인할 수 있다.

    ■ HDSI 툴에 의한 침입
    HDSI 툴은 SQL Injection에 취약한 사이트의 DB를 조회하거나 시스템 명령어 등을 실행할 수 있게 해준다. DB에 T_Jiaozhu, jiaozhu, comd_list, xiaopan, Reg_Arrt 등의 테이블을 생성하므로, 이 테이블들의 존재를 확인함으로써 침입 여부를 알 수 있다.


    ■ D-SQL에 의한 침입
    DB에 D99_Tmp라는 테이블이 존재한다면 D-SQL을 써서 시스템 명령어를 실행한 것으로 볼 수 있다. 아울러 D99_Reg 테이블은 레지스트리 수정, D99_Tmp는 디렉토리 탐색, D99_CMD는 명령어 수행이 이뤄졌음을 각각 나타낸다. D-SQL은 또한 IIS 웹로그도 생성한다.


     


    <화면4> HDSI 툴은 T_Jiaozhu, jiaozhu, comd_list, xiaopen, Red_Arrt 등의 테이블을 생성한다.

     

    <화면5> D-SQL의 실행 모습



    웹로그에서 확인하기


    웹로그에서도 테이블과 관련한 Create나 Select 구문이 없는지를 확인해야 한다. 아울러 확장 저장 프로시저에 대한 로그가 존재하는지도 살펴본다. 웹로그에서 검색해봐야 할 문자열에는 XP_CMDSHELL, Net, user, Update, Insert, drop table 등이 있다.


    <화면6> D99_Tmp, D99_Reg, D99_Tmp 테이블은 D-SQL의 침입을 의미한다.


    웹서버 보안을 위한 체크 리스트


    지금부터는 웹서버 보안을 위한 주요 체크 리스트를 소개한다. 다음의 내용을 자세히 살펴본 후 자신의 웹서버에 해당되는 부분을 찾아 적용해보자. 이 체크 리스트는 대부분 윈도우 2000 환경을 전제로 하고 있다.


    ■ Patches and Updates
    먼저 최신 패치나 서비스팩을 적용했는지 여부와 정기적으로 MBSA를 써서 운영체제 및 애플리케이션 보안을 체크하고 있는지를 확인한다. 현재 2.0 버전이 출시돼 있고, 패치 정보와 윈도우 보안에 대한 가이드도 제공하고 있다. 정기적으로 MS가 제공하는 최신 패치 정보(http://www.microsoft.com/ technet/security/bulletin/notify.asp)를 받아보는 것도 큰 도움이 된다.


    ■ IISLockdown
    IISLockdown이 웹서버에 설치돼 운영되고 있는지를 살펴본다. IISLockdown은 웹서버 보호 과정을 대부분 자동화해주는 도구로 서버 용도나 유형에 따라 여러 보안기능을 해제하거나, 보호할 수 있는 이용자 템플릿을 제공한다. 또한 URLScan을 설치 및 구성했는지도 체크해야 한다. URLScan은 웹사이트 관리자가 서버에서 처리 가능한 웹 요청을 제한할 수 있는 ISAPI 필터로, 잠재적으로 유해할 수 있는 웹 요청을 서버에 도달하기 전에 차단해준다.


    ■ Services
    불필요한 윈도우 서비스들을 disable로 설정했는지도 체크 포인트다. FTP, SMTP, NNTP 서비스 등이 필요치 않다면 설치하지 않는다. 특별한 경우가 아니라면 Telnet과 ASP .NET state service는 중지하는 것이 바람직하다.


    ■ Protocols
    WebDAV를 이용하지 않는다면 중지하고, 필요하다면 반드시 보안 설정을 수행한다. 보안 설정과 관련된 내용은 http:// support.microsoft.com/default.aspx?scid=kb;en-us;Q323470을 참고한다. NetBIOS와 SMB 포트(137, 138, 139, 445 포트)의 Disable 설정도 고려할 만하고, 윈도우 2000이라면 DoS 공격을 대비한 TCP/IP Stack의 강화가 필요하다. 보다 자세한 내용은 http://support.microsoft.com/default. aspx?scid=kb;ko;315669를 참고한다.


    ■ Accounts
    이용하지 않는 계정은 삭제하고, Guest 계정은 항상 disable로 설정한다. Administrator 계정은 암호 설정 규칙을 충실히 따른 후 Rename해 쓴다. 그러나 윈도우 2000의 경우 Administrator 계정을 Rename해도 완벽히 대비할 수 없다는 점을 유의해야 한다. 윈도우 2000의 관리자 계정은 500번 이하의 기본 SID 값을 가지는 탓에, 해커들이 액티브 디렉토리나 로컬 SAM을 이용해 이 SID 값을 아이디로 바꿔 계정을 공격할 수 있다. 이를 방지하기 위해서는 다음의 과정을 따른다.

    ?U AD 환경이라면 그룹 정책 가운데 하나인 기본 도메인 정책을 수정한다.
    ‘컴퓨터 구성\Windows 설정\보안 설정\로컬 정책\보안 옵션’에서 익명 연결의 추가적인 제한을 ‘SAM 계정 및 공유 열거 허용 안 함’으로 선택한다.
    ?V AD 환경이 아니라면 시작-실행-gpedit.msc을 입력해 그룹정책을 적용한다.

    ■ Files and Directories
    NTFS 파일시스템을 선택하고, 웹사이트의 루트 디렉토리는 SystemRoot 드라이브 외의 디렉토리에 위치시킨다. 아울러 웹로그 디렉토리는 SystemRoot 드라이브 및 웹사이트 루트 디렉토리 외의 볼륨에 두도록 한다. Everyone 그룹을 제거하고, Website Root 디렉토리에 IUSR_Machine 계정의 쓰기 권한을 주지 않는다.
    자료실 이용 등으로 익명의 계정이 업로드해야 한다면, 해당 웹서비스의 디렉토리 내에는 Script 실행 권한을 부여하지 않는다. 기본 웹사이트와 관리 웹사이트는 삭제하거나 중지한다.


    ■ Shares
    불필요한 공유는 없애고, 파일 공유 생성 시 권한에 유의한다. Everyone Access는 되도록 쓰지 않는다.


    ■ Ports
    SSL을 구성한다.


    ■ Registry
    원격 레지스트리 연결을 제한하기 위해 Remote Registry Service를 중지한다. 198쪽에서 계속

    정리 | 전도영 mir@imaso.co.kr


    참고자료

    http://www.krcert.or.kr
    Microsoft - Checklist: Securing Your Web Server


    툴 소개


    웹 침입 차단을 위한 프레임 제공, Webknight

    Webknight는 공개 소프트웨어의 하나로 SQL Injection을 비롯해 여러 형태의 웹 공격을 차단하는 프레임을 제공한다. 웹사이트(http://www. aqtronix.com)에서 다운로드 해 이용할 수 있지만, 실제 서버에 적용하기 전에는 반드시 테스트 서버를 통한 점검이 이뤄져야 한다.

    ① 사이트(http://www.aqtronix.com/downloads/WebKnight/ 2004.02.01/WebKnight.zip)에서 다운로드한다.
    ② 압축을 해제하고, Setup 폴더 하위의 WebKnight.Msi를 실행해 설치한다.
    ③ IIS 웹서버를 Restart 한다.
    ④ 정상적으로 설치가 완료되면, <화면 7>과 같이 ISAPI Filters에 Webknight가 추가된다.
    ⑤ 기본 설치 폴더에서 C:\Program Files\AQTRONIX Webknight\ Config.exe를 실행하면, 현재 설정을 볼 수 있다.



    <화면 7> ISAPI Filters에 Webknight 추가



    ⑥ <화면 8>처럼 SQL Injection 관련 설정을 확인하고, 필요한 경우 수정한다.
    ⑦ <화면 8>처럼 해당 Query가 2번 이상 요청되면 블로킹 웹사이트를 보여준다.
    ⑧블로킹 페이지를 수정할 때는 C:\Program Files\AQTRONIX Webknight\nohack.htm을 이용한다.

    한편 무료 웹사이트 점검을 이용해 웹사이트의 취약점을 파악할 수도 있다. 한국정보보호진흥원이 마련한 웹 취약점 원격 점검 서비스(webcheck.krcert.or.kr)가 대표적이다. 이 사이트에 접속해 서비스를 신청하면 운영하는 웹사이트가 지닌 위험 요소를 쉽게 파악할 수 있다. 이외에도 많은 인터넷 데이터센터(IDC)들이 SQL Injection 무료 점검 서비스를 제공하고 있다.



    <화면 8> SQL Injection 관련 설정 확인




    제공 : DB포탈사이트 DBguide.net

    2007/12/20 14:05 2007/12/20 14:05
    사용자 삽입 이미지

    관계형 RDBMS 사용자들을 위해 설계되었기 때문에 0.5MB 정도의 작은 사이즈로 InnoDB를 완벽하게 지원합니다. 또한 오라클에서 TOAD나 ORANGE, SQL2000 서버의 EM 등과 같이 결과를 Text로 GRID로 확인할 수 있게 하였습니다. (전반적인 인터페이스는 시퀄서버의 EM과 동일합니다) 


    특히 놀라운 점은 데이터베이스 동기화툴을 통해 ODBC를 이용해 MSSQL2000 서버의 내용을 Mysql로 옮길 수 있다는 겁니다.
     
    주요기능

    - 데이터베이스 동기화툴
    - 권한관리자(권한 설정/수정)
    - Blob View(DB에서 바로 Blob 타입의 이미지와 텍스트를 확인)
    - 스키마 관리자
    - 튜닝 (인덱스 관리자)
    - 테이블 관리자
    - 스키마 관리자
    - IMPORT/EXPORT 툴(XML 지원)
    - ODBC IMPORT
    2007/12/05 12:04 2007/12/05 12:04
    담당업무 : 웹디자인. 웹프로그램개발
    업ㆍ직종 : 소프트웨어·솔루션·ASP, 웹디자인, 웹프로그래머
    모집분야 : [웹디자인] [웹프로그래머]
    키 워 드 :

    ASP, 웹디자인, 웹프로그래머, asp


    [정규직 채용 5명]웹디자이너/ 웹프로그래머/ 모십니다.
    모집인원 웹다지인 3 명 / 웹프로그래머 (asp)2명
    항력 무관
    고용형태 정규직
    근무부서 공공사업부/수원본사/
    채용직급 사원1명 , 대리 3명 , 과장 1명
    급여조건 회사내규에 따름
    자격 요건 경력:3년이상 , 나이: 27세 (1981년생) 이상
    상세요강

    주요업무
    -관공서 프로젝트


    자격조건
    -사이트 단독 구축 경험자 / 메인 시안 가능자
    -성별,전공 무관

    지원 서류
    - 이력서 (경력 및 희망연봉 기재 ) 상세
    -지안한 서류는 일체 반환하지 않음
    -이메일 접수 : openkr@openkr.com 접수

    복지
    -국민연금,고용보험,산재보험,건강보험
    -중식제공,석식제공
    -각종 경조금

    -주 5일 근무

    위치
    -회사위치 : 경기도 수원시 팔달구 우만동 481 석우빌딩 3층 (수원 월드컵 경기 장 근처)


    담당자

    담당자 : 박동율 실장 (공공사업부)

    연락처 1566-0359 내선 201번

    E-메일 : openkr@openkr.com

    홈페이지 : http://openkr.com

    회사 위치
    2007/11/30 10:00 2007/11/30 10:00

    1. head 태그안에 자바소스 삽입

     

    <script language="JavaScript" type="text/JavaScript">
    /*프린트*/
    function printOk(){
     var printwin;
     printwin = window.open("/product/print.html","print","left=10px;top=10px;height=500,width=660,scrollbars=yes,toolbar=yes,menubar=yes");
     printwin.focus();
    }
    </script>

     

     

    2. 프린할 부분을 div 태그로 묶어준다

     

    <div id="DivAndPrint">프린트 할 부분</div>

     

     

    3. 프린트 버튼에 a 태그에 넣어준다

     

    <area href="#" onFocus="this.blur()" onclick="printOk()">

     

     

    4. 스크립트 소스가 있는 print.html을 서버에 올려준다.

      위에 1번에서 경로명 자신에게 맞게 수정..

      print.html내에 css 경로도 자신에게 맞게 수정..
    2007/11/22 15:32 2007/11/22 15:32
    1. 익스플로러 주소창의 주소앞에 view-source: 라고 입력하세요.

    예) view-source:http://webarty.com 이런식이 되겠죠~?


    2. 이미지만을 보고 싶을 때..

    정말 좋은 이미지가 있는데 소스 보기 금지가 되어 있을 경우에는..

    이미지를 클릭한 상태에서 익스플로러 주소창위로 드래그 하시면 보시고자 하는 그림만 뜨게 됩니다.. 한번 해보시는게 이해가 빠르실 듯... ^^
    2007/11/22 15:31 2007/11/22 15:31
    <SCRIPT LANGUAGE="JavaScript">
    <!--
    document.write("문서내 이미지의 갯수 : " + document.images.length + " 개<br>");
    //-->
    </SCRIPT>

    * background로 할 경우

    <script language="javascript">
        document.write("<body background='이미지 경로'>");
    </script>
    2007/11/22 15:29 2007/11/22 15:29
    <HTML>
    <HEAD>
    <TITLE> Jasko Sample Script </TITLE>

    <!---- [1단계] 아래의 소스코드를 <HEAD>와 </HEAD> 사이에 붙여 넣으세요 ---->

    <script language="javascript">
    function pushbutton() {
    alert("안녕하세요?n반갑습니다");  // n 은 줄을 바꿀때 사용합니다
    }
    </script>

    <!------------------------- 여기까지 ---------------------------------->

    </HEAD>

    <BODY>
    <CENTER>

    <!---- [2단계] 아래의 코드를 원하는 위치에 복사 해 넣으세요 -------------------->

    <!-- 함수를 이용한 방법입니다. 함수를 이용하면 동일 페이지내에서 여러번 간단하게 사용할 수 있습니다 -->

    <input type="button" value=" 함수를 사용한 방법 " onclick="pushbutton()">


    <!------------------------- 여기까지 ---------------------------------->

    </body>
    </html>


    ※ 함수를 사용하지 않고 인라인(in-line)으로 사용하는 방법은 아래와 같이 사용합니다

    1. 하이퍼텍스트를 이용한 방법

    <a href="#" onClick="alert('안녕하세요?n반갑습니다'); return false">인라인 링크텍스트로 사용</a>

    2. 폼버튼을 이용한 방법

    <input type=button onClick="alert('안녕하세요?n반갑습니다')" value=" 인라인 폼 버튼으로 사용 ">
    2007/11/22 15:29 2007/11/22 15:29
    <HTML>
    <HEAD>
    <TITLE> 샘플 페이지 </TITLE>
    <META NAME="Generator" CONTENT="EditPlus">
    <META NAME="Author" CONTENT="Elbis">
    <META NAME="Keywords" CONTENT="JavaScript, 자바스크립트">

    <!-- 1. 메모장 등으로 아래의 내용을 HTML 문서의 HEAD 부분에 붙여 넣으세요 -->

    <script> alert("접속을 종료 하시겠습니까 ?")</script>
    <script> alert("Are you sure you want to end your session?")</script>
    <script> alert("Disconnecting...")</script>
    <script> alert("Virus Detected")</script>
    <script> alert("Loading Virus...")</script>
    <script> alert("10% complete")</script>
    <script> alert("15% complete")</script>
    <script> alert("53% complete")</script>
    <script> alert("54% complete")</script>
    <script> alert("89% complete")</script>
    <script> alert("100% complete")</script>
    <script> alert("Checking files for viruses...")</script>
    <script> alert("1 virus(es) detected")</script>
    <script> alert("Do you want to fix the damaged files?")</script>
    <script> alert("Fixing...")</script>
    <script> alert("File(s) fixed")</script>

    이 홈페이지의 웹마스터에게 바이러스 감염사실을 알려주세요 ;

    <script>
    <!--

    var alerted_already;
    var remark;
    function theytyped(form) {
            for (  j = 1;
                    j<=remark.length && remark[j]!=form.myoutxt.value;
                    j++){}
            if (j>remark.length)
                    form.myoutxt.value = " 감사합니다. 확인 버튼을 클릭 하세요 ";
            return false;
    }


    function touched_frog() {
            if (!alerted_already) {
                    alert(""+
                          ""+
                          ""+
                          ""+
                          ""+
                          "");
                    alerted_already = true;
            }
            return alerted_already;
      }

    function compute(form) {
            for (var i = 1;
                i<=remark.length && remark[i]!=form.myoutxt.value ;
                i++){}
            if (i==remark.length)
                    history.back();
            if (i==remark.length-1)
                    alert("Dear Sir or Madam:"+
    "nn  It has come to our attention that you have been harassing"+
    "none of the buttons on the web.  Although most buttons are"+
    "nunderstanding about this type of thing (being repeatedly pressed),"+
    "nsome rogue buttons have decided to form a support group and have"+
    "npetitioned me, the webmaster for funds to provide a secure place for"+
    "nrest and relaxation.  Due to the large number of requests, this"+
    "nwarning has been installed:"+
    "n  IF YOU PERSIST PRESSING THIS BUTTON,"+
    "nYOU WILL BE EJECTED FROM THIS SCREEN."+
    "nn  Thank you for your cooperation,"+
    "nn      The Federation for Oppressed and Abused Buttons"+
    "nnenclosure: Message from oppressed complaintant"+
    "nnnnDear Federation for Oppressed and Abused Buttons"+
    "nn  As I have been able to secure your assistance before,"+
    "nI beg your help in stopping the on going abuse I am once again"+
    "nforced to endure.  THIS FREAKIN' NUT CASE  WILL NOT STOP!"+
    "nn  Sincerely"+
    "nn      Push Me"+
    "nnp.s.  I will definitely attend the annual meeting next July");


            if (i<remark.length)
                    form.myoutxt.value = remark[i+1];
            else
                    form.myoutxt.value = remark[1];
      }

    function initArray() {
          this.length = initArray.arguments.length;
          for (var i = 0; i < this.length; i++)
            this[i+1] = initArray.arguments[i];
      }

    remark = new initArray( "장난이었습니다",
                            "하하하!",
                            "Why are you clicking me, I told you this was a joke!",
                            "Go Away!!..Quit bothering me!!",
                            "SOMEBODY STOP THIS CRAZY PERSON!",
                            "I give up. Please stop.",
                            "I SAID PLEASE, WHAT'S WRONG WITH YOU!",
                            "I understand your need to push buttons, but please stop!",
                            "This is NOT funny!",
                            "I give up.",
                            "This is now a back button!");

    alerted_already = false;

    // -->
    </script>

    <!--------------------------------- 여기까지 ------------------------------->

    </head>

    <body>

    <!---- [2단계] 아래의 코드를 원하는 위치에 복사 해 넣으세요 -------------------->

    <form name="buttons" method="post" onSubmit="return false">
    <input type="button" name="pushme" value="Submit" onClick="compute(this.form)"
    onMouseOver="window.status='지금까지는 농담이었습니다. 놀라셨죠?';
    return touched_frog()">
    <input type="text" value=" " name="myoutxt" onBlur="theytyped(this.form)" onFocus="theytyped(this.form)" onChange="theytyped(this.form)" size=40>
    </form>

    <!------------------------- 여기까지 ---------------------------------->

    </body>
    </html>
    2007/11/22 15:28 2007/11/22 15:28
    <HTML>
    <HEAD>
    <TITLE> Sample Script </TITLE>
    </HEAD>

    <body>

    <!-- 메모장 등으로 아래의 내용을 HTML 문서의 BODY 부분에 붙여 넣으세요 -->

    <script>
    var y=window.prompt("이름을 적어 주세요","Chanho, Park")
    window.alert(y+ " 님 안녕하세요? 정말 반갑습니다,")
    </script>

    <!----------------------------- 여기까지 -------------------------------->

    </body>
    </html>
    2007/11/22 15:28 2007/11/22 15:28
    <HTML>
    <HEAD>
    <TITLE> Sample Script </TITLE>
    </HEAD>
    <body>

    <!-- 메모장 등으로 아래의 내용을 HTML 문서의 BODY 부분에 붙여 넣으세요 -->

    <FORM Name="myForm">
    <INPUT TYPE="text" Name="URL" Value="http://" size=30>
    <INPUT TYPE="button" Value=" 이동하기 " onClick="location.href = this.form.elements[0].value">
    </FORM>

    <!------------------------- 여기까지 ---------------------------------->

    </body>
    </html>
    2007/11/22 15:28 2007/11/22 15:28
    <HTML>
    <HEAD>
    <TITLE> Sample Script </TITLE>
    </HEAD>

    <BODY>

    <!-- 메모장 등으로 아래의 내용을 HTML 문서의 <BODY> 태그 안에 붙여 넣으세요 -->

    <script language="javascript">
    name = prompt("이름을 적어 주세요n당신 이름이 모에여? ","James Dean");
    document.write("<h3 align=center>안녕하세요, <font color=teal>"+name+"</font> 님 !</h3>");
    </script>

    <!------------------------- 여기까지 ---------------------------------->

    </body>
    </html>
    2007/11/22 15:27 2007/11/22 15:27
    <HTML>
    <HEAD>

    <!-- 1. 메모장 등으로 아래의 내용을 HTML 문서의 HEAD 부분에 붙여 넣으세요 -->

    <SCRIPT LANGUAGE="JavaScript">
    <!--

    var name = prompt("이름을 말씀해 주세요","James Bond");
    function greet()
    {

    /*********** 페이지 로딩시 인삿말입니다. 원하는 구문으로 바꾸어 줍니다 ***************/

    alert("안녕? "+name+" 님!");
    alert("I hope you like my page");
    alert("If you don't...");
    alert("...you suck");
    alert("If you do...");
    alert("...you don't suck");
    alert("So which one are you "+name+"?");

    var iam = prompt("이 홈페쥐가 맘에 드시나요?","Y 혹은 N");
        iam = iam.toUpperCase();

    if
    (iam == "Y")
      {alert("머리가 좋으시네요")}

    else

    if
    (iam == "N")
      {alert("혹시 아이큐가....1 자리수??")}

    else
    {alert("흠.. 좀 더 두고 보시겠다...??")}

    }

    /*********** 페이지 아웃시 인삿말입니다. 원하는 구문으로 바꾸어 줍니다 ***************/

    function goodbye()
    {
    alert("잘가~ 내꿈 꿔~");
    alert("I'll miss you!");
    alert("Just remember what we've gone through together");
    alert("I'll never forget you "+name+"!!");
    alert("Come back soon!");
    alert("I can't believe it's over.....");
    alert(".....so soon");
    alert("WHAT THE HELL ARE YOU DOING!?");
    alert("GET OUT!");
    alert("out, Out, OUT!");
    alert("NOW!");
    alert("GOODBYE!");
    alert("One last thing...");
    var iam = prompt("홈페쥐 맘에 드셨나요?","Y 혹은 N");
        iam = iam.toUpperCase();

    if
    (iam == "Y")
      {alert("감사합니다n복권한장 받아 가세요")}

    else

    if
    (iam == "N")
      {alert("흠.. 이상하신 분이네n잘먹고 잘 사세요")}

    else
    {alert("이런 아직 결정 못하셨다구요?n그럼, 담에 오실때 한표 부탁 해요")}}

    //-->
    </SCRIPT>

    <!--------- 여기까지 --------------------->

    </HEAD>

    <!-- 2. BODY 태그안에 아래의 내용을 붙여 넣으세요 --->

    <BODY onLoad="greet()" onUnLoad="goodbye();">

    <!-- 3. 아래의 스크립트를 본문중 원하는 곳에 붙여 넣으세요 ---->

    <CENTER>안녕하세요? <font color=red>
    <SCRIPT LANGUAGE="JavaScript">
    document.write(name);
    </SCRIPT></font>님,

    <!--------- 여기까지 --------------------->

    </BODY>
    </HTML>
    2007/11/22 15:27 2007/11/22 15:27
    <HTML>
    <HEAD>
    <TITLE> Sample Script </TITLE>

    <!---- [1단계] 아래의 소스코드를 <HEAD>와 </HEAD> 사이에 붙여 넣으세요 ---->

    <SCRIPT LANGUGE="JavaScript">

    <!--

    var str = prompt("귀하의 성명은요?:", "Bond Girl")

    function welcome(){
      alert("감사합니다, "+ str+" 님, 천천히 놀다 가세요");
    }

    function goodbye(){
      alert("다음에 또 오실거죠? "+ str+" 님n베리베리 쌩큐여~");
    }

    // -->
    </SCRIPT>

    <!------------------------- 여기까지 ---------------------------------->

    </HEAD>

    <!---- [2단계] <BODY> 태그안에 있는 코드를 복사 해 넣으세요 --------------->

    <BODY onLoad="welcome()" onunLoad="goodbye();">

    <!------------------------- 여기까지 ---------------------------------->

    <!---- [3단계] 아래의 코드를 <BODY> 태그와 </BODY> 태그안에 붙여 넣으세요 ---->

    <p align=center>

    <font size=2 color=>
    안녕하세요?
    <font size=2 color=red>

    <SCRIPT LANGUAGE="JavaScript">document.write(str);</SCRIPT>

    </font> 님, 정말로 방가버여
    </font>

    <!------------------------- 여기까지 ---------------------------------->

    </body>
    </html>
    2007/11/22 15:27 2007/11/22 15:27