توصیههایی برای پیادهسازی Zero Trust در کدنویسی
مدل امنیتی Zero Trust (عدم اعتماد پیشفرض) بر این اصل استوار است که هیچ کاربر، دستگاه، یا فرآیندی نباید بهصورت پیشفرض قابلاعتماد باشد. در نتیجه، هنگام توسعه نرمافزار و کدنویسی، باید مکانیزمهایی در نظر گرفته شود که حداقل سطح دسترسی، اعتبارسنجی مستمر، و کنترل دقیق دسترسیها را اعمال کند.
📍 1️⃣ اصل حداقل دسترسی (Least Privilege)
🔹 هیچ کاربر یا پردازهای نباید بیش از سطح دسترسی موردنیاز داشته باشد.
🔹 از Principle of Least Privilege (PoLP) پیروی کنید.
✅ در پایگاه داده:
GRANT SELECT, INSERT ON customers TO user_app;
REVOKE DELETE, UPDATE ON customers FROM user_app;
❌ غلط: دادن دسترسی کامل به همه کاربران
GRANT ALL PRIVILEGES ON customers TO user_app;
✅ در سیستمعامل: اگر کد شما نیاز به اجرای یک فرمان خاص دارد، آن را با حداقل مجوز اجرا کنید:
sudo -u limited_user command
❌ غلط: اجرای دستورات با کاربر root بدون نیاز
📍 2️⃣ اعتبارسنجی و احراز هویت قوی (Strong Authentication & Authorization)
🔹 همه درخواستها را احراز هویت کنید.
🔹 از MFA (احراز هویت چندعاملی) برای کاربران حساس استفاده کنید.
✅ در APIها:
from flask import request, jsonify
from
werkzeug.security import check_password_hash
def authenticate_user(username, password):
user = get_user_from_db(username)
if user and check_password_hash(user.password, password):
return generate_jwt(user)
return jsonify({"error": "Unauthorized"}), 401
❌ غلط: استفاده از Hardcoded Passwords
if username == "admin" and password == "password123":
✅ استفاده از OAuth2 یا JWT برای APIها:
@app.route("/secure-data", methods=["GET"])
@jwt_required()
def secure_data():
return jsonify({"message": "Access granted!"})
📍 3️⃣ بررسی و کنترل ورودیها (Input Validation & Sanitization)
🔹 همیشه ورودیهای کاربر را بررسی کنید تا از حملات SQL Injection، XSS و Command Injection جلوگیری شود.
🔹 از لیست سفید (Whitelist) بهجای لیست سیاه (Blacklist) استفاده کنید.
✅ فیلتر کردن ورودیها:
import re
def validate_username(username):
if re.match("^[a-zA-Z0-9_]{3,20}$", username):
return True
return False
❌ غلط: استفاده از ورودی خام در کوئری SQL
query = f"SELECT * FROM users WHERE username = '{user_input}'"
✅ درست: استفاده از Prepared Statements
cursor.execute("SELECT * FROM users WHERE username = ?", (user_input,))
📍 4️⃣ محدودسازی ارتباطات داخلی (Micro-Segmentation & Network Restrictions)
🔹 هیچ سیستمی نباید بتواند آزادانه با همه بخشهای شبکه ارتباط بگیرد.
🔹 از Firewalls، VLANs و ACLs برای محدودسازی ارتباطات بین سرویسها استفاده کنید.
✅ در Docker (Network Isolation):
services:
app:
networks:
- internal_net
db:
networks:
- internal_net
networks:
internal_net:
driver: bridge
❌ غلط: قرار دادن پایگاه داده در شبکه عمومی و قابلدسترسی از همه جا
📍 5️⃣ رمزنگاری دادهها در حین انتقال و ذخیرهسازی (Encryption & Secure Storage)
🔹 همیشه دادههای حساس را رمزنگاری کنید.
🔹 از TLS برای انتقال داده و AES برای ذخیرهسازی اطلاعات مهم استفاده کنید.
✅ در REST API:
app.run(ssl_context=("cert.pem", "key.pem"))
✅ در پایگاه داده:
CREATE TABLE users (
id INT PRIMARY KEY,
email VARCHAR(255) NOT NULL UNIQUE,
password_hash TEXT NOT NULL
);
❌ غلط: ذخیره پسوردهای خام در دیتابیس
CREATE TABLE users (
id INT PRIMARY KEY,
email VARCHAR(255),
password TEXT
);
✅ درست: هش کردن رمزهای عبور
from
werkzeug.security import generate_password_hash
hashed_password = generate_password_hash("mypassword")
📍 6️⃣ مانیتورینگ و لاگگیری مداوم (Continuous Monitoring & Logging)
🔹 همهی رویدادهای امنیتی باید لاگ شوند، اما اطلاعات حساس را نباید در لاگها ذخیره کرد.
🔹 از SIEM برای تحلیل لاگها استفاده کنید.
✅ در Python:
import logging
logging.basicConfig(filename="app.log", level=
logging.INFO)
logging.info("User login attempt: %s", username)
❌ غلط: لاگ کردن پسوردها و اطلاعات حساس
logging.info("User: %s, Password: %s", username, password)
✅ در SIEM (مثل Splunk یا ELK):
index=security_logs source=auth.log "failed login attempt"
📍 7️⃣ اجرای تستهای امنیتی (Security Testing & Code Review)
#آکادمی _روزبه
ادامه در پست بعد