API (Application Programming Interface) একটি ওয়েব অ্যাপ্লিকেশন বা সিস্টেমের মধ্যে যোগাযোগের জন্য গুরুত্বপূর্ণ ভূমিকা পালন করে। যখন আপনি MySQLi (MySQL Improved) ব্যবহার করে একটি API তৈরি করেন, তখন নিরাপত্তা অত্যন্ত গুরুত্বপূর্ণ। আপনার API Endpoint সুরক্ষিত করতে, বিভিন্ন নিরাপত্তা ব্যবস্থা গ্রহণ করা উচিত যেমন ইনপুট ভ্যালিডেশন, SQL ইনজেকশন থেকে রক্ষা, এবং প্রপার অথেন্টিকেশন এবং অথোরাইজেশন ব্যবস্থা। নিচে MySQLi দিয়ে একটি সুরক্ষিত API Endpoint তৈরির প্রক্রিয়া ব্যাখ্যা করা হবে।
Secure API Endpoint তৈরি করার পদ্ধতি
1. MySQLi সংযোগ স্থাপন
API তৈরি করার প্রথম ধাপ হলো MySQLi দিয়ে ডাটাবেসের সাথে সংযোগ স্থাপন করা। সুরক্ষিত সংযোগের জন্য, ডাটাবেস পাসওয়ার্ড ও ইউজারনেম নিরাপদভাবে সংরক্ষণ করা উচিত, এবং কখনো ডাটাবেস ক্রেডেনশিয়াল হার্ডকোড করা উচিত নয়।
<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "database";
// Create connection
$connection = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($connection->connect_error) {
die("Connection failed: " . $connection->connect_error);
}
?>
2. API রিকোয়েস্ট ভ্যালিডেশন
API এর মাধ্যমে incoming রিকোয়েস্টের ইনপুট ভালোভাবে যাচাই করা গুরুত্বপূর্ণ। আপনি যাচাই করতে পারেন যে, রিকোয়েস্টে প্রয়োজনীয় তথ্য (যেমন প্যারামিটার) পাঠানো হয়েছে কিনা এবং তা সঠিক ফর্ম্যাটে আছে কিনা।
if (!isset($_GET['id'])) {
echo json_encode(["error" => "ID is required"]);
exit();
}
$id = $_GET['id'];
if (!is_numeric($id)) {
echo json_encode(["error" => "Invalid ID format"]);
exit();
}
3. Prepared Statements ব্যবহার করা
SQL ইনজেকশন থেকে রক্ষা পেতে, সর্বদা Prepared Statements ব্যবহার করা উচিত। এর মাধ্যমে, ব্যবহারকারী ইনপুট ডেটা কোডের সাথে মিলানো না হয়ে, এটি নিরাপদভাবে ডাটাবেসে ইনসার্ট বা রিড করা হয়।
$id = $_GET['id'];
$stmt = $connection->prepare("SELECT * FROM users WHERE id = ?");
$stmt->bind_param("i", $id);
$stmt->execute();
$result = $stmt->get_result();
if ($result->num_rows > 0) {
$data = $result->fetch_assoc();
echo json_encode($data);
} else {
echo json_encode(["error" => "No records found"]);
}
$stmt->close();
4. Authentication এবং Authorization
API Endpoint সুরক্ষিত করতে, আপনি অথেন্টিকেশন (authentication) এবং অথোরাইজেশন (authorization) ব্যবস্থা ব্যবহার করতে পারেন। একটি জনপ্রিয় পদ্ধতি হলো JWT (JSON Web Tokens) ব্যবহার করে টোকেন ভিত্তিক অথেন্টিকেশন।
4.1 JWT Authentication ব্যবহার
JWT টোকেন তৈরি ও যাচাই করতে নিচের কোড ব্যবহার করা যেতে পারে। প্রথমে, ব্যবহারকারী লগ ইন করার পর একটি টোকেন জেনারেট করা হবে এবং প্রতিটি API রিকোয়েস্টে সেটি পাঠাতে হবে।
// JWT Library ব্যবহার করা হতে পারে
require_once('vendor/autoload.php');
use \Firebase\JWT\JWT;
// Secret key
$secretKey = "your-secret-key";
// Token তৈরি করা
$issuedAt = time();
$expirationTime = $issuedAt + 3600; // 1 hour expiration
$payload = array(
"iat" => $issuedAt,
"exp" => $expirationTime,
"sub" => $user_id
);
$jwt = JWT::encode($payload, $secretKey);
echo json_encode(["token" => $jwt]);
4.2 JWT টোকেন যাচাই করা
এখন, প্রতিটি API রিকোয়েস্টে প্রাপ্ত JWT টোকেন যাচাই করা হবে।
$headers = apache_request_headers();
if (isset($headers['Authorization'])) {
$jwt = str_replace("Bearer ", "", $headers['Authorization']);
} else {
echo json_encode(["error" => "Authorization token missing"]);
exit();
}
try {
$decoded = JWT::decode($jwt, $secretKey, array('HS256'));
$user_id = $decoded->sub; // User ID from token
} catch (Exception $e) {
echo json_encode(["error" => "Invalid or expired token"]);
exit();
}
5. Response Formatting
API এর মাধ্যমে রেসপন্স যথাযথভাবে ফরম্যাট করা উচিত। JSON ফরম্যাট ব্যবহার করা সাধারণত ভালো অভ্যাস। এটি অন্যান্য ক্লায়েন্ট সিস্টেমের জন্য সহজতর এবং বোধগম্য।
header('Content-Type: application/json');
echo json_encode($response);
6. CORS (Cross-Origin Resource Sharing)
API যদি বিভিন্ন ডোমেইনে কাজ করে (যেমন, ফ্রন্টএন্ড এবং ব্যাকএন্ড আলাদা সার্ভারে), তবে CORS (Cross-Origin Resource Sharing) কনফিগারেশন করা প্রয়োজন। CORS সক্রিয় করার জন্য নিম্নলিখিত হেডার ব্যবহার করা যেতে পারে:
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: GET, POST, OPTIONS");
header("Access-Control-Allow-Headers: Content-Type, Authorization");
নিরাপত্তা টিপস
- HTTPS ব্যবহার করুন: API এর মাধ্যমে কোনো সংবেদনশীল ডেটা পরিবহণ হলে, অবশ্যই HTTPS প্রটোকল ব্যবহার করুন। এতে ডেটা এন্ড-টু-এন্ড এনক্রিপ্টেড থাকে।
- SQL Injection রোধ করুন: সর্বদা Prepared Statements ব্যবহার করুন এবং ইনপুট যাচাই করে নিন।
- Input Validation: ইনপুটে অযাচিত ক্যারেক্টার বা ডেটা ঢোকানো থেকে রক্ষা করতে ভ্যালিডেশন প্রয়োজন। যেমন, ব্যবহারকারী একটি ইমেইল এড্রেস দিলে তা সঠিক ফরম্যাটে রয়েছে কিনা চেক করুন।
- Rate Limiting: API রিকোয়েস্টের হার সীমিত করুন যেন কোনো নির্দিষ্ট সময়ের মধ্যে একাধিক রিকোয়েস্ট একসাথে না চলে যায়।
- Error Handling: কখনোই API রেসপন্সে সরাসরি ডাটাবেসের ত্রুটি বা কনফিগারেশন বার্তা প্রদর্শন করবেন না। এতে নিরাপত্তা ঝুঁকি সৃষ্টি হতে পারে। এর পরিবর্তে কাস্টম ত্রুটি বার্তা ব্যবহার করুন।
MySQLi এর সাথে নিরাপদ API Endpoint তৈরি করা একটি গুরুত্বপূর্ণ প্রক্রিয়া এবং এটি সঠিকভাবে করা হলে আপনার অ্যাপ্লিকেশনটি নিরাপদ এবং শক্তিশালী হয়ে উঠবে। Proper authentication, input validation, and using prepared statements are the key to building secure API endpoints.