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

Sockets.io/node.js/javascript के साथ mysql विशेष वर्णों से कैसे बचें?

ऐसा न करें

आप समस्या के गलत समाधान के बारे में पूछ रहे हैं।

एपोस्ट्रोफ को बैकस्लैश-एपोस्ट्रोफ से बदलने के लिए आप उपयोग कर सकते हैं:

str = msg.replace(/'/g, '\\\'');

लेकिन आपको ऐसा नहीं करना चाहिए . मैं केवल वह जानकारी प्रदान कर रहा हूं क्योंकि आपका प्रश्न यही पूछता है लेकिन नीचे पढ़ें।

यह एक बुरा विचार क्यों है

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

आपके द्वारा प्रदान की गई जानकारी होने से यह बताना भी असंभव है कि क्या बैकस्लैश-एस्ट्रोफ़े आपके कोड को देखे बिना पहली बार में आपकी अपेक्षा के अनुरूप होगा जो वास्तव में डेटाबेस क्वेरी बनाता है। लेकिन इससे कोई फर्क नहीं पड़ता क्योंकि आपको ऐसा कभी नहीं करना चाहिए। कभी नहीँ। उन उत्तरों को देखने के लिए देखें कि क्यों - वे प्रश्न SQL इंजेक्शन के बारे में नहीं हैं, लेकिन कोड उदाहरणों में SQL इंजेक्शन भेद्यताएं शामिल हैं और उत्तर इसकी व्याख्या करते हैं:

अनिवार्य कॉमिक स्ट्रिप

इसके बजाय आपको क्या करना चाहिए

कहा जा रहा है, आपने यह नहीं बताया कि आप डेटाबेस को क्वेरी करने के लिए किस मॉड्यूल का उपयोग कर रहे हैं, लेकिन कोई फर्क नहीं पड़ता कि आप mysql का उपयोग कर रहे हैं मॉड्यूल या सीक्वेलाइज़ या इसके नमक के लायक कुछ भी, हमेशा स्ट्रिंग्स को मैन्युअल रूप से बचने और संयोजित किए बिना सुरक्षित तरीके से इंटरपोलिंग चर का एक तंत्र होना चाहिए।

उदाहरण

आपने यहां प्रासंगिक कोड की एक भी पंक्ति नहीं दिखाई, इसलिए मैं आपको यह नहीं बता सकता कि इसे कैसे ठीक किया जाए, लेकिन इस उदाहरण पर विचार करें:

असुरक्षित:

connection.query(
  "SELECT * FROM player WHERE nick = '"
  + data.login + "' AND pass = '" + data.pass + "'",
  function (err, rows) {
    //...
  }
);

अभी भी असुरक्षित, जटिल, अपठनीय, अनुरक्षणीय और अविश्वसनीय:

connection.query(
  "SELECT * FROM player WHERE nick = '"
  + data.login.replace(/'/g, '\\\'') + "' AND pass = '" + data.pass.replace(/'/g, '\\\'') + "'",
  function (err, rows) {
    //...
  }
);

सुरक्षित और आसान:

connection.query(
  "SELECT * FROM player WHERE nick = ? AND pass = ?", [data.login, data.pass],
  function (err, rows) {
    // ...
  }
);

अधिक जानकारी

अधिक जानकारी के लिए दस्तावेज़ देखें:




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Openshift MySQL कार्ट्रिज को पुनरारंभ करने में त्रुटि

  2. com.mysql.jdbc.Driver लोड करने में असमर्थ

  3. MySQL में एकाधिक फ़ील्ड पर भारित खोज करने का सबसे अच्छा तरीका?

  4. स्पार्क SQL और MySQL- SaveMode। संशोधित डेटा सम्मिलित नहीं करना अधिलेखित करना

  5. C++ प्रोग्राम MySQL डेटाबेस के साथ संचार करता है