क्या db_insert सुरक्षित है?


15

मैं Drupal डेटाबेस में कस्टम तालिका में डेटा सम्मिलित करने के लिए Drupal 7 विधि db_insert का उपयोग कर रहा हूं । मैंने पढ़ा है कि यह पसंदीदा तरीका है, हालांकि मैंने कोड और डोको के माध्यम से चला है और मैं कहीं भी नहीं देख सकता हूं जो मूल्यों को पार्स करता है, या मुझे बताता है कि ये मूल्य सुरक्षित हैं।

कुछ मान उपयोगकर्ता से आ रहे हैं इसलिए मुझे SQL इंजेक्शन हमलों के खिलाफ जांच करने की आवश्यकता है।

यह वह उदाहरण है जो मैं पढ़ रहा था, जहां ड्रुपल 6 मानों को पार्स करता है, और ड्रुपल 7 संस्करण नहीं है।

<?php
// Drupal 6 version
db_query('INSERT INTO {vchess_games} 
   (gid, timestamps, white, black, state, board_white, board_black) ' . "VALUES ('%s', '%s', '%s', '%s', '%s', '%s', '%s')", 
   $gid, $timestamps, $game['white'], $game['black'], $state, $board_white, $board_black);

// Drupal 7 version
db_insert('vchess_games')
  ->fields(array(
    'gid' => $gid,
    'timestamps' => $timestamps,
    'white' => $game['white'],
    'black' => $game['black'],
    'state' => $state,
    'board_white' => $board_white,
    'board_black' => $board_black
  ))
  ->execute();
?>

जवाबों:


13

Drupal डेटाबेस लेयर PDO के चारों ओर घूमता है और तैयार किए गए कथनों का उपयोग करता है, इसलिए हाँ, सम्मिलित विवरणों को SQL इंजेक्शन के हमलों से सुरक्षित और सुरक्षित किया जाता है।

तैयार स्टेटमेंट डॉक्स के इस उद्धरण में कहा गया है कि यह सबसे अच्छा है:

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

एक ही ड्रुपल 7 (में डेटाबेस कार्यों के सभी के लिए सच है db_select, db_delete, आदि)। एकमात्र वह जो अभी भी संभावित रूप से असुरक्षित है, db_query()जो आपके द्वारा पारित किसी भी मनमाने स्ट्रिंग को निष्पादित करेगा। db_query()हालांकि, भले ही आप मापदंडों में पारित कर सकते हैं ताकि आपकी क्वेरी सुरक्षित रहे।

डाटाबेस अमूर्त परत डॉक्स में कुछ और जानकारी है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.