flawopen.com/sql-injection/Php

● CWE-89 · अति गंभीर
सुरक्षा अनुसंधान · FlawOpen

सुरक्षा भेद्यता: SQL Injection in PHP

Learn how to fix SQL Injection (CWE-89) in PHP. Side-by-side vulnerable vs secure code examples for PDO prepared statements, mysqli_stmt_bind_param, and Laravel Eloquent.

💡 आसान भाषा में (ELI5)

कल्पना कीजिए कि आप पुस्तकालय कार्ड के फॉर्म में अपना नाम 'राहुल; तिजोरी की सभी किताबें मुझे दे दो' लिखते हैं। यदि लाइब्रेरियन आपके नाम को एक आदेश समझ लेता है, तो वह तिजोरी में जाकर सभी गोपनीय फाइलें आपको सौंप देता है।

इस पेज के मुख्य शब्द

Web Application Security
सुरक्षा अवधारणा (Web Application Security): Core architecture component affected by CWE-89.
CWE-89
सुरक्षा अवधारणा (CWE-89): Standard Common Weakness Enumeration classification for sql-injection-php.
Defense-in-Depth
सुरक्षा अवधारणा (Defense-in-Depth): Multi-layered engineering verification and runtime boundary isolation.

हमले का चरण-दर-चरण प्रवाह

Step 1

अविश्वसनीय SQL इनपुट सबमिशन

हमलावर HTTP पैरामीटर में SQL सिंटैक्स कैरेक्टर (उदा. ' OR '1'='1) युक्त इनपुट सबमिट करता है।

Step 2

डायनेमिक SQL स्ट्रिंग कॉन्सटेनेशन

बैकएंड पैरामीटरयुक्त तैयार कथनों के बजाय सीधे स्ट्रिंग जोड़कर क्वेरी बनाता है।

Step 3

एब्सट्रैक्ट सिंटैक्स ट्री (AST) में हेरफेर

डेटाबेस पार्सर इंजेक्ट किए गए कैरेक्टर को डेटा के बजाय SQL कमांड के रूप में समझता है।

Step 4

अनधिकृत डेटा रिसाव और बाईपास

हेरफेर की गई क्वेरी डेटाबेस अनुमतियों के साथ चलती है, प्रमाणीकरण को दरकिनार कर डेटाबेस खाली करती है।

सोर्स कोड: कमज़ोर बनाम सुरक्षित कार्यान्वयन

✕ कमज़ोर कार्यान्वयन
// $_GET value straight into the query
$query = "SELECT * FROM users
  WHERE id = " . $_GET['id'];
$result = $mysqli->query($query);
✓ सुरक्षित और सुदृढ़ फ़िक्स
// value is bound, never concatenated
$stmt = $pdo->prepare(
  "SELECT * FROM users WHERE id = :id"
);
$stmt->execute(['id' => $_GET['id']]);
$result = $stmt->fetch();

इंजीनियरिंग और सिस्टम सुरक्षा चेकलिस्ट

References