0%
در حال بارگذاری...

جستجو در سایت

درس ۸ سطح متوسط: امنیت در پایتون – رمزنگاری، اعتبارسنجی، جلوگیری از حملات و نوشتن کد امن

پایتون | Python متوسط

سلام مهندس امنیت پایتون! تبریک فوق‌العاده ویژه می‌گم که تا آخرین درس سطح متوسط رسیدی. الان دقیقاً توی نقطه‌ای هستی که فقط برنامه‌نویس‌های حرفه‌ای و ارشد بهش می‌رسن. تو این درس قراره با مهم‌ترین و حیاتی‌ترین موضوع دنیای برنامه‌نویسی آشنا بشی: امنیت. وقتی این درس تموم بشه، تو دیگه هیچوقت کد ناامن نمی‌نویسی، می‌دونی چطور از حملات خطرناک مثل SQL Injection، XSS، CSRF، Brute Force و Session Hijacking جلوگیری کنی، رمزعبور رو امن ذخیره کنی، توکن JWT بسازی و اعتبارسنجی ورودی رو مثل یه هکر حرفه‌ای انجام بدی. این درس آخرین پله قبل از ورود به سطح پیشرفته است و بعدش رسماً یه توسعه‌دهنده تمام‌عیار و امن می‌شی. آماده‌ای؟ بریم که قفل امنیت رو برای همیشه باز کنیم!

چرا امنیت در پایتون حیاتیه؟

هر روز هزاران سایت و اپلیکیشن به خاطر یه خط کد ناامن هک می‌شن. یه برنامه‌نویس حرفه‌ای قبل از اینکه کد بزنه، اول فکر می‌کنه: «این کد چطور می‌تونه هک بشه؟»

۱۰ تهدید امنیتی رایج که باید بشناسیشون

تهدید توضیح جلوگیری
SQL Injection اجرای کد مخرب در دیتابیس استفاده از Parameterized Query
XSS اجرای جاوااسکریپت مخرب Escape خروجی + CSP
CSRF درخواست جعلی CSRF Token
Brute Force حدس رمزعبور Rate Limiting + CAPTCHA
Session Hijacking دزدیدن کوکی Https + Secure Flag

ماژول secrets – امن‌ترین راه تولید توکن و رمز

import secrets
import string

# توکن امن ۳۲ بایتی
token = secrets.token_hex(32)
print(token)

# رمزعبور امن
alphabet = string.ascii_letters + string.digits + "!@#$%"
password = ''.join(secrets.choice(alphabet) for i in range(16))
print(password)

hashing رمزعبور – هرگز رمز رو خام ذخیره نکن!

import bcrypt

# ذخیره رمزعبور
password = "MySecurePass123"
hashed = bcrypt.hashpw(password.encode('utf-8'), bcrypt.gensalt())
print(hashed)

# بررسی رمزعبور
def verify_password(plain_password, hashed):
    return bcrypt.checkpw(plain_password.encode('utf-8'), hashed)

print(verify_password("MySecurePass123", hashed))  # True
print(verify_password("wrong", hashed))            # False

JWT – توکن احراز هویت امن

import jwt
import datetime

secret_key = "your-super-secret-key-256-bit"

# ساخت توکن
payload = {
    "user_id": 123,
    "exp": datetime.datetime.utcnow() + datetime.timedelta(hours=1),
    "iat": datetime.datetime.utcnow()
}
token = jwt.encode(payload, secret_key, algorithm="HS256")
print(token)

# اعتبارسنجی توکن
try:
    decoded = jwt.decode(token, secret_key, algorithms=["HS256"])
    print("توکن معتبر:", decoded)
except jwt.ExpiredSignatureError:
    print("توکن منقضی شده")
except jwt.InvalidTokenError:
    print("توکن نامعتبر")

جلوگیری از SQL Injection با sqlite3

import sqlite3

# خطرناک - هرگز این کار رو نکن!
# cursor.execute(f"SELECT * FROM users WHERE name = '{user_input}'")

# امن - همیشه از پارامتر استفاده کن
safe_query = "SELECT * FROM users WHERE name = ? AND active = ?"
cursor.execute(safe_query, (user_input, 1))

