PHP में प्राधिकरण और प्रमाणीकरण: मूल बातों से सुरक्षा तक
वेब एप्लिकेशन की सुरक्षा प्रमाणीकरण (उपयोगकर्ता की पहचान सत्यापित करना) और प्राधिकरण (उसके पहुँच अधिकारों की जाँच) के सही कार्यान्वयन से शुरू होती है। PHP में, इन तंत्रों को अंतर्निहित फ़ंक्शन के साथ-साथ विशेष लाइब्रेरी का उपयोग करके भी लागू किया जा सकता है। इस लेख में, हम मुख्य अवधारणाओं को समझेंगे, कोड उदाहरण लिखेंगे और सुरक्षा की सर्वोत्तम प्रथाओं पर विचार करेंगे।
1. मूल अवधारणाएँ: प्रमाणीकरण बनाम प्राधिकरण
कोड लिखने से पहले, दो शब्दों को स्पष्ट रूप से अलग करना महत्वपूर्ण है:
- प्रमाणीकरण — यह सत्यापित करने की प्रक्रिया है कि उपयोगकर्ता वही है जो वह होने का दावा करता है (आमतौर पर लॉगिन और पासवर्ड के माध्यम से)।
- प्राधिकरण — यह निर्धारित करने की प्रक्रिया है कि प्रमाणित उपयोगकर्ता के लिए कौन से संसाधन या क्रियाएँ उपलब्ध हैं (उदाहरण के लिए, "admin" या "user" भूमिका)।
इनमें से किसी भी चरण के कार्यान्वयन में त्रुटियाँ डेटा लीक या अनधिकृत पहुँच का कारण बन सकती हैं।
2. सत्रों के माध्यम से बुनियादी प्रमाणीकरण (नेटिव PHP)
सबसे सामान्य तरीका सत्रों का उपयोग करना है। PHP एक अंतर्निहित तंत्र $_SESSION प्रदान करता है। आइए एक सरल उदाहरण देखें।
चरण 1: लॉगिन फ़ॉर्म (login.php)
<?phpsession_start();?><!DOCTYPE html><html><head> <title>साइट में प्रवेश</title></head><body> <form method="POST" action="login.php"> <label>लॉगिन:</label> <input type="text" name="username" required> <label>पासवर्ड:</label> <input type="password" name="password" required> <button type="submit" name="login">लॉगिन करें</button> </form></body></html>चरण 2: लॉगिन प्रोसेसिंग (वही login.php)
<?phpsession_start();require_once 'db.php'; // डेटाबेस से कनेक्शन
if (isset($_POST['login'])) { $username = trim($_POST['username']); $password = $_POST['password'];
// 1. SQL इंजेक्शन से बचाव के लिए तैयार क्वेरी $stmt = $pdo->prepare("SELECT id, password_hash FROM users WHERE username = ?"); $stmt->execute([$username]); $user = $stmt->fetch();
// 2. password_verify के माध्यम से पासवर्ड जाँच if ($user && password_verify($password, $user['password_hash'])) { // प्रमाणीकरण सफल $_SESSION['user_id'] = $user['id']; $_SESSION['logged_in'] = true; header("Location: dashboard.php"); exit; } else { $error = "गलत लॉगिन या पासवर्ड"; }}?>चरण 3: सुरक्षित पृष्ठ पर प्राधिकरण की जाँच
<?phpsession_start();if (!isset($_SESSION['logged_in']) || $_SESSION['logged_in'] !== true) { header("Location: login.php"); exit;}// पहुँच अनुमतecho "स्वागत है, उपयोगकर्ता #" . htmlspecialchars($_SESSION['user_id']);?>3. पासवर्ड हैशिंग: पासवर्ड को कभी भी सादे टेक्स्ट में न रखें
PHP पासवर्ड के साथ काम करने के लिए सुरक्षित फ़ंक्शन प्रदान करता है:
password_hash($password, PASSWORD_BCRYPT)— स्वचालित रूप से सॉल्ट के साथ हैश बनाता है।password_verify($password, $hash)— हैश के विरुद्ध पासवर्ड की जाँच करता है।
उपयोगकर्ता पंजीकरण का उदाहरण:
<?php$password = "user123";$hash = password_hash($password, PASSWORD_BCRYPT);// $hash को डेटाबेस में सहेजें$stmt = $pdo->prepare("INSERT INTO users (username, password_hash) VALUES (?, ?)");$stmt->execute([$username, $hash]);?>महत्वपूर्ण: पासवर्ड के लिए कभी भी md5() या sha1() का उपयोग न करें — वे पुराने हो चुके हैं और आसानी से क्रैक हो जाते हैं।
4. भूमिका-आधारित प्राधिकरण (Role-Based Access Control)
अधिकारों को अलग करने के लिए
पुस्तकालय में भी
Swashbuckle C# (.NET) पूरी गाइड: उदाहरण और सेटअप
C++ में OpenCV से इमेज प्रोसेसिंग: resize और crop करना सीखें
PHP के लिए CLI फ्रेमवर्क: Symfony Console और Laravel Zero के साथ कंसोल एप्लिकेशन बनाना