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

उपयोगकर्ता इनपुट, डीबी को भेजने से पहले साफ और साफ करें

सबसे पहले, टेक्स्ट को तार्किक और साफ रखें:

trim() -- OK
htmlentities($comment, ENT_NOQUOTES)  -- No; do later
mysqli_real_escape_string()  -- Yes; required by API
nl2br()  -- No; see below

उन अनुशंसाओं के पीछे तर्क:डेटाबेस में डेटा केवल सादा डेटा होना चाहिए। htmlइकाइयाँ नहीं, br-टैग नहीं। लेकिन, PHP से MySQL में डेटा पास करने के लिए आपको एस्केप_स्ट्रिंग करना होगा; बचों को संग्रहित नहीं किया जाएगा।

लेकिन... वह केवल बीच का कदम है। डेटा कहां से आया? PHP के पुराने संस्करण "सुरक्षित" करने का प्रयास करते हैं, जिसमें आप एस्केप और अन्य जंक जोड़ रहे हैं जो HTML के लिए ठीक काम करता है, लेकिन MySQL को खराब कर देता है। ऐसे जादू से बचना बंद करें, और कच्चा डेटा प्राप्त करें।

डेटा कहां जाता है? शायद एचटीएमएल? SELECTing तालिका से डेटा वापस, फिर पहले htmlentities() do करें और (वैकल्पिक रूप से) nl2br();

ध्यान दें, अगर आप <I> . जैसी चीज़ों को सुरक्षित रखने की उम्मीद कर रहे हैं (इटैलिक के लिए), आप परेशानी मांग रहे हैं - बड़ी परेशानी। एक हैकर को बस इतना करना होता है <script> ... अपने वेब पेज और संभवत:आपके पूरे सिस्टम में हर तरह की कुटिलता को इंजेक्ट करने के लिए।



  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 जबकि लूप केवल अंतिम पंक्ति प्रदर्शित करता है

  3. मैं JSON में MySQL ऑब्जेक्ट को एन्कोड करने के लिए PHP का ठीक से उपयोग कैसे करूं?

  4. Django डेटाटाइम फ़ील्ड - दृश्य में समयक्षेत्र में कनवर्ट करें

  5. MySQL में सोशल नेटवर्क सिस्टम के लिए डेटाबेस डिजाइन करने के लिए गाइड