2008-09-29 9 views
33

क्लासिक एएसपी ऐप के लिए एसक्यूएल इंजेक्शन के खिलाफ सुरक्षा के लिए एक मजबूत तरीका क्या है?क्लासिक एएसपी एसक्यूएल इंजेक्शन प्रोटेक्शन

एफवाईआई मैं इसे डीबी एक्सेस के साथ उपयोग कर रहा हूं। (मैं एप्लिकेशन लिखना फ्लॉप)

उत्तर

26

संग्रहीत प्रक्रियाओं और/या तैयार बयान:

https://stackoverflow.com/questions/1973/what-is-the-best-way-to-avoid-sql-injection-attacks

Can I protect against SQL Injection by escaping single-quote and surrounding user input with single-quotes?

Catching SQL Injection and other Malicious Web Requests

पहुँच DB के साथ

, आप अभी भी यह कर सकते हैं, लेकिन अगर आप पहले से ही एसक्यूएल इंजेक्शन के बारे में चिंतित हैं, मुझे लगता है कि आपको वैसे भी एक्सेस करना होगा।

http://www.asp101.com/samples/storedqueries.asp

ध्यान दें कि क्या आम तौर पर इंजेक्शन से बचाता है संग्रहीत प्रक्रिया में ही है, लेकिन यह सच है कि यह पैरामिट्रीकृत और गतिशील नहीं है नहीं है:

यहाँ Access में तकनीक के लिए एक लिंक है। याद रखें कि गतिशील कोड बनाने वाले एसपी भी इंजेक्शन के लिए कमजोर हो सकते हैं यदि वे गतिशील कोड बनाने के कुछ तरीकों से पैरामीटर का उपयोग करते हैं। कुल मिलाकर, मैं एसपी पसंद करता हूं क्योंकि वे एक इंटरफ़ेस परत बनाते हैं जो अनुप्रयोग डेटाबेस तक पहुंचते हैं, इसलिए ऐप्स को पहले स्थान पर मनमाने ढंग से कोड निष्पादित करने की अनुमति नहीं है।

इसके अतिरिक्त, संग्रहीत प्रक्रिया का निष्पादन बिंदु कमजोर हो सकता है यदि आप कमांड और पैरामीटर का उपयोग नहीं करते हैं, उदा।

Conn.Execute("EXEC usp_ImOnlySafeIfYouCallMeRight '" + param1 + "', '" + param2 + "'") ; 

याद रखें कि अपने डेटाबेस का अपना परिधि की रक्षा करने की जरूरत है, और अगर विभिन्न लॉगिन तालिकाओं में INSERT/UPDATE/DELETE के अधिकार हैं, तो वे एप्लिकेशन में किसी भी कोड (: यह अभी भी कमजोर है क्योंकि यह गतिशील रूप से बनाया गया है और एक इंजेक्शन लक्ष्य हो सकता है या समझौता अनुप्रयोग) एक संभावित समस्या हो सकती है। अगर लॉग इन केवल संग्रहित प्रक्रियाओं को निष्पादित करने के अधिकार रखते हैं, तो यह एक फ़नल बनाता है जिसके माध्यम से आप सही व्यवहार को और अधिक आसानी से सुनिश्चित कर सकते हैं। (ओओ अवधारणाओं के समान जहां ऑब्जेक्ट्स उनके इंटरफेस के लिए ज़िम्मेदार होते हैं और अपने सभी आंतरिक कार्यों का पर्दाफाश नहीं करते हैं।)

3

पैरामीट्रिज्ड क्वेरी का उपयोग करके, आपको कमांड ऑब्जेक्ट बनाना होगा, इसे पैरामीटर को एक नाम और मान के साथ असाइन करना होगा, अगर आप करते हैं तो आप के बारे में कुछ और चिंता करने की जरूरत नहीं है (बेशक एसक्यूएल इंजेक्शन की बात कर;))

http://prepared-statement.blogspot.com/2006/02/asp-prepared-statements.html

और संग्रहित प्रक्रियाओं पर भरोसा नहीं करते, वे एक हमले वेक्टर भी अगर आप डॉन बन सकते हैं तैयार बयान का उपयोग नहीं करते हैं।

+0

संग्रहित प्रक्रियाओं जवाब नहीं कर रहे हैं (भले ही वह Access का उपयोग नहीं किया गया था) क्योंकि आप अभी भी कर सकते हैं एसपी के उपयोग से इंजेक्शन कोड लिखें (मैंने इसे देखा है)। यह पैरामीटरयुक्त प्रश्न हैं जो आपकी रक्षा करते हैं। – Flory

+0

@ फ्लोरी, क्या वह बिल्कुल ठीक नहीं है? – Abel

+5

@ एबेल, यह निश्चित रूप से करता है। मुझे नहीं पता कि मैं दो साल पहले क्या धूम्रपान कर रहा था। – Flory

1

अगर संग्रहित प्रक्रियाओं एक विकल्प नहीं कर रहे हैं - और यहां तक ​​कि अगर वे कर रहे हैं - सत्यापित करें सभी आदानों अच्छी तरह से

-2

