दिलचस्प पोस्ट
जावास्क्रिप्ट में "?: नोटन" क्या है? VBA जांचें अगर फ़ाइल मौजूद है कॉर्डोबा अनुप्रयोग बनाने की कोशिश करते समय 'स्पॉन सीएमडी एनओएनएन्ट' प्राप्त करें (event.js: 85) GetMapAsync के साथ getMap को बदलें PHP में FQL द्वारा लौटते बड़े यूजर आईडी को संभालना PHP PHP में एरेज़ Jquery $ .ajax का उपयोग कर servlet के लिए अनुरोध पैरामीटर सरणी कैसे भेजें? आप एक ही मेज पर कैसे जुड़ें, दो बार, mysql में? सीन या वर्ग लहर को सी # में बनाना जावा GUI में घुमाए गए एक चौकोर पैनल टैबलायआउट के साथ एक टुकड़ा में कार्डविएव पंक्तियों के साथ रीसाइक्लेअर दृश्य को कैसे लागू किया जाए समूह द्वारा अनन्य मूल्यों की संख्या को आर डेटा.फ्रेम में कैसे जोड़ें द्विआधारी प्रतिनिधित्व करने के लिए डबल कन्वर्ट? क्या विंडोज़ पर बैश स्क्रिप्ट चलाने का कोई तरीका है? एकाधिक फाइलों को एसिंन्क डाउनलोड करें और बाकी सभी कोड को निष्पादित करने से पहले उन सभी को समाप्त करने के लिए प्रतीक्षा करें

PHP में डेटाबेस को स्ट्रिंग सबमिट करते समय मुझे htmlspecialchars () का उपयोग कर अवैध वर्णों का ध्यान रखना चाहिए या एक नियमित अभिव्यक्ति का उपयोग करना चाहिए?

मैं डेटाबेस के लिए सबमिट किए जाने वाले स्ट्रिंग में अवैध / विशेष वर्णों का उपयोग करने के लिए उपयोगकर्ता के लिए एक फार्म पर काम कर रहा हूं। मैं इन पात्रों को स्ट्रिंग में भागना / अस्वीकार करना चाहता हूं और htmlspecialchars () का उपयोग कर रहा हूं। हालांकि, क्या एक बेहतर / तेज विधि है?

वेब के समाधान से एकत्रित समाधान "PHP में डेटाबेस को स्ट्रिंग सबमिट करते समय मुझे htmlspecialchars () का उपयोग कर अवैध वर्णों का ध्यान रखना चाहिए या एक नियमित अभिव्यक्ति का उपयोग करना चाहिए?"

यदि आप इस डेटा को डेटाबेस में सबमिट करते हैं, तो कृपया अपने डेटाबेस के लिए एस्केप फ़ंक्शन पर एक नज़र डालें।

यही है, MySQL के लिए mysql_real_escape_string है

ये एस्केप फ़ंक्शंस किसी भी ऐसे वर्णों का ख्याल रखते हैं जो दुर्भावनापूर्ण हो सकते हैं, और आप अभी भी उसी तरीके से अपना डेटा प्राप्त कर सकते हैं जिस तरह से आप इसे वहां रखते हैं।

आप डेटा का ध्यान रखने के लिए तैयार बयान का भी उपयोग कर सकते हैं:

$dbPreparedStatement = $db->prepare('INSERT INTO table (htmlcontent) VALUES (?)'); $dbPreparedStatement->execute(array($yourHtmlData)); 

या एक छोटे से स्वयं को समझाते हुए:

 $dbPreparedStatement = $db->prepare('INSERT INTO table (htmlcontent) VALUES (:htmlcontent)'); $dbPreparedStatement->execute(array(':htmlcontent' => $yourHtmlData)); 

यदि आप विभिन्न प्रकार के डेटा को सहेजना चाहते हैं, तो प्रत्येक प्रकार को परिभाषित करने के लिए bindParam का उपयोग करें, अर्थात, एक पूर्णांक को परिभाषित किया जा सकता है: $db->bindParam(':userId', $userId, PDO::PARAM_INT); । उदाहरण:

 $dbPreparedStatement = $db->prepare('INSERT INTO table (postId, htmlcontent) VALUES (:postid, :htmlcontent)'); $dbPreparedStatement->bindParam(':postid', $userId, PDO::PARAM_INT); $dbPreparedStatement->bindParam(':htmlcontent', $yourHtmlData, PDO::PARAM_STR); $dbPreparedStatement->execute(); 

जहां $db आपका PHP डेटा वस्तु (PDO) है यदि आप एक का उपयोग नहीं कर रहे हैं, तो आप इसके बारे में PHP डेटा ऑब्जेक्ट में अधिक सीख सकते हैं।

डेटाबेस के लिए कोई "अवैध" वर्ण नहीं हैं। डेटाबेस जो कुछ वर्णों को संग्रहीत नहीं कर सकता है एक बकवास है कुछ सेवा वर्ण हैं, जैसे उद्धरण, स्ट्रिंग्स को सीमांकित करने के लिए। इन पात्रों को सिर्फ भाग नहीं लिया जाना चाहिए, समाप्त नहीं किया जाना चाहिए

