पाठ 9 / 28
नियम: मॉडल आउटपुट को user इनपुट की तरह मानें
मॉडल जो भी बनाए उस पर क्लासिक injection बचाव लागू करें।
जहाँ आउटपुट बहता है, हमले पीछे आते हैं
यदि मॉडल आउटपुट किसी अन्य घटक में बहता है, तो जो हमलावर मॉडल को प्रभावित कर सके (अपने संदेश से या मॉडल द्वारा पढ़ी सामग्री में पाठ रखकर) वह नियंत्रित कर सकता है कि वह घटक क्या पाता है। मॉडल आउटपुट से SQL query, HTML page, shell command, file path या URL की string बनाएँ और आप क्लासिक injection bugs दोबारा बनाते हैं: SQL injection, cross-site scripting (XSS), command injection, path traversal और server-side request forgery (SSRF)। उपाय वही है, हर सिंक पर लागू: strings से कोड कभी न बनाएँ; parameterised queries, आउटपुट encoding/escaping, shells की जगह argument lists, अनुमत base folder के साथ path canonicalisation, और hosts के लिए allow-lists उपयोग करें। मॉडल आउटपुट को schema से भी validate करें और विफल validation को त्रुटि मानें, अनुमान से बचने की चीज़ नहीं।
मॉडल आउटपुट अविश्वसनीय इनपुट है
मॉडल जो लिखे उसे हमलावर आकार दे सकता है, इसलिए दूसरे system तक पहुँचने से पहले उसे escape, parameterise और validate करें।
सिंक और उनके बचाव
हर पंक्ति मॉडल आउटपुट पर लागू क्लासिक bug है।
Sink (where output goes) Attack if built from strings Defence
SQL query SQL injection parameterised queries (?)
HTML page XSS (script in the reply) escape / sanitise; strict CSP
shell command command injection no shell; argument list; allow-list of commands
file path path traversal (../../secret) realpath + must stay inside allowed folder
URL fetched by a tool SSRF (internal/metadata hosts) https + host allow-list; block private ranges
code / eval / template arbitrary code execution never eval; sandbox if code must runSchema से validate करें
संरचित आउटपुट माँगें और जो मेल न खाए उसे अस्वीकार करें, मॉडल का आशय अनुमान लगाने की जगह।
त्वरित जाँच: डेटाबेस query बनाने में मॉडल आउटपुट के साथ कैसा व्यवहार करें?
- चलाने योग्य कच्चे SQL के रूप में
- भरोसेमंद, क्योंकि मॉडल ने लिखा
- अविश्वसनीय इनपुट के रूप में, parameterised queries से
- Password के रूप में
Answer
अविश्वसनीय इनपुट के रूप में, parameterised queries से — मॉडल से आया होना पाठ को सुरक्षित नहीं बनाता।