PHP अनुप्रयोगों की शीर्ष 10 कमजोरियाँ: अपने कोड को कैसे सुरक्षित करें
PHP वेब डेवलपमेंट के लिए सबसे लोकप्रिय भाषाओं में से एक बना हुआ है। हालाँकि, इसकी लचीलापन और सरलता अक्सर गंभीर कमजोरियों को जन्म देती है। OWASP के आँकड़ों के अनुसार, 70% से अधिक वेब अनुप्रयोगों में सुरक्षा में कम से कम एक गंभीर खामी होती है। इस लेख में, हम PHP अनुप्रयोगों की 10 सबसे सामान्य कमजोरियों का विश्लेषण करेंगे, खतरनाक कोड के उदाहरण दिखाएंगे और सुरक्षा के लिए व्यावहारिक सुझाव देंगे।
1. SQL इंजेक्शन (SQL Injection)
सबसे प्रसिद्ध और खतरनाक हमला। हमलावर उपयोगकर्ता इनपुट के माध्यम से SQL कोड इंजेक्ट करता है।
खतरनाक कोड:
<?php$id = $_GET['id'];$query = "SELECT * FROM users WHERE id = $id";$result = mysqli_query($conn, $query);?>सुरक्षित कोड (तैयार क्वेरी का उपयोग):
<?php$stmt = $conn->prepare("SELECT * FROM users WHERE id = ?");$stmt->bind_param("i", $_GET['id']);$stmt->execute();$result = $stmt->get_result();?>सुझाव:
- हमेशा तैयार एक्सप्रेशन (PDO या MySQLi) का उपयोग करें।
- उपयोगकर्ता डेटा को SQL क्वेरी में कभी भी concatenate न करें।
- डेटा प्रकारों को मान्य करें (जैसे, ID के लिए
is_numeric())।
2. XSS (Cross-Site Scripting)
असत्यापित डेटा के माध्यम से पेज पर JavaScript कोड इंजेक्ट करना। कुकीज़ चुराना, फिशिंग साइटों पर रीडायरेक्ट करना।
खतरनाक कोड:
<?phpecho "नमस्ते, " . $_GET['name'];?>सुरक्षित कोड:
<?phpecho "नमस्ते, " . htmlspecialchars($_GET['name'], ENT_QUOTES, 'UTF-8');?>सुझाव:
htmlspecialchars()के साथ आउटपुट को एस्केप करें।- हेडर में Content-Security-Policy (CSP) सेट करें।
- JSON प्रतिक्रियाओं के लिए
json_encode()का उपयोग करें।
3. CSRF (Cross-Site Request Forgery)
हमलावर एक प्रमाणित उपयोगकर्ता को अवांछित कार्रवाई करने के लिए मजबूर करता है (जैसे, पैसे ट्रांसफर करना)।
बिना सुरक्षा वाले फॉर्म का उदाहरण:
<form action="delete.php" method="POST"> <input type="hidden" name="id" value="123"> <input type="submit" value="हटाएं"></form>सुरक्षित कोड (टोकन के साथ):
<?phpsession_start();if (empty($_SESSION['token'])) { $_SESSION['token'] = bin2hex(random_bytes(32));}?><form action="delete.php" method="POST"> <input type="hidden" name="token" value="<?= $_SESSION['token'] ?>"> <input type="hidden" name="id" value="123"> <input type="submit" value="हटाएं"></form>सुझाव:
- प्रत्येक फॉर्म के लिए अद्वितीय CSRF टोकन जनरेट करें।
- कार्रवाई करने से पहले सर्वर पर टोकन की जाँच करें।
- SameSite Cookie (Lax या Strict) का उपयोग करें।
4. अनुचित प्रमाणीकरण और सत्र प्रबंधन
कमजोर सत्र सुरक्षा, पहचानकर्ताओं का रिसाव, सत्र फिक्सेशन।
असुरक्षित कोड:
<?phpsession_start();if ($_POST['password'] == 'admin123') { $_SESSION['logged'] = true;}?>सुरक्षित कोड:
<?phpsession_start();session_regenerate_id(true); // लॉगिन के बाद सत्र ID बदलें
// पासवर्ड हैशिंग$hash = password_hash($_POST['password'], PASSWORD_BCRYPT);if (password_verify($input_password, $hash)) { $_SESSION['logged'] = true; $_SESSION['user_agent'] = $_SERVER['HTTP_USER_AGENT'];}?>सुझाव:
password_hash()औरpassword_verify()का उपयोग करें।- लॉगिन के बाद
session_regenerate_id()से सत्र ID बदलें। - सत्र को User-Agent और IP से बांधें।