If tutorials available on this website are helpful for you, please whitelist this website in your ad blocker😭 or Donate to help us ❤️ pay for the web hosting to keep the website running.
आज के time पे web development में security सबसे important aspect है। अगर आप PHP use करके dynamic websites बना रहे हैं जो databases के साथ interact करती हैं, तो आपको SQL Injection attacks से aware रहना चाहिए।
SQL Injection एक ऐसा attack है जिसमे attacker आपके SQL queries में malicious code inject करके आपके database को compromise कर सकता है। इस blog में हम देखेंगे कि PHP में SQL Injection को कैसे रोका जा सकता है।
SQL Injection एक attack technique है जिसमे attacker SQL queries के structure को manipulate करता है ताकि वो unauthorized access या data manipulation कर सके।
For example, अगर आपका SQL query input validation के बिना direct user input use करता है, तो attacker उस input के through SQL commands execute करवा सकता है।
<?php
// Vulnerable code
$username = $_POST['username'];
$password = $_POST['password'];
$query = "SELECT * FROM users WHERE username = '$username' AND password = '$password'";
$result = mysqli_query($connection, $query);
if (mysqli_num_rows($result) > 0) {
echo "Login successful!";
} else {
echo "Invalid username or password.";
}
?>
इस example में अगर कोई malicious user input करे -
' OR '1'='1
तो query कुछ इस तरह execute होगी -
SELECT * FROM users WHERE username = '' OR '1'='1' AND password = ''
यह query हमेशा true
return करेगी और attacker बिना valid credentials के login कर पायेगा।
●●●
अब हम SQL Injection prevent करने के कुछ different - different methods देखेंगे।
Prepared Statements SQL Injection से बचने का सबसे effective तरीका है , यह user input को automatically sanitize
करते हैं और query को safe बनाते हैं।
PHP में आप PDO
या MySQLi
का use करके prepared statements बना सकते हैं।
<?php
// Secure code using PDO
$username = $_POST['username'];
$password = $_POST['password'];
$pdo = new PDO('mysql:host=localhost;dbname=test', 'root', '');
$query = $pdo->prepare("SELECT * FROM users WHERE username = :username AND password = :password");
$query->execute(['username' => $username, 'password' => $password]);
if ($query->rowCount() > 0) {
echo "Login successful!";
} else {
echo "Invalid username or password.";
}
?>
यह code query को pre-compile करता है और variables को bind करके execute करता है, जिससे SQL Injection का risk खत्म हो जाता है।
<?php
// Secure code using MySQLi
$username = $_POST['username'];
$password = $_POST['password'];
$connection = new mysqli("localhost", "root", "", "test");
$query = $connection->prepare("SELECT * FROM users WHERE username = ? AND password = ?");
$query->bind_param("ss", $username, $password);
$query->execute();
$result = $query->get_result();
if ($result->num_rows > 0) {
echo "Login successful!";
} else {
echo "Invalid username or password.";
}
?>
MySQLi का prepare()
method भी किसी भी तरह के SQL Injection attempt से queries को safe बनाता है।
●●●
आपको हमेशा user input को validate करना चाहिए , अगर आपको किसी specific format में input चाहिए (जैसे email, number, etc.), तो उसको validate करना जरूरी है।
<?php
$email = $_POST['email'];
// Validate email
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
echo "Valid email address!";
} else {
echo "Invalid email address!";
}
?>
Sanitization का मतलब है input से dangerous characters को remove करना। PHP में आप filter_var()
या mysqli_real_escape_string()
जैसे functions का use कर सकते हैं input को sanitize करने के लिए।
●●●
Stored Procedures एक और technique है जो SQL Injection attacks को mitigate करने में help कर सकती है , इसमें SQL queries को pre-compiled procedures में define कर दिया जाता है।
DELIMITER //
CREATE PROCEDURE GetUser(IN username VARCHAR(50), IN password VARCHAR(50))
BEGIN
SELECT * FROM users WHERE username = username AND password = password;
END //
DELIMITER ;
इस stored procedure को PHP से call किया जा सकता है ताकि queries pre compiled हो और उनमे injection का risk न रहे।
Database users के लिए हमेशा least privilege principle follow करें , मतलब, हर user को सिर्फ उतनी ही permissions देनी चाहिए जितनी जरूरी है। अगर कोई user सिर्फ data read कर रहा है, तो उसको data modify करने कि permission न दें।
●●●
SQL Injection attacks से बचना किसी भी web application के लिए बहुत जरूरी है। Prepared statements, input validation, least privilege principle, और stored procedures जैसे techniques को implement करके आप अपनी PHP applications को safe बना सकते हैं।
आपके applications की security पर कभी compromise नहीं करना चाहिए, especially जब आप user data को handle कर रहे होते हैं। Security best practices follow करना एक अच्छी habit है जो आपके web applications को hackers से protect कर सकती है।
Loading ...