mnoori
یک شنبه 09 آذر 1393, 19:32 عصر
در بسیاری از فرم ها برای آنکه مطمئن شویم اطلاعاتی که در سیستم ثبت یا از پایگاه داده واکشی می شوند توسط انسان انجام می شود یا ماشین؟ از captcha استفاده می کنیم. این روش رو که از session استفاده شده در مقاله ای در سایت hamdsoft.ir (http://hamdsoft.ir) منتشر کردم و برای استفاده بیشتر اینجا هم اون رو منتشر می کنم
یکی از روش های هک ارسال request های متعدد برای سرور می باشد، که ممکن است در ارسال درخواست ها برای سرور اطلاعاتی در پایگاه داده ذخیره شود که در این صورت با ارسال اطلاعات بیهوده توسط یک ربات سرور یا دیتابیس ما اصطلاحا down خواهد شد یا در یک صفحه ورود ممکن ربات یا نرم افزار آنقدر request ارسال نماید تا نام کاربری و رمز عبور مورد نظر را برای وورد به سیستم پیدا نماید
کد امنیتی یا هممون captcha مانع از ایجاد این مشکلات در فرم ها می شود و در نهایت باعث افزایش امنیت در برنامه شما خواهد شد.
1- فایل captcha.ashx را ایجاد نموده و کد های ذیل را در آن کپی نمایید
<%@ WebHandler Language="C#" Class="captcha" %>
using System;
using System.Web;
using System.Drawing.Text;
using System.Drawing;
public class captcha : IHttpHandler, System.Web.SessionState.IRequiresSessionState
{
public void ProcessRequest (HttpContext context) {
string cap = "";
Random rnd = new Random();
for (int i = 0; i < 5; i++)
{
cap += Convert.ToString(rnd.Next(0, 9));
}
context.Session["capt"] = cap;
CreateImage( Convert.ToString(context.Session["capt"]) ).Save(context.Response.OutputStream,
System.Drawing.Imaging.ImageFormat.Gif);
}
public bool IsReusable {
get {
return false;
}
}
private static Bitmap CreateImage(string sImageText)
{
Bitmap bmpImage = new Bitmap(1, 1);
int iWidth = 0;
int iHeight = 0;
Font MyFont = new Font("Segoe Print", 18 ,
System.Drawing.FontStyle.Bold,
System.Drawing.GraphicsUnit.Point);
Graphics MyGraphics = Graphics.FromImage(bmpImage);
iWidth = (int)MyGraphics.MeasureString(sImageText, MyFont).Width;
iHeight = (int)MyGraphics.MeasureString(sImageText, MyFont).Height;
bmpImage = new Bitmap(bmpImage, new Size(iWidth, iHeight));
MyGraphics = Graphics.FromImage(bmpImage);
MyGraphics.Clear(Color.WhiteSmoke);
Color c2 = Color.FromArgb(90, 90, 90);
MyGraphics.TextRenderingHint = TextRenderingHint.AntiAlias;
MyGraphics.DrawString(sImageText, MyFont,
new SolidBrush(c2), 0, 0);
MyGraphics.Flush();
return (bmpImage);
}
}
2- گام بعدی فراخوانی و نمایش captcha در صفحه aspx یا هر صفحه مورد نظر شما می باشد، برای این کار کافی است فایل ساخته شده را در یک تگ img فراخوانی کنیم
<img src="captcha.ashx" />
<br />
Captcha Code: <asp:TextBox ID="captcha" runat="server"></asp:TextBox>
<br />
<asp:Button ID="Button1" runat="server" Text="Check Captcha" OnClick="Button1_Click" />
126170
3- بررسی درستی کد امنیتی وارد شده
protected void Button1_Click(object sender, EventArgs e)
{
if(captcha.Text != Session["capt"])
Response.Write("کد امنیتی وارد شده اشتباه است");
}
منبع : http://hamdsoft.ir/content/178
یکی از روش های هک ارسال request های متعدد برای سرور می باشد، که ممکن است در ارسال درخواست ها برای سرور اطلاعاتی در پایگاه داده ذخیره شود که در این صورت با ارسال اطلاعات بیهوده توسط یک ربات سرور یا دیتابیس ما اصطلاحا down خواهد شد یا در یک صفحه ورود ممکن ربات یا نرم افزار آنقدر request ارسال نماید تا نام کاربری و رمز عبور مورد نظر را برای وورد به سیستم پیدا نماید
کد امنیتی یا هممون captcha مانع از ایجاد این مشکلات در فرم ها می شود و در نهایت باعث افزایش امنیت در برنامه شما خواهد شد.
1- فایل captcha.ashx را ایجاد نموده و کد های ذیل را در آن کپی نمایید
<%@ WebHandler Language="C#" Class="captcha" %>
using System;
using System.Web;
using System.Drawing.Text;
using System.Drawing;
public class captcha : IHttpHandler, System.Web.SessionState.IRequiresSessionState
{
public void ProcessRequest (HttpContext context) {
string cap = "";
Random rnd = new Random();
for (int i = 0; i < 5; i++)
{
cap += Convert.ToString(rnd.Next(0, 9));
}
context.Session["capt"] = cap;
CreateImage( Convert.ToString(context.Session["capt"]) ).Save(context.Response.OutputStream,
System.Drawing.Imaging.ImageFormat.Gif);
}
public bool IsReusable {
get {
return false;
}
}
private static Bitmap CreateImage(string sImageText)
{
Bitmap bmpImage = new Bitmap(1, 1);
int iWidth = 0;
int iHeight = 0;
Font MyFont = new Font("Segoe Print", 18 ,
System.Drawing.FontStyle.Bold,
System.Drawing.GraphicsUnit.Point);
Graphics MyGraphics = Graphics.FromImage(bmpImage);
iWidth = (int)MyGraphics.MeasureString(sImageText, MyFont).Width;
iHeight = (int)MyGraphics.MeasureString(sImageText, MyFont).Height;
bmpImage = new Bitmap(bmpImage, new Size(iWidth, iHeight));
MyGraphics = Graphics.FromImage(bmpImage);
MyGraphics.Clear(Color.WhiteSmoke);
Color c2 = Color.FromArgb(90, 90, 90);
MyGraphics.TextRenderingHint = TextRenderingHint.AntiAlias;
MyGraphics.DrawString(sImageText, MyFont,
new SolidBrush(c2), 0, 0);
MyGraphics.Flush();
return (bmpImage);
}
}
2- گام بعدی فراخوانی و نمایش captcha در صفحه aspx یا هر صفحه مورد نظر شما می باشد، برای این کار کافی است فایل ساخته شده را در یک تگ img فراخوانی کنیم
<img src="captcha.ashx" />
<br />
Captcha Code: <asp:TextBox ID="captcha" runat="server"></asp:TextBox>
<br />
<asp:Button ID="Button1" runat="server" Text="Check Captcha" OnClick="Button1_Click" />
126170
3- بررسی درستی کد امنیتی وارد شده
protected void Button1_Click(object sender, EventArgs e)
{
if(captcha.Text != Session["capt"])
Response.Write("کد امنیتی وارد شده اشتباه است");
}
منبع : http://hamdsoft.ir/content/178