Security Guide

סודות ופרטיות

אל תרשום סודות/PII בלוגים, השתמש ב‑ENV בלבד.

הרצת קוד (Code Execution Playground)

ה‑WebApp כולל Playground בכתובת /tools/code (פתוח לכל משתמש מחובר), כאשר הרצת קוד בפועל זמינה רק ל‑Premium/Admin.

הדגשים החשובים: - בפרודקשן מומלץ להריץ רק בתוך Docker sandbox ולהשאיר CODE_EXEC_ALLOW_FALLBACK=false (Fail‑Closed). - לא ללוגג קוד או פלט, רק מטא‑דאטה.

ראו עמוד ייעודי עם אבטחה/מגבלות/Troubleshooting: - הרצת קוד (Code Execution Playground)

הצפנת טוקנים (דוגמה)

from cryptography.fernet import Fernet

def encrypt_token(token: str, key: bytes) -> str:
    return Fernet(key).encrypt(token.encode()).decode()

def decrypt_token(encrypted_token: str, key: bytes) -> str:
    return Fernet(key).decrypt(encrypted_token.encode()).decode()

CSRF ב‑WebApp

from flask_wtf.csrf import CSRFProtect

app = Flask(__name__)
app.config['SECRET_KEY'] = os.getenv('SECRET_KEY')
csrf = CSRFProtect(app)

Rate Limiting (דוגמה)

from functools import wraps
from time import time

def rate_limit(max_calls=10, period=60):
    calls = {}
    def decorator(func):
        @wraps(func)
        async def wrapper(update, context):
            user_id = update.effective_user.id
            now = time()
            if user_id not in calls:
                calls[user_id] = []
            calls[user_id] = [t for t in calls[user_id] if now - t < period]
            if len(calls[user_id]) >= max_calls:
                await update.message.reply_text("Too many requests!")
                return
            calls[user_id].append(now)
            return await func(update, context)
        return wrapper
    return decorator

קישורים

אבטחת הודעות בטלגרם

  • HTML Escaping: יש לבצע escape לכל תוכן שמגיע מהמשתמש (כולל קוד ושמות קבצים) טרם שליחה כ-HTML.

  • Callback Data: להגביל את אורך callback_data ל-64 בתים (כולל קידומת). במקרה חריגה: - העדיפו שימוש במזהה מסד (_id) אם אורך ההודעה מאפשר. - אחרת, צרו טוקן קצר (למשל token_urlsafe(6) חתוך ל~24 תווים), שמרו מיפוי בטוח ב-user_data, והשתמשו ב-fav_toggle_tok:<token>. - יש להימנע מתווים בעייתיים ולשמור על קידומות יציבות עבור ניתוב ה-handlers.