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