एक वेबसाइट में हर एक तत्व को एक दुर्भावनापूर्ण उपयोगकर्ता द्वारा बदला जा सकता है (छिपे हुए फ़ील्ड, डिव, स्टाइल, अजाक्स कॉल, आप इसे नाम दें...)।
उस ने कहा, यदि आप पहले से ही तैयार वक्तव्य का उपयोग कर रहे हैं, तो आपको एसक्यूएल इंजेक्शन के बारे में ज्यादा चिंता नहीं करनी चाहिए क्योंकि MySQL पहले से ही जानता है कि कौन से बयान निष्पादित होने जा रहे हैं।
इसके बजाय आपको वेबसाइट में प्रस्तुत किए जा रहे सभी आउटपुट को स्वच्छ करना चाहिए।
मान लीजिए कि आपके रूप में आप पूछ रहे हैं कि मैं किस देश में रहता हूं इस तरह:
<select name="country">
<option value="Mexico">Mexico</option>
<option value="USA">USA</option>
<option value="Canada">Canada</option>
</select>
लेकिन मैं एक दुर्भावनापूर्ण उपयोगकर्ता हूं, और मैं आपके एचटीएमएल को बदलने के लिए क्रोम के कोड इंस्पेक्टर का उपयोग करता हूं, और मैं मेक्सिको का चयन करता हूं, लेकिन इसके मूल्य को बदलता हूं
<script type="text/javascript">alert("Hello World");</script>
और यदि आप उस मान को किसी अन्य पृष्ठ में इस प्रकार आउटपुट करते हैं:
Your country is: <?=$country?>
तब आप लिख रहे होंगे:
Your country is:
<script type="text/javascript">alert("Hello World")</script>
और "हैलो वर्ल्ड" टेक्स्ट के साथ एक अलर्ट बॉक्स पॉप अप होगा
इससे मुझे क्या नुकसान हो सकता है आप सोच सकते हैं...
ठीक है, मैं उसके साथ कुछ भी कर सकता हूं, मैं कुकीज़ चुरा सकता हूं या यदि वह मान सार्वजनिक है (कहते हैं कि आप उस मूल्य को अपने फ्रंटपेज में प्रदर्शित कर रहे हैं), तो मैं आपके उपयोगकर्ताओं को किसी अन्य वेबसाइट पर रीडायरेक्ट कर सकता हूं, आपकी वेबसाइट की सामग्री बदल सकता हूं। . मुझे जो कुछ भी चाहिए।
अपने उपयोगकर्ताओं के आउटपुट को साफ करने के लिए आप उपयोग कर सकते हैं
htmlentities
यह परिवर्तित हो जाएगा, उदाहरण के लिए, <
>
इसके संबंधित कोड के प्रतीक:<
और >