PDA

View Full Version : تصویر امنیتی بصورت کاراکتر و اعداد انگلیسی



m.esmaeilzadeh
دوشنبه 07 اردیبهشت 1394, 11:10 صبح
کسی تابحال کلاسی برای php دیده یا کار کرده که همچین تصویر امنیتی رو ایجاد کنه ؟

لینک عکس : http://s6.picofile.com/file/8185108250/captcha.jpg

یعنی با یکسری کاراکتر مثل / یا ــــــــ بیایم یکسری اعداد رو ایجاد کنیم

arenaw
دوشنبه 07 اردیبهشت 1394, 12:19 عصر
سلام. درست کردنش کاره سختی نیست، ولی هک کردنش از اون هم راحت تره. پیشنهاد میکنم سمتش نرید.

-سیّد-
دوشنبه 07 اردیبهشت 1394, 22:18 عصر
http://www.figlet.org
اینها هم برای php:
https://pear.php.net/package/Text_Figlet
http://www.codediesel.com/php/creating-a-figlet-text-in-php
http://www.phpclasses.org/package/1548-PHP-Draw-text-strings-using-ASCII-art-fonts.html

البته همونطور که دوستمون به خوبی اشاره کردن، اصلاً ایده‌ی خوبی نیست و به راحتی crack می‌شه.
figlet هم بیشتر برای قشنگی استفاده می‌شه، و البته یه جاهایی که می‌خواین توی فایل متنی نقاشی بکشید. ولی این کاربرد خوبی نیست!

behnamy01
سه شنبه 08 اردیبهشت 1394, 00:59 صبح
سلام. درست کردنش کاره سختی نیست، ولی هک کردنش از اون هم راحت تره. پیشنهاد میکنم سمتش نرید.
چه مشکلی با این مدل نوشتن میبینید که میگید رد کردنش راحته؟ چون فقط از اعداد استفاده شده میگید؟

کلا تصویر کپچا باید چجوری باشه تا به راحتی رد نشه؟

-سیّد-
سه شنبه 08 اردیبهشت 1394, 06:30 صبح
چه مشکلی با این مدل نوشتن میبینید که میگید رد کردنش راحته؟ چون فقط از اعداد استفاده شده میگید؟

کلا تصویر کپچا باید چجوری باشه تا به راحتی رد نشه؟
برای پاسخ دادن به این سؤال، باید به دلیل وجودی captcha رجوع کنید.
کپچا رو می‌ذارن تا آدم رو از روبات تشخیص بدن. پس باید یه جوری باشه که مغز آدم بتونه متوجهش بشه، ولی یه برنامه نتونه به راحتی متوجه بشه. مشکلی که این روش بالا داره، اینه که شما با استفاده از کاراکترها، اون هم با یه فونت ثابت، کپچا رو تولید می‌کنید. خوب خیلی ساده می‌شه کدی زد که بتونه این کپچا رو به حروف متناظرش تبدیل کنه.

توی خط بالا به دو تا نکته اشاره کردم: استفاده از کاراکتر، و فونت ثابت. اگه به سایتهای مختلف دقت کنید، معمولاً توی کپچاشون این دو تا رو از بین می‌برن: یعنی به جای کاراکتر، از تصویر استفاده می‌کنن (که در نتیجه برای فهمیدنش باید از پردازش تصویر (image processing) استفاده کرد که کار راحتی نیست و درصد خطای بالایی داره)، و همچنین برای هر کپچا از یه فونت دیگه استفاده می‌کنن. در کنار اینا، برای هر چه سخت‌تر کردن پردازش تصویر، توش کلی هم پارازیت می‌ذارن، نوشته‌شون رو کج و کوله می‌نویسن، رنگ‌های متفاوت استفاده می‌کنن، و هر بلایی که بتونن سرش میارن تا با پردازش تصویر نشه فهمیدش!

به عنوان مثال می‌تونید از کتابخونه‌های زیر استفاده کنید:
http://www.phpcaptcha.org
http://keremerkan.net/posts/php-captcha-10-released

یا از سرویس‌هایی مثل recaptcha استفاده کنید:
http://www.google.com/recaptcha/intro/index.html

