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

क्या Knex.js sql इंजेक्शन को रोकता है?

knex दस्तावेज़ों को ध्यान से पढ़ें कि कैसे knex रॉ में मान पास करें (http://knexjs.org/#Raw )।

यदि आप कच्चे के लिए बाध्यकारी पैरामीटर के रूप में मान पास कर रहे हैं जैसे:

knex.raw('select * from foo where id = ?', [1])

उस स्थिति में पैरामीटर और क्वेरी स्ट्रिंग को SQL इंजेक्शन से क्वेरी की सुरक्षा करने वाले डेटाबेस ड्राइवर को अलग से पास किया जाता है।

अन्य क्वेरी निर्माता विधियां हमेशा आंतरिक रूप से बाध्यकारी प्रारूप का उपयोग करती हैं ताकि वे भी सुरक्षित हों।

यह देखने के लिए कि डेटाबेस ड्राइवर को कुछ क्वेरी कैसे पास की जाती है:

knex('foo').where('id', 1).toSQL().toNative()

जो क्वेरी चलाने के लिए ड्राइवर को दिए गए SQL स्ट्रिंग और बाइंडिंग को आउटपुट करेगा (https://runkit.com/ एम्बेड/2yhqebv6pte6 )।

सबसे बड़ी गलती जो कोई knex कच्चे प्रश्नों के साथ कर सकता है, वह है जावास्क्रिप्ट टेम्प्लेट स्ट्रिंग का उपयोग करना और वैरिएबल को सीधे SQL स्ट्रिंग प्रारूप में इंटरपोलेट करना जैसे:

knex.raw(`select * from foo where id = ${id}`) // NEVER DO THIS 

ध्यान देने वाली एक बात यह है कि नक्स टेबल/पहचानकर्ता नाम ड्राइवर के लिए बाइंडिंग के रूप में पारित नहीं किए जा सकते हैं, इसलिए उन लोगों के साथ उपयोगकर्ता से टेबल/कॉलम नामों को न पढ़ने के लिए अतिरिक्त सावधानी बरतनी चाहिए और पहले उन्हें ठीक से सत्यापित किए बिना उनका उपयोग करना चाहिए।

संपादित करें:

यह कहकर कि पहचानकर्ता नामों को बाइंडिंग के रूप में पारित नहीं किया जा सकता है, मेरा मतलब है कि जब कोई ?? . का उपयोग कर रहा हो पहचानकर्ता नाम के लिए knex -बाइंडिंग, जिसे डेटाबेस ड्राइवर को पास करने पर SQL स्ट्रिंग के हिस्से के रूप में प्रस्तुत किया जाएगा।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. html <एकाधिक का चयन करें =एक से अधिक> + SQL क्वेरी खोज

  2. MySQL वाक्पटु लार्वा में शामिल हों और और के लिए

  3. PHP और MySQL में एक सुरक्षित लॉगिन स्क्रिप्ट कैसे बनाएं

  4. PHP (MySQL) त्रुटि:चेतावनी:mysql_num_rows () पैरामीटर 1 को संसाधन होने की अपेक्षा करता है

  5. बाइनरी फ़ील्ड के साथ कैसे चयन करें? (पीएचपी, MySQL)