2011-07-13 13 views
9

मैं इन दिनों सर्फिंग कर रहा हूं और एसक्यूएल इंजेक्शन अटैक के बारे में जानना चाहता हूं। मैं अपने स्थानीय मशीन पर लागू करने के लिए पता करने के लिए कि यह कैसे इतना है कि मैं अपने सिस्टम में रोका जा सकता है किया जा सकता है की कोशिश की है ...php sql इंजेक्शन

मैं इस

पीएचपी कोड की तरह कोड लिखा है:

if(count($_POST) > 0){ 

     $con = mysql_connect("localhost","root","") or die(mysql_error()); 
    mysql_select_db('acelera',$con) or die(mysql_error()); // 
    echo $sql = 'SELECT * FROM acl_user WHERE user_email = "'.$_POST['email'].'" AND user_password = "'.$_POST['pass'].'"'; 
    $res_src = mysql_query($sql); 
    while($row = mysql_fetch_array($res_src)){ 
     echo "<pre>";print_r($row);echo "</pre>"; 
    } 
} 

एचटीएमएल कोड:

<html> 
<head></head> 
<body> 

EMAIL : <input type="text" name="email" id="email" /><br /> 
    PASWD : <input type="text" name="pass" id="pass" /><br /> 
    <input type="submit" name="btn_submit" value="submit email pass" /> 
     </body> 
</html> 

इस कोड को अगर मैं " OR ""=" तो एसक्यूएल इंजेक्शन के रूप में इनपुट देने के द्वारा किया जाना चाहिए। लेकिन यह ठीक से काम नहीं कर रहा है। यदि मैं पासवर्ड फ़ील्ड में इनपुट ऊपर देता हूं तो पोस्ट डेटा में मेरे पास अतिरिक्त स्लेश होते हैं।

किसी भी एक मुझे दिखा सकता है कि वास्तव में एसक्यूएल इंजेक्शन हमले किया जा सकता है? (कोड अधिक सराहनीय हो जाएगा)

+0

> उस पोस्ट डेटा में मैं इसके स्लैश है। – RiaD

उत्तर

9

आप शायद मैजिक कोट सक्षम है। get_magic_quotes_gpc का वापसी मूल्य देखें।

"मेजिक कोट्स" पीएचपी से करने के लिए ऑटो जादुई एसक्यूएल इंजेक्शन को रोकने के एक प्राचीन प्रयास है, लेकिन वर्तमान संस्करण में यह पदावनत किया गया है और आप prepared statements उपयोग करने के लिए एसक्यूएल इंजेक्शन से बचने के लिए प्रोत्साहित किया जाता है।

here उन्हें अक्षम करने के लिए देखें ताकि आप एसक्यूएल इंजेक्शन के साथ प्रयोग कर सकें।

-1

उपयोग:

mysql_real_escape_string($_POST['thing']) 

मैं भी पीडीओ या mysqli का उपयोग कर कनेक्ट/अपने डेटाबेस क्वेरी करने के लिए सुझाव है। पुराने mysql_ कमांड बाद वाले ओवर प्रदर्शन सुधार PHP3 के लिए एक थ्रोबैक हैं। जैसे कि यह एक है http://www.tizag.com/mysqlTutorial/mysql-php-sql-injection.php

+0

पर magic_qoutes_qpc को सेट करने का प्रयास करें, वह इंजेक्शन से बचना नहीं चाहता है, वह जानना चाहता है कि उसके सिस्टम को इंजेक्ट कैसे करें। – Vache

+0

वह एक एसक्यूएल इंजेक्शन अनुकरण करने की कोशिश कर रहा है, इसे रोक नहीं सकता;) – Jacob

+0

इंजेक्शन कैसे करना है, इसे कैसे रोकें। – SynerCoder

1

मैं अपने php.ini magicquotes में लगता है या कुछ और:

यहाँ कैसे SQL इंजेक्शन PHP/MySQL के माध्यम से काम करता है के लिए एक अच्छा (लेकिन सरलीकृत) परिचय है। इसका मतलब है कि विशेष पात्र स्वचालित रूप से बच निकले हैं।

php के मैनुअल में इस पेज पर इसे बंद करने के लिए समझाया गया है:

http://www.php.net/manual/en/security.magicquotes.disabling.php

1

मुझे लगता है कि आप मैजिक कोट http://ch2.php.net/magic_quotes

अधिकांश आधुनिक पीएचपी प्रतिष्ठानों कर दिया है की वजह से अतिरिक्त स्लेश मिल यह बंद है, तो आप उस पर भरोसा नहीं करना चाहते हैं। बस mysql_real_escape_string() या, बेहतर उपयोग करते हैं, पीडीओ http://ch2.php.net/pdo

1

