Avoiding SQL injection attacks In Hindi
एसक्यूल डेटाबेस सॉफ्टवेयर में एसक्यूल इंजेक्शन एक सामान्य सिक्योरिटी वल्नेरेबिलिटी इश्यूज है. जो किसी डेटाबेस अट्टकेर को इनपुट फ़ील्ड या ऑनलाइन यूआरएल में दुर्भावनापूर्ण एसक्यूल डेटाबेस सॉफ्टवेयर में कस्टम कोड इन्सर्ट कर मौजूदा एसक्यूल क्वेरी को मेन्युप्लेट या कण्ट्रोल कर सकता है। इससे मौजूदा एसक्यूल डेटाबेस में अनधिकृत यूजर एक्सेस, इम्पॉटेंट डेटा लॉसेस, डाटा थेफ़्ट, और अन्य सीरियस सिक्योरिटी प्रोब्लेम्स या इश्यूज जनरेट हो सकते हैं। जहा मौजूदा एसक्यूल डेटाबेस के साथ काम करते समय, विशेष रूप से वेब एप्लिकेशन में एसक्यूल इंजेक्शन को स्टॉप करना और कण्ट्रोल करने जरूरी है।

Key strategies to prevent SQL injection attacks in existing databases.
- हमेशा रेडीमेड एसक्यूल स्टेटमेंट्स का उपयोग करें। जहा पैरामीटरयुक्त क्वेरी के साथ अप्लाई करे.
- जहा तक पॉसिबल हो वहा तक यूजर इनपुट से बचें।
- एसक्यूल में स्टोर की गई प्रोसेसेज का उपयोग करें
- जरूरत पड़ने पर एसक्यूल में ORM (ऑब्जेक्ट-रिलेशनल मैपिंग) फ़्रेमवर्क का उपयोग करें।
- एसक्यूल डेटाबेस में यूजर इनपुट को क्लियर करें।
- एसक्यूल अनाधिकृत डेटाबेस यूजर परमिशन को कण्ट्रोल ओर मैनेज करें।
- अधिकृत डेटाबेस यूजर इनपुट को ही वैलिडेट करें।
So let us know all the above SQL injection features in detail.
Use SQL prepared statements (with parameterized queries).
एसक्यूल डेटाबेस में रेडीमेड स्टेटमेंट्स एसक्यूल इंजेक्शन को कण्ट्रोल या स्टॉप करने का सबसे बेस्ट मेथड है। ये एसक्यूल स्टेटमेंट एसक्यूल कोड को यूजर इनपुट से डिफरेंट डील करते हैं, यह क्लियर करते हुए कि यूजर इनपुट को डेटा के रूप में वैलिड माना जाता है, न कि एक्सेक्यूशन कम्पेटिबल कोड के रूप में उपयोग होता है। वर्त्तमान समय में मॉडर्न डेटाबेस लाइब्रेरी इस मैकेनिज्म को फॉलो करते है.
SQL example in PHP using MySQLi.
<?php
// it Create a connection with database
$conn = new mysqli(‘localhost’, ‘username’, ‘password’, ‘database’);
// it Check the database connection
if ($conn->connect_error) {
die(“Connection failed – ” . $conn->connect_error);
}
// it Get user input from the form user email
$email = $_POST[’email’];
// it create a Prepare a parameterized query
$stmt = $conn->prepare(“SELECT * FROM users WHERE email = ?”);
$stmt->bind_param(“s”, $email); // “s” it indicates the parameter type
// it Execute the statement
$stmt->execute();
// it display the result
$result = $stmt->get_result();
// it use to Fetch and display the result
while ($row = $result->fetch_assoc()) {
echo “User: ” . $row[‘name’];
}
// finally it close the statement and connection
$stmt->close();
$conn->close();
?>
SQL explanation.
- यहाँ prepare() फंशन प्लेसहोल्डर्स (जैसे, ?) के साथ एसक्यूल क्वेरी क्रिएट करता है।
- यहाँ bind_param() फंक्शन यूजर इनपुट ($email) को प्लेसहोल्डर से बंडल करता है।
- यहाँ यूजर इनपुट को एसक्यूल कोड के भाग के रूप में नहीं, बल्कि एक पैरामीटर के रूप में बिहेव करता है. जो की डेटाबेस में एसक्यूल इंजेक्शन को स्टॉप करता है।
Escape user input in SQL.
यदि आप एसक्यूल डेटाबेस में किसी कारण से रेडीमेड स्टेटमेंट्स का उपयोग करने में कम्पेटिबल नहीं हैं, तो एसक्यूल में यूजर इनपुट से बचना एसक्यूल इंजेक्शन को रोकने का एक अच्छा माध्यम है। जबकि, यह ओवरव्यू रेडीमेड स्टेटमेंट्स का उपयोग करने की तुलना में कम सिक्योर है, और इसमें मिस्टेक होना आसान है।
Example of using mysqli_real_escape_string() in PHP.
<?php
// it Create a connection to the database
$conn = new mysqli(‘localhost’, ‘username’, ‘password’, ‘database’);
// it Get user email input
$email = $_POST[’email’];
// here it Escape the user input to prevent SQL injection
$email = $conn->real_escape_string($email);
// here it Create and execute the query
$query = “SELECT * FROM users WHERE email = ‘$email'”;
$result = $conn->query($query);
// it Process the result
while ($row = $result->fetch_assoc()) {
echo “User: ” . $row[‘name’];
}
$conn->close();
?>
Explanation of mysqli_real_escape_string() in PHP.
- यहाँ real_escape_string() एसक्यूल इनपुट में किसी भी स्पेशल करैक्टर है, जैसे कोट्स (‘) से सिक्योर करता है. जिससे इसे एसक्यूल क्वेरी में उपयोग करना सिक्योर हो जाता है।
- यह मेथड रेडीमेड स्टेटमेंट्स की तुलना में कम सिक्योर है, क्योंकि यदि आप इनपुट से बचना भूल जाते हैं, तो यह अभी भी एसक्यूल डेटाबेस में एसक्यूल इंजेक्शन वुलनेराबिलिटीज़ को डेवलप कर सकता है।
Use stored procedures in SQL.
एसक्यूल डेटाबेस में स्टोर्ड प्रोसीजर डेटाबेस में स्टोर्ड पूर्वनिर्धारित एसक्यूल क्वेरी होती हैं, जिन्हें स्पेसिफिक क्रिटेरिया के साथ एक्सेक्यूट किया जाता है। जहा ये क्वेरी स्ट्रक्चर को ठीक करके एसक्यूल इंजेक्शन को स्टॉप करने में हेल्प करते हैं।
Example of using stored procedure in MySQL software.
DELIMITER $$
CREATE PROCEDURE GetUserByEmail(IN userEmail VARCHAR(255))
BEGIN
SELECT * FROM users WHERE email = userEmail;
END $$
DELIMITER ;
Mysql Call the stored procedure in PHP.
<?php
// it Create a connection to the database
$conn = new mysqli(‘localhost’, ‘username’, ‘password’, ‘database’);
// it Get user input
$email = $_POST[’email’];
// here it Call the stored procedure
$stmt = $conn->prepare(“it CALL GetUserByEmail(?)”);
$stmt->bind_param(“s”, $email); // it Bind the input parameter
$stmt->execute();
// here it Get the result
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
echo “User: ” . $row[‘name’];
}
$stmt->close();
$conn->close();
?>
MySQL Procedure Explanation.
- यहाँ MySQL डेटाबेस में एक स्टोर्ड प्रोसीजर (GetUserByEmail) क्रिएट की जाती है, जो एक ईमेल पैरामीटर एक्सेप्ट करती है, और रिलेटेड यूजर को पुनः प्राप्त करती है।
- PHP वेब डेवलपमेंट स्क्रिप्ट में, हम स्टोर्ड प्रोसीजर को CALL GetUserByEmail(?) के साथ कॉल करते हैं, और इनपुट पैरामीटर को कम्बाइंड करते हैं।
Use an ORM (object-relational mapping) framework in SQL.
एसक्यूल में ORM डेटाबेस क्वेरी को ऑब्जेक्ट में एब्सट्रैक्ट करते हैं. जिससे एसक्यूल इंजेक्शन वुलनेराबिलिटीज़ इंट्रोडूस करना काम्प्लेक्स हो जाता है। जहा लगभग सभी ORM फ़्रेमवर्क सिक्योर डेटाबेस इंटरैक्शन सुनिश्चित करते हुए, हुड के नीचे पैरामीटरयुक्त एसक्यूल क्वेरी का उपयोग करते हैं।
जहा एसक्यूल डेटाबेस में Eloquent (Laravel) या Doctrine जैसे लोकप्रिय PHP फ्रेमवर्क में ORM एसक्यूल इंजेक्शन स्टॉप करने में हेल्प करते है.
<?php
// here we Using Laravel’s Eloquent ORM
$user = User::where(’email’, $email)->first();
echo $user->name;
?>
ORM (object-relational mapping) framework explanation.
एसक्यूल डेटाबेस में Eloquent ORM ऑटोमेटिकली रूप से यूजर इनपुट से सिक्योर करता है, और सिक्योर क्वेरी का उपयोग करके एसक्यूल इंजेक्शन को स्टॉप करता है।
Sanitize SQL user input.
एसक्यूल डेटाबेस में इनपुट को वैलिडेट करना और क्लियर करना इम्पोर्टेन्ट टास्क है, लेकिन यह रेडीमेड एसक्यूल डेटाबेस स्टेटमेंट्स का उपयोग करने का कोई विकल्प नहीं है। हालाँकि, यूजर इनपुट को क्लियर करना सुनिश्चित करता है कि इनपुट अपेक्षित फॉर्मेट को फॉलो करता है. जिससे एसक्यूल डेटाबेस में इंजेक्शन का रिस्क कम हो जाता है।
Validating email address in SQL example.
<?php
$email = $_POST[’email’];
// it Check if the email is valid or not
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
// it allow Safe to use in SQL
echo “this is a Valid email!”;
} else {
echo “this ia a Invalid email!”;
}
?>
Validating email address in SQL explanation.
यहाँ फ़िल्टर_var() फंक्शन का उपयोग ईमेल एड्रेस को वैलिड करने के लिए किया जाता है. यह सुनिश्चित करने के लिए कि एसक्यूल डेटाबेस क्वेरी में इसका उपयोग करने से पहले यह सही फॉर्मेट को फॉलो करता है।
Limit SQL database permissions.
अपने वेब एप्लिकेशन द्वारा उपयोग किए जाने वाले अकॉउंट की यूजर डेटाबेस परमिशन को लिमिट करें। जैसे, एप्लिकेशन को केवल कुछ पर्टिकुलर डेटाबेस टेबल्स को रीड करने की परमिशन होनी चाहिए, और जब तक बिल्कुल जरूरी न हो, एसक्यूल डेटा को मॉडिफाई या रिमूव करने की परमिशन नहीं होनी चाहिए।
यह एसक्यूल डेटाबेस में किसी अटैक के इफ़ेक्ट को कम करने में हेल्प करता है। भले ही कोई अटैकर एसक्यूल डेटाबेस तक पहुँच प्राप्त कर ले, लेकिन वे लिमिटेड डेटाबेस ट्रांसक्शन कर सकते हैं, उसमें वे सीमित एसक्यूल डेटाबेस प्रिविलेज होंगे।
Validate SQL database input.
हमेशा एसक्यूल डेटाबेस में यूजर इनपुट को वैलिडेट और फ़िल्टर करें। जैसे, यदि आप इन्टिजर डाटा टाइप को एक्सेप्ट कर रहे हैं, तो आप इसे केवल न्यूमेरिक वैल्यू की परमिशन दें। किसी ईमेल के लिए, तय करें कि यह एक वैलिड ईमेल फॉर्मेट है। जहा एसक्यूल डेटाबेस में क्वेरी के लिए कभी भी केवल यूजर इनपुट पर डिपेंड न रहें।
Example of SQL database integer validation.
<?php
$user_id = $_POST[‘user_id’];
// here it Ensure the user_id is a valid integer or not
if (filter_var($user_id, FILTER_VALIDATE_INT)) {
// here it Safe to use in SQL
echo “this ia s Valid user ID!”;
} else {
echo “this is a Invalid user ID!”;
}
?>
SQL database additional tips.
- एसक्यूल डेटाबेस में क्लाइंट और सर्वर के बीच डेटा ट्रांसमिशन की सिक्योरिटी के लिए HTTPS प्रोटोकॉल का उपयोग करें।
- एसक्यूल डेटाबेस में एसक्यूल इंजेक्शन प्रयासों का पता लगाने और उन्हें ब्लॉक करने के लिए वेब एप्लिकेशन में एडवांस्ड प्रोटेक्टेड फ़ायरवॉल (WAF) का उपयोग करें।
- एसक्यूल डेटाबेस में सुरक्षा कमज़ोरियों को पैच करने के लिए अपने डेटाबेस और एप्लिकेशन को नियमित रूप से अपडेट करें।
SQL Injection in SQL Databases Conclusion.
एसक्यूल डेटाबेस में एसक्यूल इंजेक्शन को स्टॉप करने के लिए सबसे बेस्ट प्रैक्टिस हमेशा रेडीमेड स्टेटमेंट्स और पैरामीटरयुक्त डेटाबेस क्वेरी का उपयोग करना है। ये ओवरव्यू सुनिश्चित करते हैं कि यूजर इनपुट को डेटा के रूप में वैलिडेट किया जाता है, न कि एक्सेक्यूट कम्पेटिबल कोड के रूप में। यदि आप रेडीमेड एसक्यूल डेटाबेस में स्टेटमेंट्स का उपयोग करने में असमर्थ हैं, तो एसक्यूल डेटाबेस में इनपुट से बचने, स्टोर्ड प्रोसीजर का उपयोग करने या एक ORM को नियोजित करने पर विचार करें।