안녕하세요. 레드플러스 박용준 입니다.
동적으로 랜덤하게 4개의 영문 또는 숫자를 생성하여 익명사용자가 데이터를
입력할 수 있는 익명 게시판에 게시판 생성기와 같은 악의적인 코드에 의해서
입력되는 광고를 사전에 차단하기 위한 방편 중 하나인 동적이미지 생성을 통한
이미에 입력된 텍스트와 동일한 데이터가 작성되었을 경우에만,
글이 입력되도록 하는 간단한 동적이미지 생성 로직을 작성해 보았습니다.
참조할 소스는 아래와 같습니다.
1 using System;
2 using System.Data;
3 using System.Configuration;
4 using System.Collections;
5 using System.Web;
6 using System.Web.Security;
7 using System.Web.UI;
8 using System.Web.UI.WebControls;
9 using System.Web.UI.WebControls.WebParts;
10 using System.Web.UI.HtmlControls;
11 using System.Drawing; //
12
13 public partial class DotNetNote_ImageTextControl : System.Web.UI.UserControl
14 {
15 protected void Page_Load(object sender, EventArgs e)
16 {
17 // 비트맵 이미지 생성
18 Bitmap objBitmap = new Bitmap(80, 20);
19 Graphics objGraphics = Graphics.FromImage(objBitmap);
20 objGraphics.Clear(Color.White);
21 objGraphics.SmoothingMode =
22 System.Drawing.Drawing2D.SmoothingMode.HighSpeed;
23 objGraphics.TextRenderingHint =
24 System.Drawing.Text.TextRenderingHint.AntiAlias;
25
26 // 랜덤하게 4개의 문자 생성 : 영문 대문자, 정수, 영문 소문자, 정수
27 Random random = new Random();
28 char c1 = (char)random.Next(65, 90);
29 char c2 = (char)random.Next(48, 57);
30 char c3 = (char)random.Next(97, 122);
31 char c4 = (char)random.Next(48, 57);
32
33 // 입력 페이지에서 비교를 위해서 세션 변수 남용
34 Session["ImageText"] =
35 c1.ToString() + c2.ToString() + c3.ToString() + c4.ToString();
36
37 // 사각형 비트맵 이미지에 4개의 문자 기록
38 objGraphics.DrawString(c1.ToString(),
39 new Font("Verdana", 12, FontStyle.Bold),
40 Brushes.DarkBlue, new PointF(5, 1));
41 objGraphics.DrawString(c2.ToString(),
42 new Font("Arial", 11, FontStyle.Italic),
43 Brushes.DarkBlue, new PointF(25, 1));
44 objGraphics.DrawString(c3.ToString(),
45 new Font("Verdana", 11, FontStyle.Regular),
46 Brushes.DarkBlue, new PointF(45, 1));
47 objGraphics.DrawString(c4.ToString(),
48 new Font("Arial", 12, FontStyle.Underline),
49 Brushes.DarkBlue, new PointF(65, 1));
50
51 // 비트맵 이미지 출력
52 Response.ContentType = "image/gif";
53 objBitmap.Save(
54 Response.OutputStream, System.Drawing.Imaging.ImageFormat.Gif);
55
56 // 메모리 정리
57 objBitmap.Dispose();
58 objGraphics.Dispose();
59 }
60 }
61