API Security

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

নিম্নে API Security-এর গুরুত্ব, সাধারণ ঝুঁকি এবং এটিকে সুরক্ষিত করার আধুনিক ও কার্যকর পদ্ধতিগুলো আরও গুছিয়ে এবং বিস্তারিতভাবে আলোচনা করা হলো।

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

  • সংবেদনশীল ডেটা সুরক্ষা: অনলাইন ব্যাংকিং বা ই-কমার্স অ্যাপ্লিকেশনের API-তে ইউজারের ব্যক্তিগত তথ্য এবং আর্থিক লেনদেনের হিসাব থাকে। সিকিউরিটি না থাকলে হ্যাকাররা সহজেই এই ডেটা হাতিয়ে নিতে পারে।

  • সিস্টেম ইন্টিগ্রিটি বজায় রাখা: হ্যাকাররা API-এর মাধ্যমে ম্যালিসিয়াস ডেটা ইনজেক্ট করে মূল সার্ভারের ক্ষতি করতে পারে।

  • রেপুটেশন এবং কমপ্লায়েন্স: ডেটা লিক হলে কোম্পানির সুনাম নষ্ট হয় এবং GDPR বা HIPAA-এর মতো রেগুলেটরি আইনের কারণে বড় অঙ্কের জরিমানার সম্মুখীন হতে হয়।

API Security-তে সাধারণ ঝুঁকি (OWASP API Security Top 10)

সিস্টেমে সবচেয়ে বেশি যে সমস্যাগুলো দেখা যায়:

১. Broken Object Level Authorization (BOLA / IDOR): অন্য ইউজারের ডেটা অ্যাক্সেস করতে পারা।

২. Broken Authentication: টোকেন বা পাসওয়ার্ড ম্যানেজমেন্টে দুর্বলতা।

৩. Broken Object Property Level Authorization: ইউজারের এমন কোনো ফিল্ড (যেমন: is_admin=true) পরিবর্তন করতে পারা, যা তার করার কথা নয়।

৪. Unrestricted Resource Consumption: রেট লিমিটিং বা পে-লোড লিমিট না থাকা (আগে এটি Lack of Rate Limiting নামে ছিল)।

৫. Broken Function Level Authorization: সাধারণ ইউজার হিসেবে লগইন করে অ্যাডমিন লেভেলের API (যেমন: ডিলিট রিকোয়েস্ট) কল করতে পারা।

৬. Unrestricted Access to Sensitive Business Flows: বট বা অটোমেটেড স্ক্রিপ্ট দিয়ে অতিরিক্ত টিকিট বুকিং বা স্প্যাম কমেন্ট করার মতো বিজনেস ফ্লো অ্যাবিউজ করা।

৭. Server Side Request Forgery (SSRF): API-কে ম্যানিপুলেট করে ইন্টারনাল নেটওয়ার্কের অন্য কোনো সার্ভারে রিকোয়েস্ট পাঠানো।

৮. Security Misconfiguration: সার্ভারের ভুল কনফিগারেশন, অপ্রয়োজনীয় পোর্ট খোলা থাকা বা ডিবাগ এরর মেসেজ রেন্ডার করা।

৯. Improper Inventory Management: API-এর পুরনো বা আনপ্যাচড ভার্সন (যেমন: v1) প্রোডাকশনে রেখে দেওয়া, যা হ্যাকাররা সহজেই টার্গেট করতে পারে।

১০. Unsafe Consumption of APIs: থার্ড-পার্টি API বা এক্সটার্নাল সার্ভিস থেকে আসা ডেটাকে ভ্যালিডেট না করেই অন্ধভাবে বিশ্বাস করা।

API Security Best Practices

API-কে সুরক্ষিত করতে নিচের পদক্ষেপগুলো নিশ্চিত করা অত্যন্ত জরুরি:

১. Strong Authentication ও Authorization ব্যবহার করা

  • Authentication এর জন্য OAuth 2.0 ও OpenID Connect (OIDC) ব্যবহার করুন।

  • JWT-এর ক্ষেত্রে শক্তিশালী সিক্রেট কি ব্যবহার করুন এবং টোকেনের মেয়াদ (Expiration time) ছোট রাখুন।

  • Role-Based Access Control (RBAC) ইমপ্লিমেন্ট করুন।

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

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

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

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

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

  • IP বা ইউজার টোকেন ভিত্তিক Rate Limiting সেট করুন।

  • অতিরিক্ত বড় রিকোয়েস্ট বডি প্রসেস করা ঠেকাতে পেলোড সাইজ লিমিট (Payload Size Limit) নির্ধারণ করুন।

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=["100 per day", "10 per hour"])

@app.route("/api/data")
@limiter.limit("5 per minute")
def get_data():
    return jsonify({"data": "Secure API Response"})

৩. Strict Input Validation এবং SQLi প্রতিরোধ

  • সব ধরনের ইনপুট সার্ভার-সাইডে ভ্যালিডেট করুন।

  • SQL Injection প্রতিরোধ করতে ORM (SQLAlchemy, Django ORM, Prisma) বা Parameterized Query ব্যবহার করুন।

from sqlalchemy import create_engine, text

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

def get_user_securely(username):
    query = text("SELECT * FROM users WHERE username = :username")
    
    with engine.connect() as connection:
        result = connection.execute(query, {"username": username})
        return result.fetchall()

৪. Data Encryption এবং Secure Communication

  • ক্লায়েন্ট এবং সার্ভারের মধ্যে যোগাযোগের জন্য সর্বদা HTTPS (TLS/SSL) বাধ্যতামূলক করুন।

  • ডেটাবেসে পাসওয়ার্ড সংরক্ষণ করতে Bcrypt বা Argon2 এর মতো হ্যাশিং অ্যালগরিদম ব্যবহার করুন।

  • API রেসপন্সে Security Headers (যেমন: Strict-Transport-Security, Content-Security-Policy) যুক্ত করুন।

৫. CORS এবং API Gateway কনফিগারেশন

  • Cross-Origin Resource Sharing (CORS) কনফিগার করার সময় Access-Control-Allow-Origin: * ব্যবহার করা থেকে বিরত থাকুন। শুধুমাত্র বিশ্বস্ত ডোমেইনগুলোকে অ্যালাও করুন।

  • মাইক্রোসার্ভিস আর্কিটেকচারে সরাসরি ইন্টারনাল সার্ভার এক্সপোজ না করে AWS API Gateway, Kong বা Nginx-এর মতো API Gateway ব্যবহার করুন, যা সেন্ট্রালি রেট লিমিটিং এবং অথেনটিকেশন হ্যান্ডেল করবে।

API Security কোনো একবার কনফিগার করে ভুলে যাওয়ার বিষয় নয়। আধুনিক ও নিরাপদ সিস্টেম ডেভেলপ করতে কোড লেখার সময় OWASP API Security Top 10 গাইডলাইন অনুসরণ করুন। সেই সাথে প্রোডাকশনে ডিপ্লয় করার আগে সিস্টেমের দুর্বলতা খুঁজে বের করতে নিয়মিত পেনিট্রেশন টেস্টিং (Penetration Testing) এবং সিকিউরিটি অডিট পরিচালনা করুন।