का उपयोग मैं Acunetix को देख सुझाव देते हैं, या इस तरह समान और कुछ ऐड-ऑन फ़ायरफ़ॉक्स के लिए:

https://addons.mozilla.org/en-US/firefox/addon/sql-injection/

यह SQL के खिलाफ परीक्षण के लिए जल्दी है इंजेक्शन और एसक्यूएलआई के सभी रूपों/शायद विधियों को स्कैन भी करते हैं जिन्हें आप अनजान थे। Acunetix इसे बढ़ाता है और आरएफआई, एक्सएसएस आदि के लिए परीक्षण

कोड का उपयोग करना कुशल नहीं है।

1

एसक्यूएल बनाने के लिए आपको इस तरह दिखना चाहिए कोशिश कर रहे हैं:

SELECT * FROM acl_user WHERE user_email = "[email protected]" Or 1=1; --" AND user_password = "" 

कोशिश प्रवेश:

[email protected]" Or 1=1; -- 

ई-मेल एड्रेस के रूप में और पासवर्ड ध्यान न दें।

- शेष बयान को नजरअंदाज कर देता है। आप शायद magic quotes on है - http://php.net/manual/en/security.database.sql-injection.php

+0

और आप भाग गए उद्धरण चार के साथ क्या करेंगे? :] – WASD42

+0

@ डेवशॉ क्यों 'या 1 = 1'? 'या 1' का सटीक प्रभाव होगा। –

2

के रूप में हर किसी को पहले से ही कहा:

यहाँ इस मामले पर कुछ अच्छी जानकारी है। यद्यपि यहां एक चाल है: यह फ़ंक्शन SQL इंजेक्शन को निष्पादित करने में कठोर बनाता है, लेकिन पूरी तरह असंभव नहीं है।

इसके अलावा addslashes() इसके साथ आपकी सहायता नहीं कर सकता है। एक संभावित हमलावर बहु-बाइट वर्णमाला और कुछ अन्य चालों का प्रयास कर सकता है। http://shiflett.org/blog/2006/jan/addslashes-versus-mysql-real-escape-string

कम रखते हुए:

यहाँ इसके बारे में एक अच्छा लेख है अगर आप सिंगल-बाइट वातावरण में मल्टी-बाइट वर्ण का उपयोग उनमें से कुछ दो एकल-बाइट वर्ण बन जाएगा - स्लैश, उद्धरण, आदि

1

इसे करने के लिए परिवर्तन: नोए अगर आप कुछ या 1 = 1 तो के रूप में इनपुट पासवर्ड यह कारण होगा इंजेक्शन

<?PHP if(count($_POST) > 0){ 

    $con = mysql_connect("localhost","root","") or die(mysql_error()); 
    mysql_select_db('acelera',$con) or die(mysql_error()); // 
    echo $sql = "SELECT * FROM acl_user WHERE user_email = ".$_POST['email']." AND user_password = ".$_POST['pass']; 
    $res_src = mysql_query($sql); 
    while($row = mysql_fetch_array($res_src)){ 
    echo "<pre>";print_r($row);echo "</pre>"; 
    } 
    } 
    ?> 


    <html> 
    <head></head> 
    <body> 
    <form action="" method="post"> 
    EMAIL : <input type="text" name="email" id="email" /><br /> 
    PASWD : <input type="text" name="pass" id="pass" /><br /> 
    <input type="submit" name="btn_submit" value="submit email pass" /> 
    </form> 
    </body> 
    </html> 
0

कैसे एक एसक्यूएल इंजेक्शन को रोकने के लिए

+०१२३५१६४१०६१

1) फ़िल्टर इनपुट- अपने उपयोगकर्ताओं पर विश्वास करना बंद करें: एप्लिकेशन के लिए सबसे बड़ा खतरा अपने उपयोगकर्ताओं से है। उपयोगकर्ताओं की अपेक्षा की जा रही है कि आप अच्छी तरह से मज़ेदार और आज्ञाकारी नहीं हों। कुछ उपयोगकर्ताओं के पास वास्तव में खराब इरादे हैं और कुछ बस अपने हैकिंग कौशल का परीक्षण करने का प्रयास करते हैं। जो भी कोड आप लिखने जा रहे हैं, इसे सर्वोत्तम प्रथाओं का उपयोग करके लिखें और इसके सुरक्षा पहलुओं पर विचार करें। फॉर्म

2) डेटाबेस रैपर वर्ग या पीडीओ - डेटाबेस रैपर या पीडीओ (PHP में) डेटाबेस में इनपुट मानों की सीधी पहुंच का जोखिम कम कर सकते हैं। नीचे दिखाए गए अनुसार पीडीओ के साथ तैयार बयानों का उपयोग किया जा सकता है।

http://www.itechnicalblog.com/what-is-a-sql-injection-and-how-to-fix-it/

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