गंभीर सुरक्षा समस्याओं से बचने के लिए आपको दो बहुत महत्वपूर्ण चीजें करनी चाहिए।
-
अपनी SQL क्वेरी में डालने से पहले आपको उपयोगकर्ता इनपुट से बचना होगा। एस्केपिंग का अर्थ है सभी विशेष वर्णों से बचना, जैसे
'
; सौभाग्य से, एक फ़ंक्शन है जो इसे पहले से ही स्वचालित रूप से करता है:mysql_real_escape_string ।यदि आप उपयोगकर्ता इनपुट से नहीं बचते हैं तो खराब चीजें हो सकती हैं। कल्पना करें कि आपकी क्वेरी
INSERT INTO userdata VALUES ('$user_data')
है . अब कल्पना कीजिए कि उपयोगकर्ता ने'; DROP DATABASE userdata;
।यदि आप इससे नहीं बचते हैं, तो आपकी क्वेरी बन जाएगी:
INSERT INTO userdata VALUES (''; DROP DATABASE userdata;')
. जैसा कि आप कल्पना कर सकते हैं कि यह अच्छा नहीं है:यदि आपके पास मल्टी स्टेटमेंट सक्षम हैं तो आप अपने डेटाबेस को अलविदा कह सकते हैं। इसे SQL इंजेक्शन . कहा जाता है हमला। -
जब आप अपने वेरिएबल को उपयोगकर्ता को आउटपुट कर रहे हैं तो आपको HTML विशेष वर्णों को HTML निकायों के साथ ठीक से बदलने की भी आवश्यकता है। सौभाग्य से, ऐसा करने के लिए एक फ़ंक्शन भी है:htmlspecialchars() . यह विशेष HTML वर्णों को बदल देगा जैसे
<
करने के लिए<
।ऐसा लगता है कि यह एक ऐसी समस्या है जिसे अक्सर कम करके आंका जाता है, लेकिन वास्तव में यह बहुत गंभीर है। सोचिए अगर
$user_data
इसमें<script>SomeNastyScript()</script>
. शामिल है . यह आपके उपयोगकर्ताओं के ब्राउज़र में मौजूदा कमजोरियों का फायदा उठा सकता है, या यह हमलावर को एक गैर-HTTPOnly कुकी (जिसमें सहेजे गए पासवर्ड हो सकते हैं) भेज सकता है, या यह उपयोगकर्ता को अपने पासवर्ड को एक फॉर्म पर लिखने के लिए छल कर सकता है जो कि हेरफेर के माध्यम से उत्पन्न होता है। डोम (जावास्क्रिप्ट में संभव), या बहुत सी अन्य बुरी चीजें।इसे XSS . कहा जाता है (क्रॉस-साइट स्क्रिप्टिंग)।
लघु संस्करण
-
mysql_real_escape_string
पर कॉल करें अपनी SQL क्वेरी में डालने से पहले स्ट्रिंग पर (लेकिन तब नहीं जब आपecho
यह)। -
कॉल करें
htmlspecialchars
उपयोगकर्ता को इसे प्रदर्शित करने से पहले स्ट्रिंग पर (लेकिन जब आप इसे डेटाबेस में डालते हैं तो नहीं)।