बहुत कम से कम एसक्यूएल एक्सप्रेस में स्विच करना एक बढ़िया विकल्प है। यह चीजों को और अधिक सुरक्षित बना देगा। हालांकि पैरामीटर और संग्रहीत प्रक्रियाओं का उपयोग करने में काफी मदद मिल सकती है। मैं यह भी अनुशंसा करता हूं कि आप यह सुनिश्चित करने के लिए सावधानीपूर्वक इनपुट मान्य करें कि आप जो उम्मीद कर रहे हैं उससे मेल खाते हैं।

संख्याओं जैसे मूल्यों के लिए यह संख्या को निकालने के लिए काफी आसान है कि यह वास्तव में केवल एक संख्या है। एसक्यूएल के लिए सभी विशेष पात्रों से बचें। ऐसा करने से प्रयास किए गए हमले को काम करने से रोका जाएगा।

4

"क्लासिक एएसपी ऐप के लिए एसक्यूएल इंजेक्शन के खिलाफ सुरक्षा के लिए एक मजबूत तरीका" सभी इनपुट को निर्दयतापूर्वक मान्य करना है। अवधि।

संग्रहित प्रक्रियाएं अकेले और/या एक अलग डेटाबेस सिस्टम आवश्यक सुरक्षा के बराबर नहीं है।

एमएस ने हाल ही में एक एसक्यूएल इंजेक्शन निरीक्षण उपकरण डाला जो एक क्वेरी में उपयोग किए गए असंबद्ध इनपुट की तलाश में है। यही वह है जिसे आप ढूंढना चाहिए।

यहाँ लिंक है: The Microsoft Source Code Analyzer for SQL Injection tool is available to find SQL injection vulnerabilities in ASP code

1

अरे, किसी भी डेटाबेस डेवलपर हैं जो इसे इस्तेमाल करता है के रूप में रूप में अच्छा।

कुछ भी नहीं लेकिन कुछ भी कम नहीं।

यदि आप अच्छे डेवलपर हैं तो आप डेटाबेस फ़ाइलों के रूप में टेक्स्ट फ़ाइलों का उपयोग करके ई-कॉमर्स साइट बना सकते हैं। हां यह ओरेकल संचालित वेबसाइट के जितना अच्छा नहीं होगा लेकिन यह घर आधारित, कस्टम गहने विनिर्माण जैसे छोटे व्यवसाय के लिए ठीक होगा।

और यदि आप अच्छे डेवलपर हैं तो आप अपने एएसपी पृष्ठों पर इनलाइन एसक्यूएल स्टेटमेंट का उपयोग नहीं करेंगे। यहां तक ​​कि एक्सेस में आपके पास प्रश्न बनाने और उपयोग करने का विकल्प है ..

एचटीएमएल एन्कोड के साथ डेटा सत्यापन के साथ स्टोर प्रोसेस करता है - किसी भी एसक्यूएल इंजेक्शन हमलों को रोकने का सबसे अच्छा तरीका है।

8

यहाँ sqlinject लिपियों के एक जोड़े मैं एक लंबे समय पहले एक सरल संस्करण और एक विस्तारित संस्करण बना रहे हैं:

function SQLInject(strWords) 
dim badChars, newChars, i 
badChars = array("select", "drop", ";", "--", "insert", "delete", "xp_") 
newChars = strWords 
for i = 0 to uBound(badChars) 
newChars = replace(newChars, badChars(i), "") 
next 
newChars = newChars 
newChars= replace(newChars, "'", "''") 
newChars= replace(newChars, " ", "") 
newChars= replace(newChars, "'", "|") 
newChars= replace(newChars, "|", "''") 
newChars= replace(newChars, "\""", "|") 
newChars= replace(newChars, "|", "''") 
SQLInject=newChars 
end function 


function SQLInject2(strWords) 
dim badChars, newChars, tmpChars, regEx, i 
badChars = array(_ 
"select(.*)(from|with|by){1}", "insert(.*)(into|values){1}", "update(.*)set", "delete(.*)(from|with){1}", _ 
"drop(.*)(from|aggre|role|assem|key|cert|cont|credential|data|endpoint|event|f ulltext|function|index|login|type|schema|procedure|que|remote|role|route|sign| stat|syno|table|trigger|user|view|xml){1}", _ 
"alter(.*)(application|assem|key|author|cert|credential|data|endpoint|fulltext |function|index|login|type|schema|procedure|que|remote|role|route|serv|table|u ser|view|xml){1}", _ 
"xp_", "sp_", "restore\s", "grant\s", "revoke\s", _ 
"dbcc", "dump", "use\s", "set\s", "truncate\s", "backup\s", _ 
"load\s", "save\s", "shutdown", "cast(.*)\(", "convert(.*)\(", "execute\s", _ 
"updatetext", "writetext", "reconfigure", _ 
"/\*", "\*/", ";", "\-\-", "\[", "\]", "char(.*)\(", "nchar(.*)\(") 
newChars = strWords 
for i = 0 to uBound(badChars) 
Set regEx = New RegExp 
regEx.Pattern = badChars(i) 
regEx.IgnoreCase = True 
regEx.Global = True 
newChars = regEx.Replace(newChars, "") 
Set regEx = nothing 
next 
newChars = replace(newChars, "'", "''") 
SqlInject2 = newChars 
end function 
संबंधित मुद्दे