2013-01-10 19 views
10

से एचटीएमएल इंजेक्शन करने वाले हैकर्स को रोकने के लिए पर्याप्त नहीं है मेरे पास एक टेक्स्ट बॉक्स के साथ एक फॉर्म है जो एक php फ़ाइल में डेटा पोस्ट करता है जो "मालिकों" के फ़ंक्शन का उपयोग करता है ताकि यह वेबसाइट स्वामी को ईमेल करने के लिए सुरक्षित हो सके।PHP htmlentities फॉर्म

समस्या यह है कि कोई व्यक्ति टेक्स्ट में हाइपरलिंक प्राप्त करने में कामयाब रहा है और htmlentities() इसे हटा नहीं देता है।

यह मेरा पाठ बॉक्स एचटीएमएल है:।

<input name="usertext" type="text" /> 

यह मेरा PHP कोड उस पोस्ट डेटा (क्योंकि है कि समस्या नहीं है मैं ईमेल कोड बाहर छोड़ दिया मैं बदल यह सिर्फ प्राप्त डेटा तो प्रतिध्वनित करने के लिए प्राप्त करता है मैं क्या हैकर किया दोहराने के लिए कोशिश कर सकते हैं मुझे पता है वह यह कैसे किया, मैं ऐसा होने से इसे रोकने के लिए एक तरह से) पा सकते हैं:।

echo trim(htmlentities($_POST["usertext"], ENT_QUOTES)); 

अब हैकर कुछ डेटा भेजने और इस परिणाम एचटीएमएल था (स्रोत कोड - इसका मतलब है कि यह ब्राउज़र में एक सामान्य लिंक दिखाता है):

<a target="_blank" href="mailto:[email protected]">[email protected]</a> 

मैंने सोचा कि htmlentities() किसी को भी किसी भी प्रकार के एचटीएमएल दर्ज करने में सक्षम होने से रोक देगा। अगर मैं इस तरह के रूप हाइपरलिंक दर्ज करें:

<a href="aaa" /> 

मैं:

&lt;a href="aaa" /&gt; 

लेकिन हैकर का पाठ उस तरह एनकोड नहीं किया गया था।

तो मेरी प्रश्न हैं:

  1. कैसे हैकर html टैग में प्रवेश किया था ताकि htmlentities() फ़ंक्शन यह करने के लिए कुछ नहीं किया?
  2. मैं इसे परीक्षण के लिए कैसे दोहराऊंगा? (उपरोक्त प्रश्न द्वारा उत्तर दिया जा सकता है)

मैंने कुछ शोध किया और यह संभव है कि हैकर ने यूटीएफ -7 या कुछ में अपना टेक्स्ट एन्कोड किया हो?

मुझे पहले से ही इन लिंक के साथ कुछ ईमेल प्राप्त हुए हैं। यह हैकर स्पष्ट रूप से मेरी वेबसाइट का परीक्षण कर रहा है यह देखने के लिए कि क्या वह एक्सएसएस या कुछ कर सकता है।

+0

जमा होने पर $ _POST ["usertext"] फ़ील्ड की सामग्री के साथ कच्चे अनुरोध को लॉग करें। आप htmlentities में एन्कोडिंग भी जोड़ सकते हैं जो सामग्री के एन्कोडिंग से मेल खाना चाहिए। – MatsLindh

+0

क्या आपने कहीं भी जावास्क्रिप्ट को शामिल किया था, शायद यह गतिशील रूप से बनाया गया है? – martinstoeckli

+0

क्या आप भेजने से पहले अपनी एचटीएमएल सामग्री को ठीक से एन्कोड कर रहे हैं? – inhan

उत्तर

4

अच्छा सवाल! मुझे लगता है कि आप इस link को पढ़ सकते हैं जो समस्या की व्याख्या करता है और समाधान देता है।

प्रस्तावित समाधान ब्राउज़र (मेटा टैग के माध्यम से) को निर्दिष्ट करना है जो पृष्ठ में वर्णमाला का उपयोग किया जाता है।

+0

धन्यवाद से कैसे है। वह लिंक बहुत रोचक है और ऐसा लगता है जैसे हैकर यूटीएफ -7 का इस्तेमाल कर सकता था। एकमात्र समस्या यह है कि जब मैं अपने टेक्स्ट बॉक्स में utf-7 उदाहरण कॉपी करता हूं और इसे सबमिट करता हूं, तो ब्राउज़र केवल सटीक वर्ण दिखाता है और उन्हें HTML टैग में परिवर्तित नहीं करता है। वैसे भी, ऐसा लगता है कि हैकर शायद ऐसा ही करेगा। मैं utf-8 निर्दिष्ट करूंगा जहां मैं उदाहरण सकता हूं। (Php code) हेडर ('सामग्री-प्रकार: टेक्स्ट/एचटीएमएल; charset = utf-8'); यह काम कर सकता है। चूंकि हैकर ने जो किया है उसे दोहराना नहीं कर सकता, इसलिए मैं कभी नहीं जानता कि यह तब तक काम करता है जब तक कि वह फिर कोशिश नहीं करता :) – Daniel

0

यह सबसे सुरुचिपूर्ण समाधान नहीं है, लेकिन आपके शेष कोड को देखे बिना, आप यह देखने के लिए जांच सकते हैं कि उपयोगकर्ता टेक्स्ट फ़ील्ड में "href" स्ट्रिंग है और इसे अस्वीकार करें।

+0

यह एक तरीका है और मैं ऐसा कर सकता हूं अगर कोई भी यह नहीं समझ सकता कि हैकर एचटीएमएलएन्टिटीज – Daniel

0

htmlspecialchars() चाल करना चाहेंगे? W3Schools पर यह article ऐसा सुझाव देता है।