더북(TheBook)

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();
      }
  }
}

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