2014-09-12 48 views
2

由於安全原因,我們需要禁用非盈利網站的php/mysql,因爲它有很多漏洞。這是一個小型站點,所以我們只想重建沒有數據庫的站點並繞過管理頁面的漏洞。查詢php字符串中的字符串,從目錄中的文件中提取值

該網站只需要保持活力,並保持休眠狀態。我們不需要在將來更新網站,所以我們正在尋找一個靜態設計。

我們當前的URL結構是這樣的,它在從數據庫中提取值的url中具有查詢字符串。

例如artist.php?id = 2

我正在尋找一個簡單快捷的方式改變artist.php,所以不是從數據庫中提取值,而是隻包含來自平面html文件的數據。

artist.php?id=1 = fetch data from /artist/1.html 
artist.php?id=2 = fetch data from /artist/2.html 
artist.php?id=3 = fetch data from /artist/3.html 
artist.php?id=4 = fetch data from /artist/4.html 
artist.php?id=5 = fetch data from /artist/5.html 

這樣做的原因是我們需要保留用於SEO目的的URL結構。所以我不想爲公衆使用html文件。

我需要什麼基本的PHP代碼來實現這個目標?

+0

我想你想禁用PHP?然後這個問題需要更新(「我需要什麼基本的PHP代碼來實現這個目標?」) ^^爲了達到這個目的 - 是否可以使用htaccess?如果是 - 您可以使用htaccess規則重定向。 – 2014-09-12 14:13:21

+0

對不起,可能沒有做好解釋自己的工作。惡意軟件黑客正在使用該軟件來澄清該網站並向其中注入代碼,該軟件中存在某些問題/某些漏洞。我們認爲這很可能是受損的管理部分,並允許使用將代碼注入網站。我自願提供的非營利組織並沒有任何預算聘請程序員,所以我只是想用我提出的方法讓所有事情都「表面上」起作用,但要消除所有管理和惡意軟件漏洞。 – 2014-09-12 14:36:37

回答

0

要做到這一點完全按照自己的要求會是這樣的:

$id = intval($_GET['id']); 
$page = file_get_contents("/artist/$id.html"); 

如果$id === 0日除查詢參數中的數字外,還有其他內容。你也可以在陣列中的藝術家的信息:

// datafile.php 
return array(
    1 => "Artist 1 is this and that", 
    2 => "Artist 2..." 
) 

,然後在artist.php

$data = include('datafile.php'); 
if (array_key_exists($_GET['id'], $data)) { 
    $page = $data[$_GET['id']]; 
} else { 
    // 404 
} 
+0

感謝您的答案,代碼的第一段做了工作。我真的不知道關於PHP的任何知識,只知道回聲,可用性以及php的開始和結束標記。直到我在第三行放置echo $頁面時,第一個段落才真正起作用。 – 2014-09-12 14:50:19

+0

@AbdulKarim很高興聽到它的幫助!如果解決了您的問題,請接受答案。 – Schlaus 2014-09-12 14:54:42

0

HTML不是你最好的選擇,但它的表弟是靜態數據文件的最佳選擇。

讓我向您介紹XML! (到PHP parser的文檔)

XML與結構類​​似於HTML,但它用於存儲數據而不是網頁。

如果不是你的html頁面已經完成,你只需要爲他們服務,你可以使用URL從網絡服務器重寫(如果你使用Apache,見mod_rewrite

最後一個純PHP解決方案(我不推薦)

<?php 

//protect from displaying unwanted webpages or other vulnerabilities: 
//we NEVER trust user input, and we NEVER use it directly without checking it up. 
$valid_ids = array(1,2,3,4,5 /*etc*/); 
if(in_array($_REQUEST['id'])){ 
    $id = $_REQUEST['id']; 
} else { 
    echo "missing artist!"; die; 
} 
//read the html file 
$html_page = file_get_contents("/artist/$id.html"); 

//display the html file 
echo $html_page; 
+0

感謝您的解決方案,html文件已經寫出來,所以現在改變它們有點太晚了。但是 - 我要感謝您的貢獻,並且您還幫助我調試了Schlaus的代碼爲什麼不適合我,因爲他錯過了回聲。 – 2014-09-12 14:51:52

+0

@AbdulKarim記得儘快回覆對你有用的每一個答案,並且接受解決問題的答案。但是,如果您在接受前至少等待24小時會更好,因爲您可能會收到更好的答案。 – 2014-09-12 14:53:27

+0

謝謝我試着upvote你的答案,但它表示我njeed至少15代表。 – 2014-09-12 15:01:07