Handling file uploads securely with PHP In Hindi
पीएचपी प्रोग्रामिंग में फ़ाइल अपलोड प्रोसेस को सिक्योर आर्डर में मैनेज करना किसी डेडिकेटेड वेब सर्वर या वेब एप्लीकेशन को मालिसियस फाइल्स एक्टिविटीज से बचाव करने में अधिक हेल्पफुल है. जो किसी डेडिकेटेड वेब सर्वर होस्ट या एप्लिकेशन को डेंजर सिचुएशन में मूव कर सकती हैं। पीएचपी प्रोग्रामिंग यूजर को फ़ाइल अपलोडिंग के लिए कई बिल्ट-इन फ़ंक्शन प्रोवाइड करता है. हमेशा आपको इन फंक्शन्स को केयरफुल्ली यूज़ करना है, नहीं तो ये फ़ंक्शन आपके सर्वर के लिए सिक्योरिटी वुलनेराबिलिटीज़ को अल्लॉव कर सकते हैं।

पीएचपी प्रोग्रामिंग में सिक्योर फ़ाइल अपलोड प्रोसेस को फिक्स करने के लिए, बेस्ट प्रैक्टिस को फॉलो करना चाहिए और फाइल अपलोड में प्रॉपर सिक्योरिटी चेक और प्रीकॉशन्स को अप्लाई करना चाहिए।
File Type Validation in PHP.
पीएचपी प्रोग्रामिंग में फॉर्म अपलोड करते समय मोस्ट इम्पोर्टेन्ट टास्क में सिक्योरिटी चेक में से एक फ़ाइल टाइप एक्सटेंशन का वेलिडेशन होता है। जहा इंटरनेट यूजर को मनचाहे तरीके से फ़ाइलें अपलोड करने की परमिशन प्रोवाइड करने से डेडिकेटेड वेबसाइट सर्वर में पीएचपी वेब स्क्रिप्ट जैसी मालिसियस फ़ाइलों से थ्रेट हो सकती है, जिन्हें बिना एडमिन परमिशन के वेब सर्वर पर एक्सेक्यूट किया जा सकता है।
How to Secure File Type Validation in PHP Programming.
- पीएचपी प्रोग्रामिंग में फॉर्म फ़ाइल अपलोड एक्सटेंशन चेक के साथ-साथ माइम फाइल टाइप चेक ($_FILES[‘file’][‘type]) मेथड को यूज़ करें।
- फाइल अपलोड करते समय केवल फ़ाइल एक्सटेंशन जैसे, .jpg पर पूर्ण डिपेंड नहीं रहे, क्योंकि इसे आसानी से मेन्युप्लेट किया जा सकता है।
- अपलोड फ़ाइल कंटेंट इनफार्मेशन कंटेंट को वेरीफाई करने के लिए इमेज फ़ाइलों के लिए getimagesize() फ़ंक्शन को अप्लाई करें।
Example of checking MIME types in a PHP file upload.
$allowedTypes = [‘image/jpeg’, ‘image/png’, ‘image/gif’];
$fileType = $_FILES[‘fileUpload’][‘type’];
if (!in_array($fileType, $allowedTypes)) {
echo “Display Error – Only permitted JPG, PNG, and GIF images files”;
exit;
}
एक्स्ट्रा फाइल अपलोड सिक्योरिटी के लिए, अपलोड इमेज फ़ाइलों के लिए, getimagesize() फंक्शन को यूज़ करके वेरीफाई करें कि अपलोड फ़ाइल एक रियल इमेज है.
if ($fileError === 0) {
$imageDetails = getimagesize($fileTmpName);
if ($imageDetails === false) {
echo “Display Error – Your uploaded image file is not a valid image format”;
exit;
}
}
Limit the size of uploaded files on the server.
ऑनलाइन रैंडम यूजर को लार्ज वॉल्यूम में फ़ाइलें अपलोड करने की परमिशन प्रोवाइड करने से आपके डेडिकेटेड वेब सर्वर पर अननेसेसरी स्टोरेज लोड हो सकता है। यह आपके वेब सर्वर पर एक्स्ट्रा डिस्क स्टोरेज लोकेशन या मेमोरी को यूज़ करके डिनायल ऑफ़ सर्विसेज (DoS) अटैक को थ्रेट कर सकता है।
How to limit the upload file size?
- रैंडम यूजर अपलोड फ़ाइल साइज को चेक करने के लिए $_FILES[‘file’][‘size’] ऐरे मेथड को यूज़ करें।
- मैक्सिमम इमेज फाइल अपलोड साइज लिमिट को 2 MB से फिक्स करें।
Example of checking the upload file size in PHP.
$maxFileSize = 2 * 1024 * 1024; // set upload image file size max 2MB in bytes
if ($_FILES[‘fileUpload’][‘size’] > $maxFileSize) {
echo “Display Error – The upload file is too large, Max upload size is 2 MB.”;
exit;
}
इसके साथ डेवलपर अपने वेब होस्टिंग सर्विस में पीएचपी कॉन्फ़िगरेशन फ़ाइल php.ini में इमेज फ़ाइल अपलोड साइज को मैन्युअल रूप से लिमिट कर सकते हैं.
upload_max_filesize = 2M
post_max_size = 10M
Use the move_uploaded_file() method instead of copy() in file uploads.
यूजर द्वारा सलेक्टेड अपलोड की गई इमेज फ़ाइल को उसके टेम्पररी स्टोरेज लोकेशन से डिजायर डायरेक्टरी में मूव करने के लिए हमेशा बिल्ट-इन पीएचपी फ़ंक्शन move_uploaded_file() को अप्लाई करें। यह आपके लिए तय करता है कि रियल में इमेज फाइल अपलोड की गई है, और फाइल अपलोड प्रोसेस के दौरान उसे टेम्पर्ड नहीं किया गया है।
Example of move_uploaded_file() for moving a file upload in PHP.
$targetPath = $uploadDir . $uniqueFileName;
if (move_uploaded_file($_FILES[‘fileUpload’][‘tmp_name’], $targetPath)) {
echo “upload file process success”;
} else {
echo “Display Error – Failed process to move the uploaded file”;
}
Generate unique file names for uploaded image files
रैंडम यूजर अपलोड इमेज फ़ाइलों को ओवरराइट करने या किसी अटैकर को किसी फ़ाइल को मालिसियस फ़ाइल से रिप्लेस करने से ब्लॉक करने के लिए स्पेशली यदि वे किसी एक्सिस्टिंग फ़ाइल के समान नाम वाली फ़ाइल अपलोड करने में सक्सेस हो जाते हैं, तो हमेशा स्पेसिफिक नामो वाली फ़ाइल को ही यूज़ करें।
फाइल अपलोड प्रोसेस में स्पेसिफिक नाम वाली फाइल जनरेट करने का एक सरल और इफेक्टिव मेथड में uniqid() फ़ंक्शन को अप्लाई करना है.
Example of generating a unique file name in PHP.
$uniqueFileName = uniqid(”, true) . ‘.’ . pathinfo($fileName, PATHINFO_EXTENSION);
ऊपर दिया गया मेथड यह तय करता है कि रैंडम यूजर द्वारा अपलोड प्रत्येक फाइल का एक स्पेसिफिक यूनिक नाम होगा, जिससे फाइल स्टोरेज लोकेशन में किसी भी पॉसिबल कनफ्लिक्ट को अवॉयड किया जा सकेगा।
Check the upload image file extension.
यहाँ अपलोड इमेज फाइल का माइम टाइप वेलिडेशन इम्पोर्टेन्ट है, यहाँ डेवलपर को यह चेक करने के लिए अपलोड फ़ाइल एक्सटेंशन को भी यहाँ चेक करना चाहिए कि यह दिए गए फॉर्मेट टाइप से मेल खाता है या नहीं। जैसे, .exe या .php फ़ाइलों को कभी भी लाइव सर्वर पर अपलोड करने की परमिशन प्रोवाइड नहीं होनी चाहिए, स्पेशल्ली उन सर्वर डायरेक्ट्रीज में जो की पब्लिकली अवेलबल हों।
Example to validate the upload image file extension.
$allowedExtensions = [‘jpg’, ‘jpeg’, ‘png’, ‘gif’];
$fileExtension = strtolower(pathinfo($fileName, PATHINFO_EXTENSION));
if (!in_array($fileExtension, $allowedExtensions)) {
echo “Display Error – unsupported file extension, only support extension is JPG, PNG, and GIF format”;
exit;
}
Ensure a secure file upload directory for upload files.
अपलोड इमेज फाइल के लोकेशन में तय करें कि अपलोड फाइल डायरेक्ट्रीज पब्लिकली अवेलेबल न हो। अपलोड की गई इमेज फ़ाइलों को पब्लिकली रूप से अवेलेबल रूट के बाहर किसी वेब डायरेक्ट्रीज में स्टोर करें या फाइल एक्सेक्यूशन को स्टॉप करने के लिए .htaccess से ब्लॉक या कण्ट्रोल करें।
जैसे, यदि डेवलपर फ़ाइलें अपलोड फ़ोल्डर में ही स्टोर कर रहे हैं, तो यहाँ तय करें कि इस अपलोड फ़ोल्डर के अंदर .htaccess में निचे दिया गया कोड मौजूद होना चाहिए.
# it Prevent access to the upload files directories
<Files “*.php”>
deny from all
</Files>
Upload Directory Permissions – यहाँ पहले आप तय करें कि अपलोड इमेज डायरेक्ट्रीज में सिक्योर परमिशन (आमतौर पर 755 या 775) हों, और इसे वर्ल्ड-राइटेबल कम्पेटिबल (यानी, 777) करने से बचें।
Example of moving upload files to a secure directory.
$uploadDir = ‘../uploads/’; // here it upload image Outside the public web directory
if (!is_dir($uploadDir)) {
mkdir($uploadDir, 0775, true); // here it help to Create a web directory with secure permissions
}
Validate the upload image file path.
वेब डायरेक्ट्रीज ट्रैवर्सल अटैक जहाँ कोई मालिसियस इंट्रूडर या अटैकर ../../../../etc/passwd जैसे पथ वाली किसी फ़ाइल को अपलोड करता है. इस तरह के एक्टिविटीज को स्टॉप करने के लिए, फ़ाइल पथ को हमेशा क्लीन करें और फिक्स करें कि उसमें ../ जैसे कोई भी डेंजरस करैक्टर न हों।
Example of cleaning the upload file path.
$fileName = basename($_FILES[‘fileUpload’][‘name’]); // here this code used to Remove any path info
$targetPath = $uploadDir . $fileName; // here it display Full path to move the uploaded file
// here it Ensure the file does not contain any dangerous path or file components
if (strpos($fileName, ‘..’) !== false || strpos($fileName, ‘/’) !== false) {
echo “Display Error – unsupported file name”;
exit;
}
Upload File Permissions.
वेब डायरेक्ट्रीज में फ़ाइल अपलोड करने के बाद, आप तय करें कि अपलोड फ़ाइल में प्रॉपर परमिशन हैं। जहा फ़ाइल परमिशन को 777 पर सेट न करें, क्योंकि इससे कोई भी यूजर अपलोड फ़ाइल को मॉडिफाई कर अपडेट कर सकेगा। इसके बदले, फ़ाइल के स्पेसिफिक पर्पस के आधार पर 644 या 755 फाइल परमिशन को यूज़ करें।
Restrict file uploads by upload file type.
यहाँ डेवलपर को क्लियर आर्डर में डिफाइन करना चाहिए कि आपका एप्लिकेशन किस प्रकार की फ़ाइलें एक्सेप्ट करेगा। जैसे, यदि आपको केवल इमेज फाइल अपलोड की जरूरत है, तो फाइल अपलोड में माइम टाइप और फ़ाइल एक्सटेंशन को चेक करके इसे अप्लाई करें, और यहाँ .exe, .php, .js आदि जैसे अनावश्यक फ़ाइल फॉर्मेट को अपलोड करने से बचें।
Restrict the file upload process to certain users in the upload file.
यदि जरूरी हो, तो किसी भी प्रकार की फ़ाइल अपलोड को कुछ यूजर तक रिस्ट्रिक्ट या लिमिट करें। इसके साथ आप अपने वेबपेज या वेब एप्प्स में ऑथेंटिकेटेड यूजर या स्पेशल एडमिन रोल्स या स्पेसिफिक परमिशन वाले यूजर तक एक्सेस को मैनेज कर सकते हैं।
File upload error handling and logging.
फाइल अपलोड प्रोसेस में जनरेट होने वाली एरर को ठीक से मैनेज करे और किसी भी फ़ाइल अपलोड एटेम्पट, स्पेशली रूप से फेल्ड अपलोड एटेम्पट को लॉग करें। इससे आपको अपने एप्लीकेशन में किसी भी मालिसियस या सेंसिटिव एक्टिविटीज को चेक करने में हेल्प मिलेगी।
if ($_FILES[‘fileUpload’][‘error’] !== 0) {
echo “Display Error – Some of the problem during file upload”;
exit;
}
Example of a secure file upload script in PHP.
यहाँ आपको एक सरल, सुरक्षित फ़ाइल अपलोड स्क्रिप्ट दी गई है, जिसे आप अपने वेब सर्वर या एप्लीकेशन में फाइल अपलोड प्रोसेस को सिक्योर आर्डर में इम्प्लीमेंट कर सकते है.
<?php
// this code help us to Handle file upload process securely
if ($_SERVER[‘REQUEST_METHOD’] == ‘POST’ && isset($_FILES[‘fileUpload’])) {
$file = $_FILES[‘fileUpload’];
$fileName = basename($file[‘name’]);
$fileTmpName = $file[‘tmp_name’];
$fileSize = $file[‘size’];
$fileError = $file[‘error’];
$fileType = $file[‘type’];
// below code help us to only Allowed file types and max upload size is 2 MB
$allowedTypes = [‘image/jpeg’, ‘image/png’, ‘image/gif’];
$maxFileSize = 2 * 1024 * 1024; // here it restrict upload file size is only 2MB
// this code used to Check for upload file errors
if ($fileError !== 0) {
echo “Display Error – generate issue during file uploading”;
exit;
}
// this code used to Check the upload file max size
if ($fileSize > $maxFileSize) {
echo “Display Error – upload file is too large. only max file upload size is 2MB”;
exit;
}
// here it used to Check file type
if (!in_array($fileType, $allowedTypes)) {
echo “Display Error – Invalid file extension, it support only types is – JPG, PNG, GIF”;
exit;
}
// this code help to Generate unique filename for all upload file
$uniqueFileName = uniqid(”, true) . ‘.’ . pathinfo($fileName, PATHINFO_EXTENSION);
$uploadDir = ‘uploads/’;
// this code Create a upload directory if it doesn’t exist with permission
if (!is_dir($uploadDir)) {
mkdir($uploadDir, 0775, true);
}
$targetPath = $uploadDir . $uniqueFileName;
// this code used to Move the uploaded file from temprory lcation to permanent location
if (move_uploaded_file($fileTmpName, $targetPath)) {
echo ” file upload success”;
} else {
echo “Display Error – unable to move the uploaded file”;
}
}
?>
php file upload handling conclusion.
- पीएचपी प्रोग्रामिंग में फ़ाइल अपलोड प्रोसेस को इन स्टेप्स को प्रॉपर फॉलो करके, आप पीएचपी में फ़ाइल अपलोड प्रोसेस को सिक्योर आर्डर में मैनेज कर सकते हैं.
- जहा आप अपलोड फ़ाइल टाइप और फाइल साइज को वेरीफाई कर सकते है।
- अपलोड फाइल ओवरराइटिंग प्रोसेस को स्टॉप करने के लिए यूनिक फ़ाइल नामों को यूज़ करें।
- यहाँ आप पहले तय करें कि आपकी अपलोड फाइल डायरेक्ट्रीज सिक्योर और प्रोटेक्टेड है, और किसी भी प्रकार के एक्सेक्यूटबल सोर्स कोड कम्पेटिबल नहीं है।
- हमेशा अपलोड फ़ाइल पथों को क्लीन करें और डेंजरस करैक्टर को चेक करें।
- अपलोड फ़ाइल टाइप को केवल जरूरत तक ही लिमिटेड करे।