Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

क्या mysqli_real_escape_string SQL इंजेक्शन या अन्य SQL हमलों से बचने के लिए पर्याप्त है?

<ब्लॉकक्वॉट>

क्या कोई मुझे बता सकता है कि क्या यह सुरक्षित है या यदि यह SQL इंजेक्शन हमले या अन्य SQL हमलों के लिए असुरक्षित है?

नहीं. जैसा कि uri2x कहता है, देखें एसक्यूएल इंजेक्शन जो लगभग mysql_real_escape_string() मिलता है।

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

ऐसी स्थिति के लिए जहां आप तैयार किए गए कथनों का उपयोग नहीं कर सकते (उदा. LIMIT ), प्रत्येक विशिष्ट उद्देश्य के लिए बहुत सख्त श्वेतसूची का उपयोग करना गारंटी . का एकमात्र तरीका है सुरक्षा।

// This is a string literal whitelist
switch ($sortby) {
    case 'column_b':
    case 'col_c':
        // If it literally matches here, it's safe to use
        break;
    default:
        $sortby = 'rowid';
}

// Only numeric characters will pass through this part of the code thanks to type casting
$start = (int) $start;
$howmany = (int) $howmany;
if ($start < 0) {
    $start = 0;
}
if ($howmany < 1) {
    $howmany = 1;
}

// The actual query execution
$stmt = $db->prepare(
    "SELECT * FROM table WHERE col = ? ORDER BY {$sortby} ASC LIMIT {$start}, {$howmany}"
);
$stmt->execute(['value']);
$data = $stmt->fetchAll(PDO::FETCH_ASSOC);

मेरा मानना ​​​​है कि अस्पष्ट किनारे के मामलों में भी उपरोक्त कोड SQL इंजेक्शन के लिए प्रतिरक्षा है। यदि आप MySQL का उपयोग कर रहे हैं, तो सुनिश्चित करें कि आपने एमुलेटेड तैयारी को बंद कर दिया है।

$db->setAttribute(\PDO::ATTR_EMULATE_PREPARES, false);



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. अपाचे स्पार्क 2.0.0 में, क्या बाहरी डेटाबेस से एक क्वेरी प्राप्त करना संभव है (बजाय पूरी तालिका को हथियाने के)?

  2. डायनामिक कॉलम को पंक्तियों में स्थानांतरित करना

  3. मौजूदा तालिका में प्रत्येक शब्द के पहले अक्षर को बड़ा करें

  4. कक्षाओं में पीडीओ का प्रयोग

  5. MySQL CRC32 () फ़ंक्शन – उदाहरण