📖 درباره پروژه
پکیج Pure Captcha یک ابزار سبک و بدون وابستگی (Dependency-free) برای تولید تصاویر کپچای امن در زبان PHP است. این سیستم تنها از افزونه داخلی GD خود زبان PHP بهره میگیرد و برای کارکرد به هیچ سرویس خارجی، کدهای سنگین جاوااسکریپت ساید یا دریافت کلیدهای API گوناگون نیازی ندارد.
✨ امکانات سیستم
- 🎨 رابط کاربری زیبا: طراحی مدرن و کاملاً ریسپانسیو مجهز به ابزارهای رندر بکگراندهای گرادیانت و افکتهای سایه.
- 🔧 کاملاً قابل تنظیم: امکان پیکربندی آسان طول رشته متنی، ابعاد تصویر، فونتها، ساختارهای رنگی، نویز و الگوها.
- 🛡️ ۵ سطح سختی مجزا: پیادهسازی گامبهگام لایههای حفاظتی از سطح فرانت معمولی
low تا سطح حداکثر نفوذ nightmare.
- 👻 حروف شبح (Ghost Characters): رندر کاراکترهای فرعی و مبهم در پسزمینه برای گمراهسازی مکانیزم رباتهای تصویرخوان.
- 🌊 اعوجاج موجی شکل: پیچوتاب دادن سینوسی و هندسی به پیکسلهای تصویر با هدف از کار انداختن فرآیند ابزارهای خودکار OCR.
- 🔤 چندین مجموعه کاراکتر: تفکیکپذیری آسان حروف انگلیسی بزرگ و کوچک، کدهای عددی، کاراکترهای خاص یا پترنهای ترکیبی.
- 🌐 پشتیبانی از چندزبانه: بومیسازی بومی و پیشفرض داخلی برای زبانهای فارسی (fa) و انگلیسی (en).
- 🔄 دکمه رفرش متمرکز: بارگذاری مجدد تصاویر به کمک ساختار ماژولار AJAX همراه با اعمال افکت انیمیشن چرخشی چشمنواز.
- 📦 بدون نیاز به وابستگیها: سبکترین ساختار اجرایی بدون انباشتگی فایلهای جانبی با اتکای کامل به هسته
ext-gd.
- 🎯 پشتیبانی از استاندارد PSR-4: معماری ساختاریافته فضای نام و کلاسها کاملاً سازگار و هماهنگ با ابزار لودینگ Composer.
- ⏱️ کنترل زمان انقضا: منقضی ساختن توکنهای امنیتی تولید شده در سشن سرور پس از عبور از بازه زمانی معین و قابل تنظیم.
- 🔑 حساسیت به حروف (Optional): قابلیت سوییچ اختیاری و کنترل وضعیت اعتبارسنجی بزرگ یا کوچک بودن حروف (Case Sensitivity).
📋 پیشنیازها
- PHP نسخه 7.4 یا بالاتر
- اکستنشن تصویری GD (
ext-gd)
- اکستنشن مدیریت سشنها (
ext-session)
📥 فرآیند نصب
دستور زیر را در ترمینال پروژه خود جهت نصب پکیج از طریق کامپوزر وارد کنید:
composer require aminarjmand/pure-captcha
🚀 راهنمای شروع سریع
مرحله ۱: ساخت آدرس تصویر (Endpoint)
یک فایل با نام captcha_image.php ایجاد کنید و هسته رندر را صدا بزنید:
<?php
require 'vendor/autoload.php';
use AminArjmand\PureCaptcha\Captcha;
Captcha::renderImage();
مرحله ۲: تزریق و نمایش کدهای کپچا در فرم شما
کدهای خروجی ویجت را مطابق معماری زیر در فایل اصلی فرم خود لود کنید:
<?php
require 'vendor/autoload.php';
use AminArjmand\PureCaptcha\Captcha;
?>
<!DOCTYPE html>
<html lang="fa" dir="rtl">
<head>
<meta charset="UTF-8">
<title>فرم من</title>
<?php echo Captcha::styles(); ?>
</head>
<body>
<form method="POST" action="submit.php">
<input type="text" name="name" placeholder="نام شما">
<?php echo Captcha::html(); ?>
<button type="submit">ارسال</button>
</form>
</body>
</html>
مرحله ۳: فرآیند اعتبارسنجی توکن
در فایل پردازشگر مقصد (مثلاً submit.php) صحت ورودی کاربر را به شکل زیر ارزیابی نمایید:
<?php
require 'vendor/autoload.php';
use AminArjmand\PureCaptcha\Captcha;
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$captchaInput = $_POST['captcha'] ?? '';
if (Captcha::validate($captchaInput)) {
echo '✅ کد امنیتی صحیح است! پردازش فرم انجام شد.';
} else {
echo '❌ کد امنیتی اشتباه است. لطفاً دوباره تلاش کنید.';
}
}
⚙️ پارامترهای پیکربندی و داکیومنت کانفیگ
روش ۱: پیادهسازی به وسیله فایل تنظیمات اختصاصی
کافیست یک فایل با نام مشخص captcha_config.php در مسیر روت اصلی پروژه خود ایجاد کنید:
<?php
return [
'lang' => 'fa',
'font' => 'Vazirmatn.ttf',
'expiry' => 300,
'length' => 5,
'width' => 170,
'height' => 55,
'font_size' => 22,
'char_type' => 'mixed',
'case_sensitive' => false,
'noise_level' => 'medium',
];
روش ۲: تغییر و اعمال تنظیمات در طول زمان اجرا (Runtime)
Captcha::configure([
'noise_level' => 'extreme',
'length' => 6,
'lang' => 'fa',
'char_type' => 'letters',
]);
⚠️ توجه مهم: هنگام بهرهگیری از متد خطی configure()، حتماً بایستی آن را هم درون فایل اصلی فرم و هم داخل اسکریپت رندرساز captcha_image.php فراخوانی کنید؛ به این دلیل که هر ریکوئست کلاینت پروتکل HTTP کاملاً مستقل عمل میکند.
جدول جامع گزینههای پیکربندی
| تنظیم |
نوع داده |
پیشفرض |
توضیحات عملکرد پارامتر |
lang | string | 'fa' | تنظیم زبان اصلی رابط کاربری: 'fa' یا 'en' |
font | string | '' | نام فایل فونت اختصاصی (موجود در دایرکتوری fonts/) یا آدرسدهی مطلق |
expiry | int | 300 | مدت زمان مجاز ماندگاری و انقضای کد کپچا در حافظه موقت (ثانیه) |
length | int | 5 | تعداد کاراکترهای چیده شده در کادر خروجی متنی |
width | int | 170 | میزان عرض کلی کادر خروجی تصویر رندر شده (پیکسل) |
height | int | 55 | میزان ارتفاع کلی کادر خروجی تصویر رندر شده (پیکسل) |
font_size | int | 22 | سایز و مقیاس درج متون بر مبنای واحد پوینت استاندارد |
char_type | string | 'mixed' | مجموعه توکن کاراکترها: 'mixed'، 'letters'، 'numbers'، 'characters' |
case_sensitive | bool | false | فعالسازی وضعیت حساسیت به تطابق متناظر حروف بزرگ و کوچک متنی |
noise_level | string | 'medium' | موقعیت اعمال فیلترهای نویز و سختی خروجی پکیج |
مجموعه آرایههای کاراکتری معتبر
| کلید شناسه نوع |
لیست ساختار کاراکترهای بکارگیری شده |
mixed | ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789~!@#$%^&*()-+ |
lettersB | ABCDEFGHJKLMNPRSTUVWXYZ |
lettersS | abcdefghijklmnopqrstuvwxyz |
numbers | 0123456789 |
characters | ~!@#$%^&*()-+ |
🎯 مراجع ارزیابی سطوح سختی لایهها
| سطح |
نقاط |
کمان |
خطوط |
چرخش |
شبکه |
شبح |
موج |
درجه سختی |
low | ۱۰۰۰ | ۱۰ | ۱ | ±۱۵° | ❌ | ✅ (۲) | ❌ | ⭐ |
medium | ۲۰۰۰ | ۲۰ | ۲ | ±۲۰° | ❌ | ✅ (۴) | ❌ | ⭐⭐ |
high | ۳۰۰۰ | ۳۰ | ۴ | ±۲۵° | ✅ | ❌ | ✅ (۶) | ⭐⭐⭐ |
extreme | ۴۰۰۰ | ۴۰ | ۶ | ±۳۵° | ✅ | ✅ (۸) | ❌ | ⭐⭐⭐⭐ |
nightmare | ۵۰۰۰ | ۵۰ | ۸ | ±۴۰° | ✅ | ✅ (۱۰) | ✅ | ⭐⭐⭐⭐⭐ |
تشریح رفتار توابع و فیلترهای نویز:
- نقاط (Dots): پخش پیکسلهای رنگی ریز و تصادفی در سطح لایههای تصویر وب.
- کمانها (Arcs): خطوط منحنی شکل رها در پسزمینه تصویر برای به هم ریختن یکپارچگی خطی.
- خطوط (Lines): کشیدن بردارهای ضخیم مستقیم از روی کاراکترهای اصلی متنی.
- چرخش (Rotation): اعمال زوایای انحرافی و مایل به هر کاراکتر به طور مجزا.
- شبکه (Grid): توری کشی هندسی و شطرنجی بر روی المانهای موجود در صفحه.
- شبح (Ghosts): درج حروف کمرنگ و فرعی مات در لایههای زیرین جهت خطایابی ابزارهای OCR.
- موج (Wave): جابجایی پیکسلها به شیوه نوسانات توابع سینوسی که کل گرید را دچار دگرگونی فرمی میکند.
📚 مستندات و مرجع توابع API پکیج
Captcha::configure(array $options): void
تنظیم کردن المانهای رفتاری و مقادیر کانفیگ در طول زمان اجرای برنامه.
Captcha::configure(['length' => 6, 'noise_level' => 'high']);
Captcha::get(string $key, mixed $default = null): mixed
خواندن مقدار یکی از پیکربندیهای ذخیره شده در سیستم.
$lang = Captcha::get('lang');
Captcha::generate(): string
تولید یک توکن امنیتی کاملاً جدید و ذخیرهسازی فوری آن در بطن سشن فعال سرور. این متد رشته متنی کد را برمیگرداند.
$code = Captcha::generate();
Captcha::validate(string $input): bool
بررسی انطباق مقدار ورودی ارسال شده توسط کاربر با مقدار ذخیره شده در سشن. در صورت صحت، خروجی true صادر میگردد. رشته کد به محض یک بار ارزیابی برای امنیت بیشتر از بین میرود (تک بار مصرف).
if (Captcha::validate($_POST['captcha'])) { }
Captcha::renderImage(): void
تولید خروجی خام و مستقیم هدر پکت تصویری فرمت PNG و بستن اسکریپت جاری سرور.
Captcha::renderImage();
Captcha::html(string $imageUrl, string $inputName, ?string $lang): string
رندر کدهای فرمت استاندارد HTML اختصاصی به همراه متدهای کنترلی ویجت.
| پارامتر ورودی |
مقدار پیشفرض |
توضیحات عملکرد توسعه یافته |
$imageUrl | 'captcha_image.php' | آدرس فایل پردازشگر و رندرساز محلی تصویر |
$inputName | 'captcha' | مقدار شناسه تخصیص یافته به اتریبیوت Name فیلد ورودی متن |
$lang | null | نادیده گرفتن تنظیم عمومی و اورراید موضعی زبان پکیج |
Captcha::styles(): string
تولید تگ استایل درونبرنامهای CSS متناسب با نیازمندیهای بصری پوسته ویجت.
🎨 راهاندازی و لود فونتهای سفارشی
۱. فایل با پسوند .ttf خود را در فولدر داخلی پکیج تحت دایرکتوری fonts/ آپلود کنید یا آدرسدهی کامل را اختصاص دهید.
۲. تنظیم مقدار کلید فونت در آرایه کانفیگ پروژه:
'font' => 'MyCustomFont.ttf'
'font' => '/path/to/fonts/MyCustomFont.ttf'
اگر هیچ فونتی تعریف نشود، پکیج به صورت فالبک سراغ فونتهای سیستم و در بدترین حالت، به سراغ فونت بیتمپ هسته اصلی داخلی PHP میرود.
🔧 مثالهای کاربردی سناریو محور
نمونه کپچای سبک عددی
Captcha::configure([
'char_type' => 'numbers',
'length' => 4,
'noise_level' => 'low',
]);
نمونه پیادهسازی کپچای با امنیت فوقالعاده بالا
Captcha::configure([
'char_type' => 'mixed',
'length' => 7,
'noise_level' => 'extreme',
'case_sensitive' => true,
'expiry' => 120,
]);
📁 ساختار درختی پوشههای پروژه
pure-captcha/
├── src/
│ └── Captcha.php # کلاس اصلی پکیج
├── config/
│ └── captcha.php # فایل کانفیگ پیشفرض سیستم
├── fonts/
│ └── .gitkeep # محل قرارگیری فونتهای با فرمت TTF
├── composer.json
├── README.md
└── LICENSE
🤝 مشارکت در توسعه و کپیرایت پروژه
از تمامی گزارشهای خطا، درخواست اضافه کردن ویژگیها و ثبت پولریکوئستهای توسعهدهندگان به گرمی استقبال میشود!
این پروژه تحت لایسنس بینالمللی و عمومی MIT License منتشر و عرضه شده است.
📖 About Pure Captcha
Pure Captcha is a lightweight, dependency-free PHP CAPTCHA package that generates secure CAPTCHA images using only PHP's built-in GD extension. No external cloud services, no heavy JavaScript dependencies, and no remote API keys are required.
✨ Core Package Features
- 🎨 Beautiful UI: Modern, fully responsive component layouts boasting elegant color gradient fills and soft shadow accents.
- 🔧 Fully Customizable: Direct runtime configurations over layout sizing metrics, custom lengths, hex color palettes, and obfuscation noises.
- 🛡️ 5 Difficulty Environments: Scale security parameters fluidly extending from base configurations
low up to brute-force protection nightmare.
- 👻 Ghost Characters: Blends faint, distorted background decoy text structures onto the canvas plane to significantly blind OCR computer models.
- 🌊 Wave Distortion Filters: Applies sinusoidal grid warping algorithms over output pixel structures to thoroughly counter automated reading scripts.
- 🔤 Multiple Sets: Effortlessly filter between mixed alphabetic characters, simple integers, specialized characters, or tailored combined arrays.
- 🌐 Localization Features: Bundled out-of-the-box native localization layouts supporting Persian (fa) and English (en) forms.
- 🔄 Asynchronous Sync Refresh: Features optimized AJAX-driven asset replacement endpoints accompanied by crisp CSS spinning styling animations.
- 📦 Zero Bloat Overheads: Independent execution profile isolated from structural packages, operating on pure native core PHP modules.
📋 Technical Requirements
- PHP Framework Build Engine >= 7.4
- Local GD Graphic Extension Library (
ext-gd)
- Core Session Storage Pipeline Module (
ext-session)
📥 Package Installation
Execute the standard repository command through your terminal environment using Composer:
composer require aminarjmand/pure-captcha
🚀 Developer Quick Start Manual
Step 1: Build the Image Rendering Endpoint
Create a standalone routing file designated as captcha_image.php:
<?php
require 'vendor/autoload.php';
use AminArjmand\PureCaptcha\Captcha;
Captcha::renderImage();
Step 2: Append Widget Containers into Form Blocks
Integrate the core HTML rendering hooks directly inside your view component parameters:
<?php
require 'vendor/autoload.php';
use AminArjmand\PureCaptcha\Captcha;
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>My Form</title>
<?php echo Captcha::styles(); ?>
</head>
<body>
<form method="POST" action="submit.php">
<input type="text" name="name" placeholder="Your name">
<?php echo Captcha::html(); ?>
<button type="submit">Submit</button>
</form>
</body>
</html>
Step 3: Handle Request Token Verification
Process user input matching inside your form target controller (e.g. submit.php):
if (Captcha::validate($_POST['captcha'])) {
echo '✅ CAPTCHA validation passed successfully!';
} else {
echo '❌ Invalid CAPTCHA token provided.';
}
⚙️ System Configuration Matrix
Method 1: Local Setup Files
Generate a captcha_config.php schema wrapper within your working directory root:
<?php
return [
'lang' => 'en',
'font' => 'Vazirmatn.ttf',
'expiry' => 300,
'length' => 5,
'width' => 170,
'height' => 55,
'font_size' => 22,
'char_type' => 'mixed',
'case_sensitive' => false,
'noise_level' => 'medium',
];
Method 2: Runtime Configuration Injection
Captcha::configure([
'noise_level' => 'extreme',
'length' => 6,
'lang' => 'en',
]);
⚠️ Crucial Developer Note: When executing runtime modifications via configure() arrays, definitions must be explicitly called in **both** the interface form file and the image router file (captcha_image.php).
Configuration Options Reference Table
| Option Key |
Data Type |
Default |
Description |
lang | string | 'fa' | Target widget language localization ('fa' / 'en') |
font | string | '' | Target internal fonts/ directory filename string or absolute pathing |
expiry | int | 300 | Token lifespan threshold configuration in seconds |
length | int | 5 | Total character count sequence rendered inside image containers |
width | int | 170 | Total bounded pixel horizontal width dimensions |
height | int | 55 | Total bounded pixel vertical height dimensions |
font_size | int | 22 | Point values scale used for compiling alphanumeric graphics |
char_type | string | 'mixed' | Character libraries mapping identifier types |
case_sensitive | bool | false | Enforces validation matches matching strict case states |
noise_level | string | 'medium' | Difficulty level presets matching noise algorithms |
🎯 Difficulty Presets Table Metric
| Level |
Dots |
Arcs |
Lines |
Rotation |
Grid |
Ghosts |
Wave |
low | 1000 | 10 | 1 | ±15° | ❌ | ✅ (2) | ❌ |
medium | 2000 | 20 | 2 | ±20° | ❌ | ✅ (4) | ❌ |
high | 3000 | 30 | 4 | ±25° | ✅ | ✅ (6) | ❌ |
extreme | 4000 | 40 | 6 | ±35° | ✅ | ✅ (8) | ❌ |
nightmare | 5000 | 50 | 8 | ±40° | ✅ | ✅ (10) | ✅ |
📚 API Core Reference
Captcha::validate(string $input): bool
Validates raw string tokens directly against stored session parameters. Destroys the reference instantly upon evaluation to maintain one-time-use security integrity.
📁 Repository Structural Blueprints
pure-captcha/
├── src/
│ └── Captcha.php # Main system namespace controller
├── config/
│ └── captcha.php # Default setup parameters array
└── composer.json