Free tutorials & notes in Hindi & English · Clean code examples 🧰 मुफ़्त PDF और फ़ोटो टूल्स →
🔴 Advanced  ·  Lesson 35

XSS Prevention

XSS क्या है

XSS (Cross-Site Scripting) एक आम attack है जहाँ कोई बुरा user input के ज़रिए — जैसे comment या name field — आपके page में HTML या JavaScript डाल देता है। अगर आप वो input बिना साफ़ किए print करें, तो script दूसरे visitors के browsers में चल जाती है, जो cookies चुरा सकती है या accounts hijack कर सकती है।

⚠️ मुख्य नियम: user input को page पर कभी जैसा-का-तैसा print न करें। हमेशा पहले escape कीजिए।

Attack कैसे होता है

एक comment box सोचिए। आम user लिखता है "Nice post"। Attacker लिखता है:

<script>alert('hacked')</script>

अगर आपका page यह comment सीधे print करे, browser इस script को हर देखने वाले के लिए चला देता है। यही XSS है। ख़तरा text रखने में नहीं — बिना escape किए print करने में है।

हल: output escape करें

htmlspecialchars() ख़तरनाक characters को सुरक्षित text में बदल देता है ताकि browser उन्हें चलाने के बजाय दिखाए।

<?php
  $comment = "<script>alert('x')</script>";
  echo htmlspecialchars($comment);
?>
<script>alert('x')</script>

<script> अब page पर हानिरहित text की तरह दिखता है — चलता नहीं। यह एक function XSS से आपका मुख्य बचाव है।

Input सुरक्षित संभालना

असली value store कीजिए; escape सिर्फ़ दिखाते समय।

<?php
  $name = $_POST["name"] ?? "";   // जैसा है वैसा store
  // ... database में save ...

  // page पर दिखाते समय:
  echo "Hello, " . htmlspecialchars($name);
?>

इस तरह असली value database में बरक़रार रहती है, और सिर्फ़ screen पर आते समय सुरक्षित बनती है — escape करने की सही जगह।

सुरक्षित output नियम

  • print करते समय हर user-controlled value को htmlspecialchars() से escape कीजिए।
  • URLs से आई values भी escape कीजिए: $_GET values user input हैं।
  • quotes भी escape करने को ENT_QUOTES: htmlspecialchars($x, ENT_QUOTES)।
  • raw input को चिपकाकर HTML कभी मत बनाइए।

आम गलतियाँ

  • Input सीधे print करना। बिना escape echo $_POST["name"] classic XSS छेद है।
  • सिर्फ़ कुछ fields escape करना। एक भी un-escaped output attack के लिए काफ़ी है।
  • यह सोचना कि सिर्फ़ validation XSS रोकता है। Validation अलग है; output escape बचाव है।
  • URL parameters अनदेखा करना। page पर दिखने वाली $_GET values भी escape होनी चाहिए।

सारांश

  • XSS un-escaped input के ज़रिए attacker की script visitors के browsers में चलाता है।
  • हल है output को htmlspecialchars() से escape करना।
  • असली value store कीजिए; escape सिर्फ़ दिखाते समय।
  • हर user-controlled value escape कीजिए, URLs की $_GET समेत।
  • Validation और escaping दोनों चाहिए — ये अलग काम करते हैं।

आगे, आती हुई data साफ़ कीजिए form validation से, या database सुरक्षित कीजिए prepared statements से।

अक्सर पूछे जाने वाले प्रश्न (FAQ)

XSS सरल शब्दों में क्या है?
XSS (Cross-Site Scripting) तब है जब attacker user input के ज़रिए — जैसे comment box — आपके page में HTML या JavaScript घुसा देता है, और वो दूसरे visitors के browsers में चल जाता है। यह data चुरा सकता है या accounts hijack कर सकता है।
htmlspecialchars XSS कैसे रोकता है?
htmlspecialchars() < और > जैसे special characters को हानिरहित text codes में बदल देता है। तो घुसाया गया <script> चलने के बजाय plain text दिखता है। user input print करते समय हमेशा इसे इस्तेमाल कीजिए।
Escape ठीक कहाँ करूँ — input या output?
Output पर escape कीजिए, ठीक जब page पर print करें, htmlspecialchars() से। असली value store कीजिए; escape सिर्फ़ दिखाते समय। इससे data बरक़रार और screen पर सुरक्षित रहता है।
क्या XSS रोकने को validation काफ़ी है?
नहीं। Validation जाँचता है input सही आकार का है या नहीं, पर XSS बचाव सुरक्षित output के बारे में है। validated text को भी दिखाते समय htmlspecialchars() से escape कीजिए।
क्या XSS सिर्फ़ forms को प्रभावित करता है?
नहीं। page पर दिखने वाली कोई भी user-controlled value XSS ला सकती है — URL parameters, comments, profile names, search terms। इन सबको output पर escape कीजिए।
← Back to PHP Tutorial
🔗

Share this topic with a friend

यह topic किसी दोस्त को भेजें

Found it useful? Send it to a classmate learning the same thing.

अच्छा लगा? जो दोस्त यही सीख रहा है, उसे भेज दीजिए।

💻 लाइव कोड एडिटर

इस पेज के प्रोग्राम यहीं तैयार हैं — चलाएँ, बदलें और सीखें। कुछ भी इंस्टॉल किए बिना।
OneCompiler द्वारा संचालित। कोड एडिटर में अपने आप आ जाता है — Run दबाकर आउटपुट देखें। अगर एडिटर न खुले तो नए टैब में खोलें.
अगला topicSQL Injection Prevention आपकी प्रगति: 35 / 50 (70%) · Lesson 36 / 50 आगे बढ़ें →

यह lesson कैसा लगा?

आपकी राय से हम content और बेहतर बनाते हैं।

अपना review और सुझाव लिखें (वैकल्पिक)

Review approve होने के बाद आपका नाम और शहर इसके साथ public दिख सकते हैं। Email या phone न लिखें।

▶ CodingEasily on YouTube

Video से सीखें – आसान Hindi में

चुनी हुई video: RDBMS भाग 3 – Class XI Commerce IT

▶ Channel subscribe करें