6. 제작할 게시판은 데이터 입력과 출력에 대해 연습하기 위해 회원 로그인이 없는 익명 게시판 형태다. 보안상 자동 입력 프로그램에 의해서 광고 등이 입력되는 것을 방지하기 위해서 ImageText.aspx 페이지를 사용해서 동적으로 문자 네 개를 랜덤하게 생성해서 같은 값을 입력할 때만 데이터를 저장하도록 할 것이다. 이에 대한 소스는 UI 없이 코드 숨김 파일에서만 다음과 같이 코드를 구현하면 된다. 랜덤하게 문자 네 개를 영문 대문자, 정수, 영문 소문자, 정수 순서대로 출력하게 만들었다.

    ▲ 그림 19-20 보안 코드 입력 예시

     

    ▼  ~/DotNetNote/ImageText.aspx.cs

    using System;
    using System.Drawing;
    
    namespace MemoEngine.DotNetNote
    {
      public partial class ImageText : System.Web.UI.Page
      {
          protected void Page_Load(object sender, EventArgs e)
          {
              // [1] 비트맵 이미지 생성
              Bitmap objBitmap = new Bitmap(80, 20);
              Graphics objGraphics = Graphics.FromImage(objBitmap);
              objGraphics.Clear(Color.White);
              objGraphics.SmoothingMode =
                  System.Drawing.Drawing2D.SmoothingMode.HighSpeed;
              objGraphics.TextRenderingHint =
                  System.Drawing.Text.TextRenderingHint.AntiAlias;
              
              // [2] 랜덤하게 문자 네 개 생성 : 영문 대문자, 정수, 영문 소문자, 정수
              Random random = new Random();
              char c1 = (char)random.Next(65, 90);
              char c2 = (char)random.Next(48, 57);
              char c3 = (char)random.Next(97, 122);
              char c4 = (char)random.Next(48, 57);
              
              // [3] 입력 페이지에서 비교를 위해서 세션 변수에 담기
              Session[“ImageText”] = $”{c1}{c2}{c3}{c4}”;
              
              // [4] 사각형 비트맵 이미지에 문자 네 개 기록
              objGraphics.DrawString(c1.ToString(),
                  new Font(“Verdana”, 12, FontStyle.Bold),
                  Brushes.DarkBlue, new PointF(5, 1));
              objGraphics.DrawString(c2.ToString(),
                  new Font(“Arial”, 11, FontStyle.Italic),
                  Brushes.DarkBlue, new PointF(25, 1));
              objGraphics.DrawString(c3.ToString(),
                  new Font(“Verdana”, 11, FontStyle.Regular),
                  Brushes.DarkBlue, new PointF(45, 1));
              objGraphics.DrawString(c4.ToString(),
                  new Font(“Arial”, 12, FontStyle.Underline),
                  Brushes.DarkBlue, new PointF(65, 1));
              
              // [5] 비트맵 이미지 출력
              Response.ContentType = “image/gif”;
              objBitmap.Save(
                  Response.OutputStream, System.Drawing.Imaging.ImageFormat.Gif);
              
              // [6] 메모리 정리
              objBitmap.Dispose();
              objGraphics.Dispose();
          }
      }
    }
    

    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.