SQL ஊசிக்கு எதிராக உங்கள் PHP பயன்பாடுகளைப் பாதுகாத்தல்
SQL உட்செலுத்துதல் என்பது ஒரு தீவிரமான பாதுகாப்புப் பாதிப்பாகும், இது சரியான சுத்திகரிப்பு இல்லாமல் SQL வினவல்களில் பயனர் உள்ளீடு நேரடியாகச் செருகப்படும் போது ஏற்படும். இது அங்கீகரிக்கப்படாத அணுகல், தரவு கையாளுதல் அல்லது முழுமையான தரவு இழப்புக்கு வழிவகுக்கும், டெவலப்பர்கள் இந்த அபாயங்களைப் புரிந்துகொள்வதும் குறைப்பதும் முக்கியமானதாக ஆக்குகிறது.
இந்தக் கட்டுரையில், `mysql_query("அட்டவணைக்குள் நுழைய ('$unsafe_variable'))");` போன்ற வினவலில் ஒரு பயன்பாடு சுத்திகரிக்கப்படாத பயனர் உள்ளீட்டைப் பயன்படுத்தும் போது பொதுவான SQL ஊசி தாக்குதல்களை ஆராய்வோம். SQL உட்செலுத்தலைத் தடுப்பதற்கும் உங்கள் PHP பயன்பாடுகளைப் பாதுகாப்பதற்கும் பயனுள்ள உத்திகளைப் பற்றி விவாதிப்போம்.
கட்டளை | விளக்கம் |
---|---|
$mysqli->prepare() | செயல்படுத்துவதற்கு ஒரு SQL அறிக்கையைத் தயாரிக்கிறது. |
$stmt->bind_param() | ஒரு தயாரிக்கப்பட்ட அறிக்கைக்கு மாறிகளை அளவுருக்களாக பிணைக்கிறது. |
$stmt->execute() | தயாரிக்கப்பட்ட அறிக்கையை செயல்படுத்துகிறது. |
$stmt->close() | தயாரிக்கப்பட்ட அறிக்கையை மூடுகிறது. |
$mysqli->real_escape_string() | SQL அறிக்கையில் பயன்படுத்த ஒரு சரத்தில் உள்ள சிறப்பு எழுத்துக்களை எஸ்கேப் செய்கிறது. |
$pdo->prepare() | PDO ஐப் பயன்படுத்தி செயல்படுத்த ஒரு SQL அறிக்கையைத் தயாரிக்கிறது. |
$stmt->bindParam() | PDO ஐப் பயன்படுத்தி குறிப்பிட்ட மாறி பெயருடன் ஒரு அளவுருவை இணைக்கிறது. |
$pdo = null | PDO இணைப்பை மூடுகிறது. |
SQL ஊசியிலிருந்து PHP பயன்பாடுகளைப் பாதுகாத்தல்
வழங்கப்பட்ட ஸ்கிரிப்டுகள் பாதுகாப்பான குறியீட்டு நடைமுறைகளைப் பயன்படுத்தி PHP பயன்பாடுகளில் SQL ஊசி தாக்குதல்களைத் தடுக்க வடிவமைக்கப்பட்டுள்ளன. முதல் ஸ்கிரிப்ட் பயன்படுத்துகிறது $mysqli->prepare() ஒரு SQL அறிக்கையைத் தயாரிப்பதற்கான செயல்பாடு, இது SQL வினவலின் ஒரு பகுதியைக் காட்டிலும் பயனர் உள்ளீடு ஒரு அளவுருவாகக் கருதப்படுவதை உறுதி செய்கிறது. இந்த அணுகுமுறை தீங்கிழைக்கும் SQL குறியீடு செயல்படுத்தப்படும் அபாயத்தைத் தவிர்க்கிறது. பயன்படுத்தி $stmt->bind_param(), ஸ்கிரிப்ட் பயனர் உள்ளீட்டை தயாரிக்கப்பட்ட அறிக்கையுடன் பிணைக்கிறது, அளவுருவின் வகையைக் குறிப்பிடுகிறது. இந்த படி மேலும் உள்ளீடு பாதுகாப்பாக கையாளப்படுவதை உறுதி செய்கிறது. அறிக்கையை நிறைவேற்றுவது உடன் செய்யப்படுகிறது $stmt->execute(), மற்றும் அறிக்கை மூடப்பட்டது $stmt->close() இலவச வளங்களுக்கு. இறுதியாக, தரவுத்தள இணைப்பு பயன்படுத்தி மூடப்பட்டது $mysqli->close().
இரண்டாவது ஸ்கிரிப்ட் பயனர் உள்ளீட்டைப் பயன்படுத்தி எவ்வாறு தப்பிப்பது என்பதை விளக்குகிறது $mysqli->real_escape_string(). இந்த முறை உள்ளீட்டில் உள்ள சிறப்பு எழுத்துக்களைத் தவிர்க்கிறது, இது SQL வினவலில் பயன்படுத்த பாதுகாப்பானது. வினவலில் பயனர் உள்ளீட்டை நேரடியாகச் செருகுவதை விட இந்த அணுகுமுறை சிறந்தது என்றாலும், இது பொதுவாக தயாரிக்கப்பட்ட அறிக்கைகளை விட குறைவான பாதுகாப்பானதாகக் கருதப்படுகிறது. மூன்றாவது ஸ்கிரிப்ட் SQL அறிக்கைகளைத் தயாரிக்கவும் செயல்படுத்தவும் PDO (PHP தரவு பொருள்கள்) ஐப் பயன்படுத்துகிறது. பயன்படுத்தி $pdo->prepare() மற்றும் $stmt->bindParam(), பயனர் உள்ளீடு SQL வினவலுடன் பாதுகாப்பாக பிணைக்கப்பட்டுள்ளதை ஸ்கிரிப்ட் உறுதி செய்கிறது. இந்த முறை அதன் நெகிழ்வுத்தன்மை மற்றும் பாதுகாப்பிற்காக மிகவும் பரிந்துரைக்கப்படுகிறது. அமைப்பதன் மூலம் இணைப்பு மூடப்பட்டுள்ளது $pdo = null, இது அனைத்து வளங்களும் சரியாக வெளியிடப்படுவதை உறுதி செய்கிறது. இந்த ஸ்கிரிப்டுகள் கூட்டாக PHP பயன்பாடுகளில் SQL ஊசி அபாயங்களைக் குறைக்க வலுவான தீர்வுகளை வழங்குகின்றன.
SQL உட்செலுத்தலைத் தடுப்பதற்காக தயாரிக்கப்பட்ட அறிக்கைகளை செயல்படுத்துதல்
PHP மற்றும் MySQLi ஐப் பயன்படுத்துதல்
<?php
// Create a new MySQLi connection
$mysqli = new mysqli("localhost", "user", "password", "database");
// Check connection
if ($mysqli->connect_error) {
die("Connection failed: " . $mysqli->connect_error);
}
// Prepare an SQL statement
$stmt = $mysqli->prepare("INSERT INTO table (column) VALUES (?)");
// Bind parameters
$stmt->bind_param("s", $user_input);
// Set the user input
$user_input = $_POST['user_input'];
// Execute the statement
$stmt->execute();
// Close the statement and connection
$stmt->close();
$mysqli->close();
?>
SQL ஊசியைத் தடுக்க பயனர் உள்ளீட்டிலிருந்து தப்பித்தல்
PHP மற்றும் MySQLi ஐப் பயன்படுத்துதல்
<?php
// Create a new MySQLi connection
$mysqli = new mysqli("localhost", "user", "password", "database");
// Check connection
if ($mysqli->connect_error) {
die("Connection failed: " . $mysqli->connect_error);
}
// Escape the user input
$unsafe_variable = $_POST['user_input'];
$safe_variable = $mysqli->real_escape_string($unsafe_variable);
// Create the SQL query
$sql = "INSERT INTO `table` (`column`) VALUES ('$safe_variable')";
// Execute the query
if ($mysqli->query($sql) === TRUE) {
echo "New record created successfully";
} else {
echo "Error: " . $sql . "<br>" . $mysqli->error;
}
// Close the connection
$mysqli->close();
?>
SQL ஊசியைத் தடுக்க PDO ஐப் பயன்படுத்துதல்
PHP மற்றும் PDO ஐப் பயன்படுத்துதல்
<?php
// Create a new PDO connection
$pdo = new PDO('mysql:host=localhost;dbname=database', 'user', 'password');
// Prepare an SQL statement
$stmt = $pdo->prepare("INSERT INTO table (column) VALUES (:user_input)");
// Bind parameters
$stmt->bindParam(':user_input', $user_input);
// Set the user input
$user_input = $_POST['user_input'];
// Execute the statement
$stmt->execute();
// Close the connection
$pdo = null;
?>
PHP இல் SQL ஊசி தடுப்புக்கான மேம்பட்ட நுட்பங்கள்
தயாரிக்கப்பட்ட அறிக்கைகள் மற்றும் எஸ்கேப்பிங் உள்ளீடு போன்ற அடிப்படை நடவடிக்கைகளுக்கு அப்பால், SQL உட்செலுத்தலைத் தடுப்பதற்கான மற்றொரு முக்கியமான அணுகுமுறை சேமிக்கப்பட்ட நடைமுறைகளைப் பயன்படுத்துவதாகும். சேமிக்கப்பட்ட நடைமுறைகள் SQL குறியீடு ஆகும், அவை சேமித்து மீண்டும் பயன்படுத்தப்படலாம். தரவுத்தளத்திலேயே உங்கள் வினவல்களின் தர்க்கத்தை இணைக்க அவை உங்களை அனுமதிக்கின்றன, இதன் மூலம் கூடுதல் பாதுகாப்பு அடுக்கைச் சேர்க்கிறது. உங்கள் PHP குறியீட்டிலிருந்து இந்த நடைமுறைகளை அழைப்பதன் மூலம், நீங்கள் SQL அறிக்கைகளுடன் நேரடி தொடர்புகளை குறைக்கிறீர்கள், இதனால் உட்செலுத்துதல் ஆபத்தை குறைக்கிறது. மேலும், சேமிக்கப்பட்ட நடைமுறைகளைப் பயன்படுத்தி, SQL அறிக்கைகளின் பாகுபடுத்தும் நேரத்தைக் குறைப்பதன் மூலம் செயல்திறனை மேம்படுத்த முடியும்.
கருத்தில் கொள்ள வேண்டிய மற்றொரு அம்சம் டாக்ட்ரின் அல்லது எலோக்வென்ட் போன்ற பொருள்-தொடர்பு மேப்பிங் (ORM) கட்டமைப்பின் பயன்பாடு ஆகும். ORMகள் தரவுத்தள செயல்பாடுகளை உயர்நிலை APIக்கு சுருக்கி, SQL அறிக்கைகளை உருவாக்குதல் மற்றும் செயல்படுத்துதல் ஆகியவற்றை தானாகவே கையாளும். இந்த சுருக்க அடுக்கு SQL உட்செலுத்தலின் வாய்ப்பைக் கணிசமாகக் குறைக்கிறது, ஏனெனில் டெவலப்பர்கள் மூல SQL வினவல்களைக் காட்டிலும் பொருள்களுடன் தொடர்பு கொள்கிறார்கள். கூடுதலாக, உங்கள் மென்பொருளை புதுப்பித்த நிலையில் வைத்திருப்பது முக்கியம். உங்கள் தரவுத்தள மேலாண்மை அமைப்பு, PHP பதிப்பு மற்றும் நூலகங்களைத் தொடர்ந்து புதுப்பித்தல், அறியப்பட்ட பாதிப்புகளிலிருந்து நீங்கள் பாதுகாக்கப்படுவதை உறுதிசெய்கிறது. கிளையன்ட் மற்றும் சர்வர் பக்கங்களில் விரிவான உள்ளீடு சரிபார்ப்பு மற்றும் சுத்திகரிப்பு நடைமுறைகளை செயல்படுத்துவது சாத்தியமான SQL ஊசி தாக்குதல்களுக்கு எதிராக உங்கள் விண்ணப்பத்தை மேலும் பலப்படுத்துகிறது.
SQL ஊசி தடுப்புக்கான பொதுவான கேள்விகள் மற்றும் தீர்வுகள்
- SQL ஊசி என்றால் என்ன?
- SQL இன்ஜெக்ஷன் என்பது ஒரு குறியீட்டு ஊசி நுட்பமாகும், இது ஒரு வினவலில் தீங்கிழைக்கும் SQL குறியீட்டைச் செருகுவதன் மூலம் பயன்பாட்டின் மென்பொருளில் உள்ள பாதிப்புகளைப் பயன்படுத்துகிறது.
- SQL ஊசி ஏன் ஆபத்தானது?
- SQL உட்செலுத்துதல் தரவுத்தளத் தரவை அங்கீகரிக்கப்படாத அணுகலுக்கு வழிவகுக்கும், தரவு கையாளுதல் அல்லது முழு அட்டவணைகளையும் நீக்குகிறது, இது குறிப்பிடத்தக்க பாதுகாப்பு அச்சுறுத்தலை ஏற்படுத்துகிறது.
- தயாரிக்கப்பட்ட அறிக்கைகள் என்ன?
- தயாரிக்கப்பட்ட அறிக்கைகள் SQL அறிக்கைகள் ஆகும், அவை முன்னரே தொகுக்கப்பட்டு சேமிக்கப்படும், பிணைப்பு அளவுருக்கள் மூலம் வினவல்களை பாதுகாப்பாக செயல்படுத்த அனுமதிக்கிறது, இதனால் SQL உட்செலுத்தலைத் தடுக்கிறது.
- தயாரிக்கப்பட்ட அறிக்கைகள் SQL உட்செலுத்தலை எவ்வாறு தடுக்கின்றன?
- தயாரிக்கப்பட்ட அறிக்கைகள் SQL தர்க்கத்தை தரவிலிருந்து பிரிக்கின்றன, பயனர் உள்ளீடு ஒரு அளவுருவாக கருதப்படுவதை உறுதிசெய்கிறது, இயங்கக்கூடிய குறியீடு அல்ல.
- பங்கு என்ன $mysqli->real_escape_string()?
- $mysqli->real_escape_string() ஒரு சரத்தில் உள்ள சிறப்பு எழுத்துக்களை தப்பித்து, SQL அறிக்கையில் பயன்படுத்துவதற்கு பாதுகாப்பானதாக ஆக்குகிறது மற்றும் SQL ஊசி ஆபத்தை குறைக்கிறது.
- சேமிக்கப்பட்ட நடைமுறைகள் என்ன?
- சேமிக்கப்பட்ட நடைமுறைகள் தரவுத்தளத்தில் சேமிக்கப்பட்ட SQL அறிக்கைகளின் முன்தொகுக்கப்பட்ட தொகுப்புகளாகும், SQL தர்க்கத்தை இணைத்து கூடுதல் பாதுகாப்பை வழங்குகிறது.
- SQL உட்செலுத்தலைத் தடுக்க ORMகள் எவ்வாறு உதவும்?
- ORMகள் தரவுத்தள இடைவினைகளை உயர்-நிலை API களாக மாற்றுகின்றன, நேரடி SQL கையாளுதலைக் குறைக்கின்றன மற்றும் வினவல் கட்டுமானத்தை தானாகவே பாதுகாப்பாகக் கையாளுகின்றன.
- உள்ளீடு சரிபார்ப்பு ஏன் முக்கியமானது?
- உள்ளீடு சரிபார்ப்பு பயனர் உள்ளீடுகள் எதிர்பார்க்கப்படும் வடிவங்கள் மற்றும் வகைகளுக்கு இணங்குவதை உறுதிசெய்கிறது, தீங்கிழைக்கும் தரவை SQL குறியீடாக செயலாக்கி செயல்படுத்துவதைத் தடுக்கிறது.
- மென்பொருளை புதுப்பித்த நிலையில் வைத்திருப்பதால் என்ன பயன்?
- SQL உட்செலுத்துதல் தாக்குதல்களுக்குப் பயன்படுத்தக்கூடியவை உட்பட, அறியப்பட்ட பாதிப்புகளிலிருந்து உங்கள் கணினி பாதுகாக்கப்படுவதை வழக்கமான புதுப்பிப்புகள் உறுதி செய்கின்றன.
SQL ஊசிக்கு எதிராக PHP பயன்பாடுகளைப் பாதுகாப்பதற்கான இறுதி எண்ணங்கள்
முடிவில், PHP இல் SQL உட்செலுத்தலைத் தடுப்பதற்கு பன்முக அணுகுமுறை தேவைப்படுகிறது. தயாரிக்கப்பட்ட அறிக்கைகள் மற்றும் அளவுருக் கொண்ட வினவல்களைப் பயன்படுத்துவது மிகவும் பயனுள்ள முறையாகும். கூடுதலாக, உள்ளீடு சரிபார்ப்பு, ORMகளைப் பயன்படுத்துதல் மற்றும் புதுப்பிக்கப்பட்ட மென்பொருள் பதிப்புகளைப் பராமரிப்பது போன்ற நுட்பங்களைப் பயன்படுத்துவது பாதுகாப்பை மேலும் மேம்படுத்துகிறது. இந்த நடைமுறைகளை ஒருங்கிணைப்பதன் மூலம், டெவலப்பர்கள் தங்கள் பயன்பாடுகளைப் பாதுகாக்கலாம் மற்றும் தீங்கிழைக்கும் தாக்குதல்களிலிருந்து முக்கியமான தரவைப் பாதுகாக்கலாம்.