2011-10-12 16 views
7

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

SELECT * FROM groups WHERE id=$thisladder[grid] 

केवल बात यह है कि मुझे लगता है कि $ _GET साफ "हो सकता है" इस समारोह है:

SELECT *,DATE_FORMAT(joined,'%M %d, %Y') as \"Joined\" FROM `members` WHERE `name` LIKE '".$ltr."%' ORDER BY points DESC LIMIT $page,50 

यहाँ एक और एक है

if (!ini_get('register_globals')) { 
    $superglobals = array($_SERVER, $_ENV, 
     $_FILES, $_COOKIE, $_POST, $_GET); 
    if (isset($_SESSION)) { 
     array_unshift($superglobals, $_SESSION); 
    } 
    foreach ($superglobals as $superglobal) { 
     extract($superglobal, EXTR_SKIP); 
    } 
} 

यह संभव है कि समारोह से ऊपर हो सकता है चर को sanitizing हो। और हाँ, सिस्टम रजिस्टर ग्लोबल्स का भी उपयोग करता है, जो भी खराब है।

मैंने भी बैकअप बनाया, बस मामले में।

+2

क्या आप जानना चाहते हैं कि SQL इंजेक्शन को कैसे रोकें, या अपने क्लाइंट को साबित करें कि यह असुरक्षित है? – skyuzo

+3

ओह मैन, न केवल वे कुछ भी नहीं बचते हैं, लेकिन वे स्पष्ट रूप से * पंजीकरण_globals' कार्यक्षमता को अनुकरण करते हैं यदि यह अक्षम है! यह पहला है! – rid

+0

मुझे नहीं पता कि इसे कैसे साबित किया जाए। लेकिन मुझे पता है कि mysql_real_escape और तैयार कथन जाने का तरीका हैं। – user962449

उत्तर

6

http://xkcd.com/327/ से बेहतर नहीं कह सकता है।

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

http://example.com/badscript.php?_GET[]=ha+ha+I+pwned+your+GET+superglobal 
http://example.com/badscript.php?_SESSION[issuperuser]=1 

बात इस तरह की बिल्कुल (एफएआर के बाद क्यों रजिस्टर इस तरह के एक सिरे से F'ingly मूर्खता विचार है, और है:

+0

ईश्वर हम ऐसे नरक हैं, उन छवियों पर हंसना बंद नहीं कर सका। तो इंजेक्शन से ग्लोबल सबसे खराब हैं? o_0 – user962449

+0

@ user962449, 'register_globals' के साथ, आप बस अपने जीईटी अनुरोध में इसे शामिल करके किसी भी चर के बहुत अधिक मूल्य को प्रतिस्थापित कर सकते हैं, उदाहरण के लिए। – rid

5

कुछ मजेदार बातें अपने 'मित्र' कैसे बेवकूफ उसकी कोड है दिखाने के लिए बहुत लंबा) अंत में डिफ़ॉल्ट रूप से बंद कर दिया गया है।

एसक्यूएल इंजेक्शन भूल गए - कोड का बेवकूफ टुकड़ा दूरस्थ PHP चर इंजेक्शन की अनुमति दे रहा है। लॉगिन फ़ील्ड

username = "whatever" 
password = "' OR 1" 

मेकअप भावना में

$query = 'SELECT id FROM users WHERE username=\''.$_POST['username'].'\' AND password=\''.$_POST[password].'\''; 
$result = mysql_query($query); 
etc, etc... 

टाइप करके आजमाएँ यह:

+0

यह सभी इंजेक्शन की मां की तरह है ... –

+0

@Marc B: मैं अलग होना चाहता हूं, वह कोड काम नहीं करेगा, चाहे ग्लोबल्स पंजीकृत हों या नहीं। '$ _SESSION' ओवरराइट हो सकता है अगर यह बंद है और सत्र अभी तक प्रारंभ नहीं हुआ है, लेकिन 'session_start' इसे वैसे भी हटा देगा। जब तक रजिस्टर ग्लोबल्स चालू नहीं किया गया था तब तक आप एक PHP संस्करण का संदर्भ देना चाहेंगे। – hakre

+0

@hakre: सच है, सत्र एक पूरी तरह से निर्भर करता है जब सत्र_स्टार्ट छद्म-रजिस्टर ग्लोबल्स के सापेक्ष कहा जाता है। यह दिखाने के लिए बस इसका उपयोग करें कि बीएडी रजिस्टर_ग्लोबल्स संभावित रूप से कैसे हो सकते हैं। –

1

लॉगिन कोड कुछ इस तरह देखा तो क्या होगा?

+0

पासवर्ड धोए गए हैं। तो मुझे लगता है कि स्क्रिप्ट खराब नहीं है:/ – user962449

+0

फिर उपयोगकर्ता नाम के लिए "'OR 1" का उपयोग करें। – dqhendricks

+0

ध्यान दें, कि मैं एसक्यूएल इंजेक्शन के साथ नहीं हूं। तो मैं बस '' या 1' टाइप करता हूं? – user962449

संबंधित मुद्दे