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

PHP:जबकि SQL इंजेक्शन रोकथाम के लिए चयन को समायोजित करने के बाद लूप काम नहीं कर रहा है

आप कॉलम और टेबल के नाम, केवल डेटा को बाइंड नहीं कर सकते। आपको तालिका निर्दिष्ट करने और फिर अपने '%calendar weekday%' . के लिए बाध्य करने की आवश्यकता है ।

$stmt = $conn->prepare("SELECT " . $selectLang . " FROM `TranslationsMain` WHERE `location` LIKE ? ORDER BY `sortOrder`, " . $selectedLang);
$stmt->bind_param('s', $calendar_weekday);

यदि आप गतिशील तालिका/स्तंभ नामों का उपयोग करना चाहते हैं तो आपको उन वस्तुओं की न्यूनतम श्वेत-सूची का प्रदर्शन करना चाहिए। आप डेटाबेस से पूछकर एक गतिशील सफेद सूची बना सकते हैं कि किसी दिए गए डेटाबेस तालिका के लिए कौन से कॉलम मान्य हैं। उदाहरण के लिए:

SELECT `COLUMN_NAME` 
FROM `INFORMATION_SCHEMA`.`COLUMNS` 
WHERE `TABLE_SCHEMA` = `database_name`
AND `TABLE_NAME` = `table_name`

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

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




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. कैसे जांचें कि MySQL में दो दिनांक सीमाएं ओवरलैप हैं या नहीं?

  2. php mysql समूह नवीनतम रिकॉर्ड प्राप्त करने के लिए, पहले रिकॉर्ड नहीं

  3. निकटता खोज

  4. कनेक्शन बंद होने के बाद किसी भी संचालन की अनुमति नहीं है MYSQL

  5. संपूर्ण तालिका को लॉक किए बिना तालिका बदलें