डेटाबेस को एक क्वेरी भेजने के लिए, आपके पास 2 विकल्प हैं:

  1. एक क्वेरी सामान्य तरीके से बनाएँ, इसे एसक्यूएल क्वेरी के रूप में ठीक से देखने के लिए जो आप SQL कंसोल में चला सकते हैं।
    ऐसा करने के लिए, आपको नियमों का एक पूरा सेट समझना चाहिए, न कि केवल "mysql_real_escape_string का उपयोग करें"
    नियम जैसे:

    • तार दोनों को उद्धरण में संलग्न होना चाहिए और बच गए हैं। यह बचने का एकमात्र अर्थ है: यह सिर्फ सीमांकक से बच रहा है! (और कुछ अन्य पात्रों – स्ट्रिंग समापन चार और एस्केप वर्ण ही)। आसपास के उद्धरण चिह्नों के बिना mysql_real_escape_string सिर्फ बेकार है
    • संख्याओं को स्पष्ट रूप से इसके प्रकार पर डालना चाहिए हालांकि आंकड़ों के आंकड़ों को तारों की तरह खतरा हो सकता है, हालांकि, कुछ संख्याएं हैं, जैसे कि सीरियस क्लाज़ पैरामीटर, जो बच नहीं सकते हैं और केवल कास्ट हो सकते हैं।
  2. क्वेरी और डेटा को अलग से भेजने के लिए
    यह सबसे पसंदीदा तरीका है क्योंकि इसे "बंधन का उपयोग" करने के लिए छोटा किया जा सकता है सभी स्ट्रिंग्स, संख्याएं और LIMIT मानकों को बाध्य किया जा सकता है – बिल्कुल भी चिंता नहीं है।
    इस पद्धति का उपयोग करते हुए, प्लेसहोल्डर के साथ आपकी क्वेरी डेटाबेस के रूप में भेजी जा रही है, और बाध्य डेटा अलग पैकेट में भेजा जा रहा है, इसलिए, यह हस्तक्षेप नहीं कर सकता। यह कोड और डेटा अलग की तरह है। आप अपना प्रोग्राम (क्वेरी स्वयं) को डेटा से अलग भेजते हैं।

परंतु!

सब कुछ ऊपर कहा क्वेरी के केवल डेटा भाग को कवर करता है।
लेकिन कभी-कभी हमें हमारी क्वेरी को और भी अधिक गतिशील बनाना पड़ता है, ऑपरेटरों या पहचानकर्ताओं को जोड़ना
इस मामले में हर गतिशील पैरामीटर को हमारी स्क्रिप्ट में सख्त होना चाहिए और उस सेट से चुना जाना चाहिए।
उदाहरण के लिए, गतिशील ऑर्डर करने के लिए:

 $orders = array("name","price","qty"); //field names $key = array_search($_GET['sort'],$orders)); // see if we have such a name $orderby = $orders[$key]; //if not, first one will be set automatically. smart enuf :) $query = "SELECT * FROM `table` ORDER BY $orderby"; //value is safe 

या गतिशील खोज:

 $w = array(); $where = ''; if (!empty($_GET['rooms'])) $w[]="rooms='".mesc($_GET['rooms'])."'"; if (!empty($_GET['space'])) $w[]="space='".mesc($_GET['space'])."'"; if (!empty($_GET['max_price'])) $w[]="price < '".mesc($_GET['max_price'])."'"; if (count($w)) $where="WHERE ".implode(' AND ',$w); $query="select * from table $where"; 

इस उदाहरण में हम क्वेरी में केवल उपयोगकर्ता द्वारा दर्ज किए गए डेटा को नहीं जोड़ रहे हैं, फ़ील्ड नाम नहीं, जो कि सभी स्क्रिप्ट में हार्डकोड हैं। बाइंडिंग के लिए एल्गोरिथ्म बहुत समान होगा।

और इसी तरह।

सबसे पहले, आपको प्रदर्शित होने पर चीजों को सैनिट करना चाहिए, डेटाबेस में डालने से पहले नहीं। एसक्यूएल इंजेक्शन एक और कहानी है, लेकिन संभवत: ऑफ-विषय

दूसरा, अगर आपको HTML पर पोस्ट करने में सक्षम होने के लिए अपने उपयोगकर्ताओं की ज़रूरत नहीं है, htmlspecialchars आपको ज़रूरत है यह HTML में सभी विशेष वर्णों का ख्याल रखता है

मैं डेटाबेस के लिए सबमिट किए जाने वाले स्ट्रिंग में अवैध / विशेष वर्णों का उपयोग करने के लिए उपयोगकर्ता के लिए एक फार्म पर काम कर रहा हूं।

उपयोगकर्ता वास्तव में इसके बजाय बहुत कुछ कर सकते हैं।

मैं इन पात्रों को स्ट्रिंग में भागना / अस्वीकार करना चाहता हूं और htmlspecialchars () का प्रयोग कर रहा हूं। हालांकि, मैं जानना चाहूंगा कि क्या एक बेहतर / तेज़ तरीका है

एचटीएमएल प्रूफिडर का उपयोग करें

एचटीएमएल शोधक एक मानक-अनुरूप HTML फ़िल्टर लाइब्रेरी है जो PHP में लिखा गया है। एचटीएमएल शोधक न केवल सभी दुर्भावनापूर्ण कोड (बेहतर रूप से XSS के रूप में जाना जाता है) को पूरी तरह से ऑडिट, सुरक्षित अभी तक स्वीकार्य श्वेतसूची के साथ निकाल देगा।

और खुद के लिए तय 🙂

यह एक ऐसी समस्या नहीं है, जिसे आप खुद से निपटना चाहते हैं। आपके लिए ऐसा करने के लिए लाइब्रेरीज़ मौजूद हैं, जैसे कि HTML प्रूफियर

आपने ये नहीं बताया है कि ये अवैध अक्षर क्या हो सकते हैं लेकिन डेटा से बचने के लिए निश्चित रूप से डेटाबेस एपीआई की आपूर्ति की गई व्यवस्था का उपयोग करना चाहिए। उदाहरण के लिए, यदि आप MySQL का उपयोग कर रहे हैं, तो पीडीओ पैरामीटरलाइज़ एसक्यूएल स्टेटमेंट का उपयोग करें।