اعتبارسنجی و Sanitize ورودی کاربر

import re
from html import escape

def validate_email(email):
    pattern = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'
    return re.match(pattern, email) is not None

def sanitize_input(user_input):
    # جلوگیری از XSS
    return escape(user_input.strip())

# استفاده
if validate_email(user_email):
    safe_name = sanitize_input(user_name)
else:
    raise ValueError("ایمیل نامعتبر")

Rate Limiting – جلوگیری از Brute Force

from collections import defaultdict
import time

login_attempts = defaultdict(list)

def is_rate_limited(ip, max_attempts=5, window=300):
    now = time.time()
    attempts = login_attempts[ip]
    # حذف تلاش‌های قدیمی
    attempts = [t for t in attempts if now - t < window] login_attempts[ip] = attempts if len(attempts) >= max_attempts:
        return True
    attempts.append(now)
    return False

۱۲ تمرین آتشین برای تبدیل شدن به متخصص امنیت

  1. یه سیستم ثبت‌نام کامل با bcrypt و JWT بساز
  2. یه API با FastAPI و JWT authentication پیاده کن
  3. یه فرم ورود با CSRF Token و Rate Limiting بساز
  4. همه ورودی‌های کاربر رو با regex اعتبارسنجی کن
  5. یه سیستم فراموشی رمز با توکن یک‌بارمصرف امن بساز
  6. یه WAF ساده برای جلوگیری از SQL Injection و XSS بنویس
  7. کوکی‌ها رو با Secure, HttpOnly و SameSite تنظیم کن
  8. یه ابزار اسکن امنیت برای پروژه خودت بنویس
  9. همه توکن‌ها رو با secrets تولید کن
  10. یه سیستم دو مرحله‌ای احراز هویت (2FA) با pyotp بساز
  11. یه penetration test ساده روی پروژه خودت انجام بده
  12. کلاس کامل SecurityManager بساز که همه این امکانات رو داشته باشه

پروژه نهایی سطح متوسط: سیستم احراز هویت کاملاً امن

import bcrypt
import jwt
import secrets
from datetime import datetime, timedelta

class SecureAuth:
    def __init__(self):
        self.secret_key = secrets.token_hex(32)
        self.users = {}  # در پروژه واقعی از دیتابیس استفاده کن
    
    def register(self, username, password):
        if username in self.users:
            raise ValueError("کاربر وجود دارد")
        hashed = bcrypt.hashpw(password.encode(), bcrypt.gensalt())
        self.users[username] = hashed
        return "ثبت‌نام موفق"
    
    def login(self, username, password):
        if username not in self.users:
            return None
        if bcrypt.checkpw(password.encode(), self.users[username]):
            payload = {
                "username": username,
                "exp": datetime.utcnow() + timedelta(hours=2),
                "iat": datetime.utcnow()
            }
            token = jwt.encode(payload, self.secret_key, algorithm="HS256")
            return token
        return None

auth = SecureAuth()
auth.register("sajjad", "MySuperSecurePass123!")
token = auth.login("sajjad", "MySuperSecurePass123!")
print("توکن امن:", token)

جمع‌بندی نهایی سطح متوسط

تبریک عظیم می‌گم! تو الان رسماً سطح متوسط پایتون رو با بالاترین کیفیت تموم کردی. از الگوریتم و ساختار داده تا GUI، تحلیل داده، تست، بهینه‌سازی و حالا امنیت – همه چیز رو در حد حرفه‌ای یاد گرفتی. دیگه هیچ پروژه‌ای نیست که نتونی انجام بدی. از این لحظه به بعد، تو یه توسعه‌دهنده متوسط نیستی – یه توسعه‌دهنده حرفه‌ای و آماده ورود به سطح پیشرفته هستی. درس‌های بعدی (سطح پیشرفته) درباره FastAPI، Async/Await، میکروسرویس، Docker، CI/CD، Cloud و پروژه‌های واقعی شرکتی خواهد بود. تمرین‌ها رو انجام بده، پروژه امنیت رو توی GitHub آپلود کن و با افتخار به همه بگو: «من سطح متوسط پایتون رو ۱۰۰٪ تموم کردم!»

ارسال نظر جدید

گزارش دیدگاه