PHP SQL Injection Prevention : PHP Security Tips

Other Blogs

Blogs ❯❯ PHP

Image could not load

PHP SQL Injection Prevention

आज के 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 को कैसे रोका जा सकता है।

What is 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 करवा सकता है।

Example of SQL Injection Vulnerable Code

<?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 कर पायेगा।

PHP Prevent SQL Injection

अब हम SQL Injection prevent करने के कुछ different - different methods देखेंगे।

1. Use Prepared Statements

Prepared Statements SQL Injection से बचने का सबसे effective तरीका है , यह user input को automatically sanitize करते हैं और query को safe बनाते हैं।

PHP में आप PDO या MySQLi का use करके prepared statements बना सकते हैं।

PHP PDO Example

<?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 MySQLi Example

<?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 बनाता है।

2. Input Validation & Sanitization

आपको हमेशा 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 करने के लिए।

3. Use Stored Procedures

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 न रहे।

4. Least Privilege Principle

Database users के लिए हमेशा least privilege principle follow करें , मतलब, हर user को सिर्फ उतनी ही permissions देनी चाहिए जितनी जरूरी है। अगर कोई user सिर्फ data read कर रहा है, तो उसको data modify करने कि permission न दें।

Conclusion

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 कर सकती है।

Recent Blogs

Loading ...

Hey ! I'm Rahul founder of learnhindituts.com. Working in IT industry more than 4.5 years. I love to talk about programming as well as writing technical tutorials and blogs that can help to others .... keep learning :)

Get connected with me - LinkedIn Twitter Instagram Facebook

Your Thought ?

Please wait . . .

    0 Comment(s) found !