آموزش طراحی و ساخت کد کپچا در PHP
ساخت تصویر امنیتی (کپچا یا captcha) در php در این مطلب روش های تولید کد امنیتی کپچا در php را آموزش می دهیم، تا بتوانید ...
معمولا در بعضی از سایت ها لازم می شود که فرمی را در سایت تعبیه نموده که توسط آن کاربران بتوانند فایل های مورد نظر خود را در سایت آپلود نمایند ( از جمله آپلود فایل رزومه ، عکس و…). حال قبل از آموزش آپلود فایل در php و کدنویسی فرم ارسال فایل لازم است که ابتدا مطمئن شوید که تنظیمات آن فعال است. برای این کار اول باید فایل php.ini را بررسی نمایید و file_uploads را به حالت on قرار دهید. روش دسترسی به فایل php.ini در لوکال هاست و cpanel در ادامه آموزش داده شده است.
این فایل در وب سرور Xampp با توجه به نسخه های مختلف ، عموما در مسیر های زیر وجود دارد:
\xampp\php\php.ini
\xampp\apache\bin\php.ini
\xampp\etc\php.ini
این قطعه کد ابتدا یک فرم آپلود ایجاد نموده و سپس اطلاعات موردنظر خود را به فایل upload.php می فرستد تا برروی آن اطلاعات را پردازش کند.
درون تگ input ، مشخصه type را برابر file قرار دادهایم تا اعلام کنیم که نوع ورودی، به صورت فایل میباشد. بنابراین درون فرم، یک دکمه browse به کاربر نمایش دادهمیشود تا با آن بتواند فایل موردنظر را از کامپیوتر خود انتخاب نماید.
فایل upload.php را ایجاد کنید و قطعه کد زیر را در آن قرار دهید.$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
// Check if image file is a actual image or fake image
if(isset($_POST["submit"])) {
$check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
if($check !== false) {
echo "File is an image - " . $check["mime"] . ".";
$uploadOk = 1;
} else {
echo "File is not an image.";
$uploadOk = 0;
}
}
توضیحاتی در مورد کد بالا
$target_dir = “uploads/” دایرکتوری که فایلها در آن ذخیره می شوند را مشخص میکند.
$target_file مسیر فایل آپلود شده را مشخص می نماید.
$imageFileType پسوند فایل را نگه میدارد.
$_FILES[“fileToUpload”][“name”] نام اصلی فایل در سمت کاربر را در خود دارد.
$_FILES[“fileToUpload”][“size”]سایز فایل رابه بایت نمایش می دهد.
$_FILES[“fileToUpload”][“tmp_name”] نام فایل موقت را دارد.
البته باید دقت داشت که هنگامی که به کاربر اجازه می دهید فایلی را بر روی سرور سایت شما آپلود کند، عملا راهی برای نفوذ به سایت خود را در اختیار وی قرار داده اید. بنابراین برای جلوگیری از هک شدن سایت باید یک سری محدودیت هایی را برای آپلود فایل در php در نظر بگیرید.
قاعدتا باید فایل آپلود شده توسط کاربر موجود باشد. قطعه کد زیر موجود بودن یا نبودن فایل را بررسی می نماید و در صورت موجود نبودن فایل به کاربر پیغام “فایل موجود نیست “را نمایش می دهد.// Check if file already exists
if (file_exists($target_file)) {
echo "Sorry, file already exists.";
$uploadOk = 0;
}
در کد زیر تعیین کرده ایم که اگر فایلی که کاربر آپلود می کند بیشتر از 300KB بود برای آن پیغام “فایل شما بزرگ است” را به نمایش در بیاورد.// Check file size
if ($_FILES["fileToUpload"]["size"] > 300000) {echo "Sorry, your file is too large.";
$uploadOk = 0;
}
در کد زیر بیان کرده ایم که اگر کاربر هر نوع فایلی به جز GIF, JPG, JPEG, PNG را آپلود نمود برای او پیغام خطا نمایش داده شود.
// Allow certain file formats
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
$uploadOk = 0;
}
لذا کد کامل شده ی امنیت به صورت زیر می باشد.$target_dir = "uploads/";
$target_file = $target_dir . basename( $_FILES["fileToUpload"]["name"] );
$uploadOk = 1;
$imageFileType = strtolower( pathinfo( $target_file, PATHINFO_EXTENSION ) );
// Check if image file is a actual image or fake image
if ( isset( $_POST["submit"] ) ) {
$check = getimagesize( $_FILES["fileToUpload"]["tmp_name"] );
if ( $check !== false ) {
echo "File is an image - " . $check["mime"] . ".";
$uploadOk = 1;
} else {
echo "File is not an image.";
$uploadOk = 0;
}
}
// Check if file already exists
if ( file_exists( $target_file ) ) {
echo "Sorry, file already exists.";
$uploadOk = 0;
}
// Check file size
if ( $_FILES["fileToUpload"]["size"] > 500000 ) {
echo "Sorry, your file is too large.";
$uploadOk = 0;
}
// Allow certain file formats
if ( $imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
$uploadOk = 0;
}
// Check if $uploadOk is set to 0 by an error
if ( $uploadOk == 0 ) {
echo "Sorry, your file was not uploaded.";
// if everything is ok, try to upload file
} else {
if ( move_uploaded_file( $_FILES["fileToUpload"]["tmp_name"], $target_file ) ) {
echo "The file " . basename( $_FILES["fileToUpload"]["name"] ) . " has been uploaded.";
} else {
echo "Sorry, there was an error uploading your file.";
}
}
کدهای کپچا یا تصاویر امنیتی ، کلمات به هم ریخته ای هستند که با یک الگوریتم خاص تولید می شوند. با قرار دادن این عبارات به هم ریخته در فرم و شرط صحیح وارد کردن آن ها توسط کاربر ، به راحتی می توان انسان را از ربات تشخیص داده و امنیت فرم های php را دوچندان کرد. برای ایجاد کدهای کپچا در php و وردپرس پیشنهاد می کنیم که حتما مقالات مربوط به آن ها را در بخش آموزش کد کپچا در php و افزونه کد کپچا وردپرس مطالعه فرمایید.
نتیجه گیری
ما با این آموزش قصد داشتیم که به شما آپلود فایل در php و راهکارهای امنیتی را نشان دهیم. از آنجایی که امنیت سایت با آپلود فایل ممکن است به خطر بیفتد باید فرمهای آپلود خود را به یک تیم حرفه ایی و کاربلد بسپارید. تیم وب یار آمادهی هرگونه کمک رسانی به شما دوستان عزیز در زمینهی طراحی وب سایت و سئو سایت است.
در اینستاگرام هم ما را دنبال کنید!