एसक्यूएलकेमी का उपयोग करते समय एसक्यूएल इंजेक्शन हमलों को कम करने के लिए सबसे अच्छे प्रथाएं क्या हैं?एसक्यूएलकेकी + एसक्यूएल इंजेक्शन
उत्तर
आप अपने डेटा में (जैसे अर्धविराम या अक्षर लोप के रूप में) किसी भी "विशेष" वर्ण हो, तो उन्हें अपने आप के लिए SQLEngine वस्तु से, उद्धृत किया जाएगा, ताकि आप के बारे में चिंता की जरूरत नहीं है के हवाले से। इसका अर्थ यह भी है कि कि जब तक आप जानबूझकर SQLAlchemy के उद्धरण तंत्र को बाईपास नहीं करते हैं, एसक्यूएल-इंजेक्शन हमले मूल रूप से असंभव हैं।
[http://www.rmunn.com/sqlalchemy-tutorial/tutorial.html प्रति]
उत्तर कहता है कि उद्धरण "दस्तावेज" से आता है, जब ऐसा नहीं होता है: ऐसा लगता है [यह एक ट्यूटोरियल] (http://www.rmunn.com/sqlalchemy-tutorial/tutorial.html) SQLAlchemy से जुड़ा नहीं है। दूसरा, उद्धरण SQLAlchemy एपीआई के हिस्से के संदर्भ में है जो बचने से निपटने वाले उदाहरण का उपयोग करके बचने से सही तरीके से बच जाएगा। हालांकि, आप अभी भी 'execute() 'या अन्य शाब्दिक डेटा का उपयोग कर सकते हैं जो SQLAlchemy से बच नहीं पाएगा। हां, ज्यादातर मामलों में SQLAlchemy स्वतः से बच जाएगा, लेकिन यदि आप अक्षर या कच्चे एसक्यूएल का उपयोग कर रहे हैं, तो भी आप अपने आप को पैर में शूट कर सकते हैं। –
tldr: जितना संभव हो उतना कच्चे एसक्यूएल से बचें।
स्वीकृत उत्तर आलसी और गलत है। फिल्टर विधि कच्चे एसक्यूएल को स्वीकार करती है, और यदि इस तरह से उपयोग की जाती है, तो एसक्यूएल इंजेक्शन हमलों के लिए पूरी तरह से अतिसंवेदनशील है। उदाहरण के लिए, यदि आप एक यूआरएल से एक मूल्य को स्वीकार करने और फिल्टर में कच्चे एसक्यूएल के साथ गठबंधन करने के लिए थे, तो आप हमले के लिए खुले हैं:
session.query(MyClass).filter("foo={}".format(getArgs['val']))
ऊपर कोड और नीचे यूआरएल का उपयोग कर, आप होगा अपने फ़िल्टर स्टेटमेंट में एसक्यूएल इंजेक्शन। उपरोक्त कोड आपके डेटाबेस में सभी पंक्तियों को वापस कर देगा।
http://domain.com/?val=2%20or%201%20=%201
"जब तक आप जानबूझकर SQLAlchemy के उद्धरण तंत्र को बाईपास नहीं करते ..."हाँ कच्चे एसक्यूएल में प्रवेश करना जानबूझकर उस उद्धरण तंत्र को छोड़कर है। इसलिए नहीं, उपर्युक्त उत्तर गलत नहीं है। – Johnston
मैं असहमत हूं। आप फ़िल्टर विधि में कच्चे एसक्यूएल को पास कर सकते हैं, स्क्लेक्लेमी का हिस्सा है, कुछ अंत में हैक नहीं ... तो इसके बारे में कुछ पता होना चाहिए। – Mike
यदि मुझे फ़िल्टर के लिए उपयोगकर्ता इनपुट लेना है, तो यह सुनिश्चित करने का सही तरीका क्या है कि उपयोगकर्ता टेबल या किसी अन्य अप्रत्याशित व्यवहार को छोड़ने के लिए कच्चे SQL में प्रवेश नहीं कर रहा है? –
@Tendrid answer में जोड़ने के लिए। मैंने चुपचाप दृष्टिकोण का उपयोग करके थोड़ी सी जांच की। filter
विधि में *criterion
है इसके तर्क के रूप में, कई अन्य ORM क्वेरी विधियों के समान तर्क है।
filter
विधि *criterion
तर्क _literal_as_text, जो स्ट्रिंग के मामले में में पारित कर दिया समाप्त होता है के मामले में - के निशान के रूप में सुरक्षित एसक्यूएल (कृपया मुझे ठीक कर लें मैं गलत हूँ)। इसलिए यह असुरक्षित बनाता है।
यहाँ *criterion
तर्क के साथ ORM Query class विधि जांच का परिणाम है:
filter - uses _literal_as_text (NOT SAFE)
having - uses _literal_as_text (NOT SAFE)
distinct - uses _literal_as_label_reference (NOT SAFE)
group_by - uses _literal_as_label_reference (NOT SAFE)
order_by - uses _literal_as_label_reference (NOT SAFE)
join - uses model attributes to resolve relation (SAFE)
संभव विधि missuses के उदाहरण (यह आसान रखने के लिए, स्ट्रिंग स्वरूपण को छोड़ दिया है):
db.session.query(User.login).group_by('login').having('count(id) > 4; select name from roles').all()
db.session.query(User.login).distinct('name) name from roles /*').order_by('*/').all()
db.session.query(User.login).order_by('users_login; select name from roles').all()
db.session.query(User.login).group_by('login union select name from roles').all()
नोट कि स्ट्रिंग शाब्दिक पारित होने पर ये विधियां केवल असुरक्षित हैं।
- 1. एसक्यूएल इंजेक्शन
- 2. एसक्यूएल इंजेक्शन
- 3. एसक्यूएल इंजेक्शन
- 4. डैपर और एसक्यूएल इंजेक्शन
- 5. आईपी पता एसक्यूएल इंजेक्शन
- 6. रेल एसक्यूएल इंजेक्शन?
- 7. एसक्यूएल इंजेक्शन और कोडिनेटर
- 8. एसक्यूएल सर्वर - डायनामिक पिवोट टेबल - एसक्यूएल इंजेक्शन
- 9. क्लासिक एएसपी एसक्यूएल इंजेक्शन प्रोटेक्शन
- 10. यदि कोई साइट एसक्यूएल इंजेक्शन
- 11. एसक्यूएल इंजेक्शन हैक्स और डीजेंगो
- 12. Zend Db परहेज एसक्यूएल इंजेक्शन
- 13. शेयरपॉइंट एंटरप्राइज़ एसक्यूएल खोज वाक्यविन्यास में एसक्यूएल इंजेक्शन
- 14. एसक्यूएल सर्वर संग्रहीत प्रक्रिया को एसक्यूएल इंजेक्शन से सुरक्षित बनाना
- 15. इकाई फ्रेमवर्क, LinqToSQL और एसक्यूएल इंजेक्शन
- 16. LINQ से इकाइयों और एसक्यूएल इंजेक्शन
- 17. क्लॉज और एसक्यूएल इंजेक्शन की तरह
- 18. तैयार बयानों के साथ एसक्यूएल इंजेक्शन?
- 19. एसक्यूएल इंजेक्शन - क्या यह (ऑनलाइनर) सुरक्षित है?
- 20. CakePHP - एसक्यूएल इंजेक्शन परीक्षण हमेशा विफलता
- 21. एसक्यूएल इंजेक्शन/गुड रूबी विधि को रोकना
- 22. एसक्यूएल इंजेक्शन की पुष्टि कैसे करें
- 23. एसक्यूएल इंजेक्शन की रोकथाम केवल php
- 24. हाइबरनेट में एसक्यूएल इंजेक्शन को कैसे रोकें?
- 25. जेपीए में एसक्यूएल इंजेक्शन हमले संभव हैं?
- 26. इबैटिस में एसक्यूएल इंजेक्शन को रोकना
- 27. एसक्यूएल सर्वर में गतिशील एसक्यूएल को कैसे साफ करें - एसक्यूएल इंजेक्शन
- 28. MySQL इंजेक्शन
- 29. कैसे sprintf() फिर से एसक्यूएल इंजेक्शन की रक्षा करता है?
- 30. वसंत (एमवीसी) एसक्यूएल इंजेक्शन से बचने के लिए?
SQLAlchemy * का उपयोग करना * सबसे अच्छा अभ्यास है। :-) –