> For the complete documentation index, see [llms.txt](https://mominur.gitbook.io/mominur-notes/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://mominur.gitbook.io/mominur-notes/system-design/security/api-security.md).

# API Security

বর্তমান সফটওয়্যার ইকোসিস্টেমে **API (Application Programming Interface)** অন্যতম গুরুত্বপূর্ণ একটি অংশ। এটি বিভিন্ন সফটওয়্যার, সার্ভার, ডাটাবেজ বা সিস্টেমকে সংযুক্ত করে এবং ডাটা আদান-প্রদান সহজ করে। তবে, **API Security** ঠিকভাবে নিশ্চিত না করা হলে এটি একটি বড় সিকিউরিটি হুমকি হয়ে উঠতে পারে।

এই লেখায় আমরা **API Security** সম্পর্কে বিস্তারিত আলোচনা করবো—এর গুরুত্ব, সাধারণ ঝুঁকি, এবং কিভাবে API-কে সুরক্ষিত করা যায়।

***

### **API Security কেন গুরুত্বপূর্ণ?**

আমরা প্রতিদিনই বিভিন্ন অ্যাপ্লিকেশন ব্যবহার করি—যেমন, **Facebook, Twitter, Google Maps, Online Banking System** ইত্যাদি। এসব অ্যাপ্লিকেশন তাদের **API** ব্যবহার করে অন্য সার্ভারের সাথে যোগাযোগ করে।

ধরুন, আপনি একটি **Online Banking App** ব্যবহার করছেন, যেখানে API ব্যবহার করে আপনার অ্যাকাউন্টের তথ্য বা লেনদেনের হিসাব পাওয়া যায়। যদি এই API ঠিকভাবে **Secure** করা না হয়, তাহলে হ্যাকার আপনার ব্যাংকিং তথ্য হাতিয়ে নিতে পারে!

তাই **API Security** নিশ্চিত করা মানে ব্যবহারকারীর ব্যক্তিগত তথ্য, আর্থিক লেনদেন এবং সিস্টেমের ডাটা সুরক্ষিত রাখা।

***

### **API Security তে সাধারণ ঝুঁকি (Common API Vulnerabilities)**

নিচে কিছু সাধারণ API Vulnerability আলোচনা করা হলো, যেগুলো **API Security**-তে সবচেয়ে বেশি সমস্যা সৃষ্টি করে—

#### ১. **Broken Authentication**

যদি **API Authentication** (যাচাই-বাছাই) সঠিকভাবে কাজ না করে, তাহলে একজন হ্যাকার অন্য কারও **access token** চুরি করে তার অ্যাকাউন্ট ব্যবহার করতে পারে।

**Example:**\
আপনার API-তে যদি **JWT (JSON Web Token)**-এর মেয়াদ শেষ হয়ে যাওয়ার পরও তা ব্যবহার করা যায়, তাহলে এটি একটি **Authentication Issue**।

#### ২. **Broken Authorization**

যখন একজন ব্যবহারকারী বা অ্যাপ্লিকেশন অনুমোদন ব্যতীত API-এর মাধ্যমে সংবেদনশীল ডাটা অ্যাক্সেস করতে পারে।

**Example:**\
ধরুন, আপনার API রিকোয়েস্টে `/api/user/2` দিয়ে অন্য ব্যবহারকারীর তথ্য পাওয়া যাচ্ছে, অথচ আপনি **user 1** হিসেবে লগইন করা! তাহলে এই **Authorization** ঠিকমতো ইমপ্লিমেন্ট করা হয়নি।

#### ৩. **Rate Limiting না থাকা (API Abuse)**

যদি কোনো API-তে **Rate Limiting** বা **Throttling** না থাকে, তাহলে **Brute Force Attack** বা **DDoS Attack** সহজেই চালানো যায়।

**Example:**\
আপনার **Login API** যদি প্রতিদিন **১০০,০০০ বার** ট্রাই করা যায়, তাহলে হ্যাকার সহজেই **Password Guessing Attack** চালাতে পারবে!

#### ৪. **Sensitive Data Exposure**

অনেক সময় API তে **Sensitive Data** (যেমন **Credit Card Info, Password, Personal Details**) ঠিকভাবে এনক্রিপ্ট না করে পাঠানো হয়। এতে **Man-in-the-Middle Attack** বা **Data Leak** হতে পারে।

#### ৫. **Lack of Input Validation (SQL Injection, XSS)**

যদি API ইনপুট সঠিকভাবে ফিল্টার করা না হয়, তাহলে **SQL Injection, Cross-Site Scripting (XSS)** ইত্যাদি হতে পারে।

***

### **API Security Best Practices**

এখন আসি **API Security** নিশ্চিত করার জন্য কী কী পদক্ষেপ নেওয়া উচিত—

#### **১. Strong Authentication & Authorization ব্যবহার করুন**

* **OAuth 2.0 & OpenID Connect (OIDC)** ব্যবহার করুন।
* **JWT (JSON Web Token)** ঠিকভাবে validate করুন।
* **Role-Based Access Control (RBAC)** এবং **Attribute-Based Access Control (ABAC)** ইমপ্লিমেন্ট করুন।

**Example: JWT Authentication in Python (Flask)**

```python
from flask import Flask, request, jsonify
import jwt
import datetime

app = Flask(__name__)
app.config['SECRET_KEY'] = 'your_secret_key'

# Token Generate
def generate_token(user_id):
    payload = {
        'user_id': user_id,
        'exp': datetime.datetime.utcnow() + datetime.timedelta(hours=1)
    }
    token = jwt.encode(payload, app.config['SECRET_KEY'], algorithm='HS256')
    return token

@app.route('/login', methods=['POST'])
def login():
    data = request.json
    if data['username'] == 'admin' and data['password'] == 'password':
        token = generate_token(1)
        return jsonify({'token': token})
    return jsonify({'message': 'Invalid credentials'}), 401

if __name__ == '__main__':
    app.run(debug=True)
```

এখানে **JWT Token** ব্যবহার করে একটি API নিরাপদ করা হয়েছে।

***

#### **২. API Rate Limiting এবং Throttling ইমপ্লিমেন্ট করুন**

* **IP-based Rate Limiting** করুন (যেমন প্রতি মিনিটে ১০০ টির বেশি রিকোয়েস্ট ব্লক করুন)।
* **Token Bucket Algorithm** ব্যবহার করুন।
* **Flask-Limiter** বা **Nginx Rate Limiting** ব্যবহার করুন।

**Example: Flask-এ Rate Limiting**

```python
from flask import Flask
from flask_limiter import Limiter
from flask_limiter.util import get_remote_address

app = Flask(__name__)
limiter = Limiter(get_remote_address, app=app, default_limits=["5 per minute"])

@app.route("/")
@limiter.limit("10 per minute")
def home():
    return "Hello, World!"

if __name__ == '__main__':
    app.run(debug=True)
```

এখানে **10 requests per minute** লিমিট সেট করা হয়েছে।

***

#### **৩. Data Encryption এবং Secure Communication ব্যবহার করুন**

* **HTTPS (TLS/SSL) বাধ্যতামূলক করুন**।
* **Sensitive Data (password, card info)** এনক্রিপ্ট করুন।
* **HSTS (HTTP Strict Transport Security) পলিসি যোগ করুন**।

***

#### **৪. Input Validation নিশ্চিত করুন**

* **SQL Injection** প্রতিরোধ করতে **ORM (SQLAlchemy, Django ORM)** ব্যবহার করুন।
* **Cross-Site Scripting (XSS)** আটকাতে **input sanitization** করুন।

**Example: SQL Injection Safe Query (Python - SQLAlchemy)**

```python
from sqlalchemy import create_engine, text

engine = create_engine("sqlite:///database.db")

def get_user(username):
    query = text("SELECT * FROM users WHERE username = :username")
    result = engine.execute(query, {"username": username})
    return result.fetchall()
```

এখানে **SQL Injection Safe** ভাবে **Query** করা হয়েছে।

***

API Security নিশ্চিত করা অত্যন্ত গুরুত্বপূর্ণ। সঠিক **Authentication & Authorization**, **Rate Limiting**, **Data Encryption**, **Input Validation**, এবং **Secure Communication** ব্যবহার করলে API অনেক বেশি সুরক্ষিত করা সম্ভব।

আপনার API-কে সবসময় **OWASP API Security Top 10** অনুসারে ডিজাইন করুন এবং রেগুলার **Penetration Testing** করুন।
