2012-03-12 53 views
1

在我的網站,我有一個search.php頁,使$.get請求頁面,如search_data.phpsearch_user_data.php如何保護處理Jquery數據的敏感PHP文件?

的問題是所有這些文件都位於我的公開的HTML文件夾中。

儘管有人可以瀏覽到www.mysite.com/search_user_data.php,但所處理的所有數據都已妥善地轉義和處理,但在專業級別上,即使將此文件放在公共範圍內也是不夠的。

我試着將敏感文件移動到我的web根目錄,但是由於jquery在URL中發送$.get請求和傳遞變量,這是行不通的。

有沒有人知道任何方法來牢固保護這些易受攻擊的頁面?

+0

@zerkms因此,每個存在的網頁上的所有文件都應該沒有隱私? – Norse 2012-03-12 09:30:39

+2

PHP不向公衆公開,因此是「服務器端語言」。它被執行,結果被輸出。 – Shea 2012-03-12 09:33:07

+0

@andrewjackson對,但我寧願不給任何人通過執行諸如'search_data.php?id = 394&pass = 493202'這樣的網址來玩弄網址。這不合理嗎? – Norse 2012-03-12 09:35:24

回答

2

你描述的是正常的。

你的PHP文件,這些文件在你的WWW目錄中,以便阿帕奇(或你喜歡的網絡服務器)可達可以讀取並處理它們。 如果你把它們移出去,你不能再接觸它們,所以沒有那種真正的選擇。

對AJAX的所有PHP文件後只是普通的PHP文件,很可能你的其他項目還包含PHP文件。對 ?他們沒有比服務器上的任何腳本更多或更少的風險。

確保你編程「乾淨」。在編寫你的php函數時考慮邪惡的請求,而不是在寫入之後。 正如您已經這樣做了:正確引用可能觸及數據庫或敏感功能的所有傳入輸入。

您可以在傳入值增加安全檢查,並創建一個自動化的電子郵件,如果你發現有人試圖邪惡的東西。所以在這種情況下你可能會收到警告。 但缺點是:您會經常收到警告,因爲有些公司會自動掃描網站以查找可能的錯誤。所以你也會收到這樣的掃描警告。

在編寫代碼爲「安全」,你可以頂上,你可能想在你的代碼中添加進行了檢測。這意味着只有當您的網站在訪問時作爲引用者提供時,您的PHP文件纔會作出反應。這足以阻擋80%的孩子。 但是缺點是:一些互聯網用戶根本沒有發送推薦人,一些代理人會過濾這個信息。(我個人會忽略它們,反正有一半的(www)互聯網會打破它們)

htaccess可以增加一層保護,你可以在PHP中做到最多,但它可能仍然對你有用:http://httpd.apache.org/docs/2.0/howto/htaccess.html

+0

我應該補充一點:當我發出ajax請求並且用戶在我的服務器上有一個帳戶時,我通常會傳遞一個用戶ID和一個密碼(以及一些鹽)的md5hash。那就是你可以很容易地看到ajax請求是否來自合法用戶。 – John 2012-03-12 10:02:03

2

您可以將您的UID頁面加載每次存儲並將其存儲在$ _SESSION [「UID」]。你做給這個UID爲JavaScript:

var uid = <?php print $_SESSION['uid']; ?>; 

然後你與你的GET請求通過它,把它比作你的$ _SESSION:

if($_GET['uid'] != $_SESSION['uid']) // Stop with an error message or send a forbidden header. 

如果它的確定,你所需要的。

它並不完美,因爲人可以請求的search.php並獲得當前的UID,然後請求其他頁面,但它可能是最好的解決方案。

+0

這是非常有用的謝謝你 – Norse 2012-03-12 10:22:16

+0

如果你用這個方法,但用'$ _POST'代替,那會更安全嗎? – Norse 2012-03-13 05:53:52

+0

不是。對新手來說很難,但對其他人來說很簡單。 – Alytrem 2012-03-13 07:16:28