पाठ 17 / 25
बनाए कोड में Security दोष
Injection, hard-coded secrets और कमज़ोर defaults पहचानें और ठीक करें।
असुरक्षित patterns training डेटा में आम हैं
Models ने ऐसे बहुत से कोड से सीखा है जो जल्दबाज़ी या असुरक्षित ढंग से लिखा गया, इसलिए वे strings से बने SQL, बंद की गई certificate जाँच, hard-coded credentials, कमज़ोर hashing या बहुत व्यापक permissions दोहरा सकते हैं। सुरक्षा-संवेदनशील output को अविश्वसनीय मानें: उन सभी जगहों को जाँचें जहाँ user input database, shell, file path या HTML से मिलता है, और नतीजे पर scanner चलाएँ।
SQL injection, प्रदर्शन के साथ
मैंने यह in-memory SQLite database पर चलाया। String से बनी query गढ़े गए input पर हर user लौटा देती है; parameterised query किसी को नहीं लौटाती, जो सही है।
import sqlite3
db = sqlite3.connect(":memory:")
db.execute("create table users(name text, secret text)")
db.executemany("insert into users values (?,?)", [("asha","a1"),("ravi","r2")])
def find_bad(name):
return db.execute(f"select name from users where name = '{name}'").fetchall()
def find_ok(name):
return db.execute("select name from users where name = ?", (name,)).fetchall()
evil = "x' OR '1'='1"
print(find_bad(evil), find_ok(evil))
Output:
[('asha',), ('ravi',)] []Security review माँगें, फिर जाँचें
Assistant से "इस कोड की security समस्याएँ बताओ" पूछना अक्सर असली मुद्दे खोज लेता है, जो उपयोगी दूसरी नज़र है। पर यह गारंटी नहीं, इसलिए अपनी pipeline में static analysis, dependency scanning और इंसानी समीक्षा रखें।
त्वरित जाँच: बनाए database कोड में SQL injection कैसे रोकें?
- Database छिपाएँ
- String formatting से SQL बनाएँ
- Parameterised queries उपयोग करें
- छोटे variable नाम उपयोग करें
Answer
Parameterised queries उपयोग करें — Placeholders user input को डेटा ही रखते हैं, SQL command का हिस्सा कभी नहीं बनने देते।