FlawOpen

flawopen.com/संदर्भ/FastAPI SQL इंजेक्शन

क्या FastAPI डिफ़ॉल्ट रूप से SQL इंजेक्शन रोकता है?

Python और API मार्गदर्शिका
संक्षिप्त उत्तर

Pydantic जाँचता है कि कोई मान घोषित इनपुट प्रकार से मेल खाता है या नहीं; यह SQL को दोबारा नहीं लिखता और Python स्ट्रिंग को डेटाबेस पैरामीटर में नहीं बदलता। सत्यापित name: str भी अनुरोधकर्ता के नियंत्रण वाला पाठ है। सत्यापन को पार्सल के लेबल की जाँच समझें: इससे मान का प्रकार पता चलता है। पैरामीटर बाइंडिंग उस मान को SQL निर्देश-पत्र से अलग सीलबंद रखने जैसी है। SQL टेम्पलेट स्थिर रखें और मान SQLAlchemy के माध्यम से अलग भेजें।

FastAPI का असुरक्षित और सुरक्षित तरीका

असुरक्षित: इंटरपोलेशन SQL पाठ बदलता है
# A string type check does not make input safe inside SQL syntax
@app.get("/users")
def get_users(name: str, db: Session = Depends(get_db)):
    query = text(f"SELECT * FROM users WHERE name = '{name}'")
    return db.execute(query).fetchall()
सुरक्षित: SQLAlchemy मान को अलग बाँधता है
# :name is a bind parameter; the value is passed separately
@app.get("/users")
def get_users(name: str, db: Session = Depends(get_db)):
    query = text("SELECT * FROM users WHERE name = :name")
    return db.execute(query, {"name": name}).fetchall()

पैरामीटर बाइंडिंग किन चीज़ों को नहीं ढकती

बाउंड पैरामीटर डेटा मान के लिए होता है, तालिका नाम, कॉलम नाम, SQL ऑपरेटर या क्रम दिशा के लिए नहीं। यदि अनुरोध को सॉर्ट फ़ील्ड चुनना हो, तो विकल्प को पहले से तय SQLAlchemy कॉलम अभिव्यक्तियों की अनुमति-सूची से जोड़ें; अनुरोध की कच्ची स्ट्रिंग SQL में न जोड़ें। पैरामीटराइज़ेशन प्राधिकरण का विकल्प भी नहीं है: अनुरोधकर्ता कौन-सी पंक्तियाँ पढ़ सकता है, इसे सीमित करें और डेटाबेस खाते को केवल आवश्यक अनुमतियाँ दें।

रोकथाम जाँच-सूची

संदर्भ

यह भी देखें SQL इंजेक्शन (CWE-89): यह कैसे काम करता है और हर भाषा में इसे कैसे रोकें — flawopen.com GORM Raw SQL: Go में SQL injection रोकें क्या Quotes Escape करना SQL Injection रोकने के लिए काफ़ी है? SQL इंजेक्शन रोकने के लिए ORM का उपयोग काफ़ी है? क्या Knex.js SQL Injection से सुरक्षित है? MyBatis ${} बनाम #{}: SQL Injection से बचाव MySQLi बनाम PDO: सुरक्षित Prepared Statements