PDA

توجه ! این یک نسخه آرشیو شده می باشد و در این حالت شما عکسی را مشاهده نمی کنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : ایجاد تصاویر امنیتی حاوی متن اتفاقی (captcha)



Borna66
07-29-2010, 01:37 PM
ایجاد تصاویر امنیتی که متن اتفاقی را در هر بار باز شدن صفحه نمایش می دهند یکی از ابزار های جلوگیری از برخی حملات است که توسط Robot هایی انجام می پذیرد که فرم های سایت شما را بصورت خودکار طی مدت زمان کوتاهی بار ها submit می کنند. در این مقاله روشی جهت ساخت اینگونه تصاویر بیان می شود که فوق العاده آسان و کاربردی خواهد بود.

معرفی CAPTCHA
CAPTCHA مخفف Completely Automated Public Turing Test To Tell Computers And Humans Apart بوده و به معنی تصدیق این امر که داده دریافتی توسط یک انسان ایجاد شده است.

این مقاله به ارائه یک راه حل بسیار آسان و قابل فهم ، جهت ساخت تصاویر امنیتی و استفاده از این تکنیک می پردازد. برای این منظور باید تصویری بصورت داینامیک ایجاد شود که نشان دهنده متن اتفاقی باشد. کاربر با مشاهده این تصویر ، متن درون آن را وارد کرده و امکان ارسال فرم برای او فراهم می شود. در واقع تا زمانی که متن صحیح وارد نشود فرم ارسال نمی شود.

در این روش ما یک صفحه aspx معمولی داریم که در رویداد Load این صفحه تصویر را ایجاد می کنیم و متن اتفاقی را پس از نوشتن روی تصویر، در Session ذخیره می کنیم تا در صفحه های مورد نیاز با مقایسه مقدار وارد شده توسط کاربر و این Session فرم های برنامه را مدیریت کنیم.

برای این منظور ابتدا فضا نام های زیر را به صفحه خود اضافه کنید :






using System.Drawing;
using System.Text;





سپس رویداد Load صفحه را بصورت زیر کد نویسی کنید :





SecureImage.aspx.cs protected void Page_Load(object sender, EventArgs e)
{
//ایجاد شیء گرافیک و دیگر ملزومات
Bitmap objBMP = new System.Drawing.Bitmap(60, 20);
Graphics objGraphics = System.Drawing.Graphics.FromImage(objBMP);
objGraphics.Clear(Color.Green);
objGraphics.TextRenderingHint = System.Drawing.Text.``TextRenderingHint.AntiAlias;

//تنظیم فونت نوشته روی عکس
Font objFont = new Font("Arial", 11, FontStyle.Bold);

//ساخت رشته تصادفی 5 رقمی
string randomStr = "";
Random autoRand = new Random();
randomStr = Convert.ToString(autoRand.Next(12345,99999));

//اضافه کردن متن در جلسه
Session.Add("randomStr", randomStr);

//نوشتن متن
objGraphics.DrawString(randomStr, objFont, Brushes.White, 6, 3);

//تنظیم نوع عکس و برگرداندن آن به عنوان خروجی
Response.ContentType = "image/GIF";
objBMP.Save(Response.OutputStream,System.Drawing.I maging.ImageFormat.Gif);

//آزاد کردن منابع
objFont.Dispose();
objGraphics.Dispose();
objBMP.Dispose();
}





در صورتی که این صفحه را اجرا کنید آنچه مشاهده می کنید یک تصویر با پس زمینه سبز است که عددی 5 رقمی را نشان می دهد. با Refresh کردن صفحه متن درون تصویر تغییر می کند.
حال کافیست در فرم خود یک کنترل Image قرار دهیم و مقدار فایل منبع آن را برابر SecureImage.aspx انتخاب کنیم.




<asp:Image ID="Image1" runat="server" ImageUrl="SecureImage.aspx" />




همچنین یک TextBox هم به فرم اضافه می کنیم تا کاربر متن درون تصویر را در آن وارد کند.
قطعه کد زیر جهت بررسی مقدار وارد شده پیشنهاد می شود :





if ((string)Session["randomStr"] == TextBox1.Text.Trim())
{
//Submit Form
}
else
{
//Show Error - Please Enter Security Code that show in Image
}