پ.ن. توی بلاگ امنیت گوگل ( http://googleonlinesecurity.blogspot.com/2014/12/are-you-robot-introducing-no-captcha.html که البته ف.ی.ل.ت.ر هست) گفته شده که هوش مصنوعی امروزه می‌تونه بالای ۹۹٪ captcha رو تشخیص بده، و در نتیجه recaptcha به روش‌های دیگه رو اورده. محض اطلاع!
البته این رو هم دقت کنید که وقتی یه سرویس captcha مثل recaptcha می‌سازید، ملت تمام تلاششون رو می‌کنن که اون کپچای خاص رو crack کنن. ولی وقتی برای سایت خودتون یه جور خاصی کپچا درست می‌کنید، دیگه همه‌ی دنیا تلاش نمی‌کنن بترکوننش و در نتیجه احتمال crack شدنش کمتر می‌شه. بنابراین کسی که برای سایت محدود خودش می‌خواد کپچا بذاره، همین کپچاهای معمولی هم جوابش رو می‌ده و بعیده یکی از راه برسه و با دقت ۹۹٪ بزنه کپچاش رو solve کنه!

arenaw
سه شنبه 08 اردیبهشت 1394, 13:59 عصر
اینم توی اوقات فراغت درست کردم!
کار اصلیه خوندن کپچا با پی‌اچ‌پی انجام میشه. به این صورت که اول با جاوااسکریپت (کد زیر) مقدار کپچایی که توی صفحه هست، به صفحه‌ی پی‌اچ‌پی من فرستاده میشه. بعد اون صفحه پی‌اچ‌پی بعد از خوندن متن، مقدارشو محاسبه و به کاربر نشون میده.

برید توی سایت سامانه سجاد (https://edu.uast.ac.ir/) و این کد جاوااسکریپت رو توی کنسول اجرا کنید.

var pre = document.getElementsByTagName('pre')[0];
var captcha = encodeURIComponent(pre.innerHTML);
var url = 'http://hackedu.gigfa.com/h.php?c='+captcha;
window.open(url,'popUpWindow','height=50,width=100 ');

id1385
سه شنبه 08 اردیبهشت 1394, 15:16 عصر
این بدرد میخوره ؟
خواستی بگو برات بفرستم

http://mariagreenhouse.com/%D8%AA%D9%85%D8%A7%D8%B3-%D8%A8%D8%A7-%D9%85%D8%A7

البته قابلیتهای زیادی داره ها ولی ازش استفاده نشده!

اینم تنظیماتشه:

/** basic * */
public $width;
public $height;
public $background;
public $minLength;
public $maxLength;
public $caseSensitive;
public $transparent = false;


/** fonts * */
public $defaultFontPath;
public $fonts;
public $fontColor;
public $fontSize;
public $fontSizeMin;
public $fontSizeMax;
public $fontAngleMin;
public $fontAngleMax;


/** backgrounds line * */
public $backgroundLines;
public $backgroundLineCount;
public $backgroundLineColors;
public $backgroundLinesSolidityMin;
public $backgroundLinesSolidityMax;


/** image front lines * */
public $faceLines;
public $faceLinesCount;
public $faceLinesColors;
public $faceLinesColorsSolidityMin;
public $faceLinesColorsSolidityMax;


/** background pixels * */
public $backgroundPixel;
public $backgroundPixelCount;
public $backgroundPixelColors;


/** output image tag options * */
public $imageOptions;


/** captcha strings * */
public $captchaLetters;
public $letterSpacing;


/** private vars */
private $gdSuported = false;
private $captchaString = "";
private $fontsPath;
private $PersianFontsList = array('arabi', 'badr', 'bardia', 'elham', 'farnaz', 'helal', 'jadid', 'majid', 'nazanin', 'soraya', 'titr');
private $LatinFontsList = array('ace', 'comic', 'moment', 'stripe3d', 'walt');



public function init() {
/** basic * */
$this->width = isset($this->width) ? $this->width : 85;
$this->height = isset($this->height) ? $this->height : 40;
$this->background = isset($this->background) ? $this->background : "#fff";
$this->minLength = isset($this->minLength) ? $this->minLength : 5;
$this->maxLength = isset($this->maxLength) ? $this->maxLength : 5;
$this->caseSensitive = isset($this->caseSensitive) ? $this->caseSensitive : false;
$this->transparent = isset($this->transparent) ? $this->transparent : false;


/** fonts * */
$this->defaultFontPath = isset($this->defaultFontPath) ? $this->defaultFontPath : true;
$this->fonts = isset($this->fonts) ? $this->fonts : array('titr');
$this->fontColor = isset($this->fontColor) ? $this->fontColor : array('#FF7474', '#666');
$this->fontSize = isset($this->fontSize) ? $this->fontSize : 25;
$this->fontSizeMin = isset($this->fontSizeMin) ? $this->fontSizeMin : 20;
$this->fontSizeMax = isset($this->fontSizeMax) ? $this->fontSizeMax : 30;
$this->fontAngleMin = isset($this->fontAngleMin) ? $this->fontAngleMin : -20;
$this->fontAngleMax = isset($this->fontAngleMax) ? $this->fontAngleMax : 5;


/** backgrounds line * */
$this->backgroundLines = isset($this->backgroundLines) ? $this->backgroundLines : true;
$this->backgroundLineCount = isset($this->backgroundLineCount) ? $this->backgroundLineCount : 4;
$this->backgroundLineColors = isset($this->backgroundLineColors) ? $this->backgroundLineColors : array("#AEAEAE");
$this->backgroundLinesSolidityMin = isset($this->backgroundLinesSolidityMin) ? $this->backgroundLinesSolidityMin : 1;
$this->backgroundLinesSolidityMax = isset($this->backgroundLinesSolidityMax) ? $this->backgroundLinesSolidityMax : 4;


/** image front lines * */
$this->faceLines = isset($this->faceLines) ? $this->faceLines : false;
$this->faceLinesCount = isset($this->faceLinesCount) ? $this->faceLinesCount : 2;
$this->faceLinesColors = isset($this->faceLinesColors) ? $this->faceLinesColors : array("#fff");
$this->faceLinesColorsSolidityMin = isset($this->faceLinesColorsSolidityMin) ? $this->faceLinesColorsSolidityMin : 1;
$this->faceLinesColorsSolidityMax = isset($this->faceLinesColorsSolidityMax) ? $this->faceLinesColorsSolidityMax : 3;


/** background pixels * */
$this->backgroundPixel = isset($this->backgroundPixel) ? $this->backgroundPixel : false;
$this->backgroundPixelCount = isset($this->backgroundPixelCount) ? $this->backgroundPixelCount : 500;
$this->backgroundPixelColors = isset($this->backgroundPixelColors) ? $this->backgroundPixelColors : array("#8892BF");


/** captcha strings * */
$this->captchaLetters = isset($this->captchaLetters) && is_array($this->captchaLetters) && in_array($this->captchaLetters, array("low", "up", "num")) ? $this->captchaLetters : array("low", "up", "num");
$this->letterSpacing = isset($this->letterSpacing) ? $this->letterSpacing : 15;


/** output image tag options * */
$this->imageOptions = array();
}