2009-02-19 101 views
1

對於一個學校項目,我必須使用PHP生成一個網站,允許用戶生成自己的文章或評論新聞或其他文章。我想知道如何最好使用GET函數來顯示包含文件中的內容,並對其他包含文件使用get函數,例如開發人員(我)添加到網站的登錄頁面和其他內容,而不是作爲文章但作爲鏈接等任何人有任何建議或良好的教程,他們可以張貼。如何從PHP網站開始?

回答

1

你肯定會想 前消毒任何通過GET參數來在包括文件。通常通過檢查有效字符來完成此操作,並且由於它直接從文件系統調用文件,我通常會手動輸入有效的導航操作。這不是最優雅的解決方案,但通常是小應用程序最簡單和最安全的解決方案。

我通常爲此使用大小寫開關,但我也看到人們也使用奇特的正則表達式。

線沿線的東西:

if (isset($_GET['nav'])) { 
    switch ($_GET['nav']) { 
     case 'login': 
     case 'logout': 
     case 'article': 
      include($_GET['nav'] . '.php'); 
      break; 
     default: 
      die('Invalid nav parameter'); 
      break; 
    } 
} 
1

輪已經發明,測試,推出了一百萬英里:WordPress

+0

我們都在想它...... – cole 2009-02-19 01:06:28

1

這是我用什麼...

function safeIncludeFile($path) 
    { 

     $regex = '/[a-z0-9\-_]+/i'; // match only a to z, 0 to 9 and the minus and unscore character. case insensitive. adjust to accommodate your file naming schema. 

     return preg_match($regex, $path); 

    } 

然後做這樣的事情

if (isset($_GET['page']) && safeIncludeFile($_GET['page'])) { 
    require PATH_TO_INCLUDES . $_GET['page'] . '.inc.php'; 

} 
0

你也可以有一個充當白名單的陣列

$allowedIncludes = array('home', 'about', 'news'); 

,然後檢查請求的頁面在那裏

if(in_array($_GET['page'], $allowedIncludes)){ 
    include $_GET['page'].'.php'; 
}else{ 
    die('Forbidden!'); 
} 

因此,你不必爲「案例」添加到您的交換機每次你添加的東西。