2012-11-29 13 views
5
$num = $_GET['fileid'];      // get file id 

$realfile = "filename".$num.'.txt'; 

मेरा सवाल यह है कि क्या यह अभी भी जहर को खत्म करना संभव है? अंत में 'txt' मेरे प्रयोग के अनुसार शून्य बाइट इंजेक्शन के साथ गायब नहीं होता है। क्या इस बात को हल करने का कोई तरीका है?php null बाइट इंजेक्शन?

+0

Ext3 में/4 एफएस '\ 0' वर्णों को सिर्फ –

+0

छीन लिया गया है, मैं सभी संदेहों को हटा दूंगा और इनपुट को मान्य कर दूंगा; एक श्वेतसूची का उपयोग करके, रेगेक्स का उपयोग करके, int को कास्ट करना या जो भी सर्वोत्तम होता है। – jeroen

+0

% 00 --- http://ha.ckers.org/blog/20060914/php-vulnerable-to-null-byte-injection/ – user956584

उत्तर

4

मेरा मानना ​​है कि अपने कोड निर्देशिका ट्रावर्सल हमलों का प्रभाव पड़ सकता है - अगर किसी को एक fileid के रूप में "/../../foo" प्रदान की है, तो पथ "filename/../../foo.txt" है, जो एक वैध लक्ष्य हो सकता है किया जाएगा। देखें: http://en.wikipedia.org/wiki/Directory_traversal

मैं @jeroen साथ हूँ और @ shiplu.mokadd.im जो अपने इनपुट sanitizing पता चलता है - यह सोचते हैं fileid एक नंबर है तो intval() समारोह आप ठीक हो जाएगा:

$num = $_GET['fileid']; 
$num = intval($num); 
if($num == 0) { 
    echo "Invalid file ID: Not a number."; 
    exit; 
} else { 
    $fileName = 'filename' . $num . '.txt'; 
    if(!file_exists($fileName)) { 
     echo "Invalid file ID: Doesn't exist."; 
    } else { 
     // do something 
    } 
} 
संबंधित मुद्दे