2012-11-28 14 views
6

मैं एक Drupal 7 पर काम कर रहा हूँ स्थापित जहां आर्ग (एक्स)ड्रूपल के तर्क (एक्स) से आउटपुटिंग/एस्केपिंग आउटपुट जरूरी है?

http://api.drupal.org/api/drupal/includes!bootstrap.inc/function/arg/7

एचटीएमएल उत्पादन एक बहुत में इस्तेमाल किया गया है, देखने टेम्पलेट्स और अन्य स्थानों पर आदि में हालांकि मैं प्रलेखन देखा है और इस विषय पर चारों ओर खोज की, मैं अभी भी उलझन में हूं कि अगर मुझे xss को रोकने के लिए php के htmlspecialchars या drupal's check_plain आदि के साथ arg (x) के आउटपुट को sanitize/से बचने की आवश्यकता है।

उत्तर

3

तकनीकी रूप से, मेरे परीक्षण के अनुसार, आप से बचने के लिए की आवश्यकता है। लेकिन अच्छी तरफ यह है कि, arg() हमेशा प्रत्यक्ष उपयोगकर्ता इनपुट का उपयोग नहीं करता है।

यदि यूआरएल (या अधिक सटीक, $_GET['q']) node/<h3>/edit है, arg(1) चेकआउट के बिना <h3> देता है। यदि आप इसे स्वयं परीक्षण करना चाहते हैं, तो नीचे स्निपेट जोड़ें और स्वयं को देखें।

<?php 
echo (arg(1, 'node/<h3>/edit')); ?>Normal text 

अब आप "सामान्य टेक्स्ट" h3 में देखेंगे।

एक नोड आईडी 4 है, तो जब नोड को देखने, $_GET['q'] नोड/4 होगा। यदि पथ अलियाकृत नहीं है, तो यूआरएल वही होगा। उपरोक्त उदाहरण के अनुसार, यदि उपयोगकर्ता node/<h3> खोला गया है, arg(1)<h3> से बचने के बिना <h3> होगा लेकिन इसमें कोई संदेह नहीं है कि उपयोगकर्ता आपके स्निपेट को देखेगा जिसे आपने arg() का उपयोग किया था क्योंकि वह पृष्ठ 404 परिणाम देता है (जहां आपको कोई ब्लॉक नहीं दिखाई देता है , पेज सामग्री, आदि)।

arg()t() में, यूआरएल(), l() और अन्य कार्यों का उपयोग करना हमेशा बच जाएंगे/परिणाम तो व्यावहारिक दुनिया में, यह है कि आप एक वास्तविक मामला है कि किसी को अपनी साइट XSS कर सकते हैं मिल जाएगा संभावना नहीं है स्वच्छ।

यहां एक बुरा उपयोग है जिसके बारे में मैं सोच सकता हूं। page.tpl.php फ़ाइल में, आप इस तरह URL पथ से एक वर्ग जोड़ सकते हैं:

<body class="<?php print arg(0); ?>"> 

आपको लगता है कि उम्मीद कर सकता है नोड पृष्ठों पर, आप शरीर टैग की क्लास है "नोड", और व्यवस्थापक पर देखेंगे पेज, कक्षा "व्यवस्थापक" है। लेकिन उपयोगकर्ता की कल्पना को खोलता है इस तरह एक पेज:

http://example.com/" onclick="alert('You are clicking on me');" 

तो शरीर टैग की वास्तविक HTML इस तरह होगा:

<body class="" onclick="alert('You are clicking on me');"> 

अब आप बॉडी टैग एक खाली वर्ग विशेषता है कि देखेंगे , और शरीर में एक ऑनक्लिक घटना भी शामिल है। यह सबसे खराब उदाहरण हो सकता है जो आप देख सकते हैं - लेकिन मैं आपको कुछ वास्तविक उदाहरण दिखाना चाहता था। $node->nid का उपयोग करना सुरक्षित है हालांकि।

+0

आपको बहुत बहुत धन्यवाद! यह समझ में आता है कि मैं समझता हूं, वास्तव में सहायता करने के लिए समय लेने की सराहना करता हूं। आपका दिन अच्छा रहे। –

संबंधित मुद्दे