2010-09-24 61 views
1

我對PHP很新穎,還沒有找到真正實用的書,它描述瞭如何在真實世界的情況下以最好的方式在PHP中處理事物,並且具有安全性心裏。即使搜索谷歌,大多數文章只是基本的,並不是真實世界的例子。我只是沒有看到PHP網站的整體結構和流程。什麼是從登錄或表單帖子處理PHP的最佳方式

我採用的是例如,如果用戶填寫了ABC.php中的登錄表單,數據將發佈到XYZ.php?do = processLogin。在XYZ中,對於「do」變量,我有一個「IF ISSET」,如果它被設置,那麼它會輸入一個switch語句來處理登錄或註銷等,然後將它們重定向回適當的頁面。如果「do」變量沒有設置,它們會被轉儲回登錄頁面。

我見過很多例子,其中的數據發佈到同一個腳本,但是幾乎任何時候我正在做任何形式的表單處理或諸如登錄註銷或帳戶編輯之類的操作,我都發布到完全獨立PHP文件負責這項工作,然後將用戶重定向回來。

是這種方式次優,異常,愚蠢?有人可以給我一些建議,或者鏈接一些與這個主題相關的好例子嗎?我最近在想如何找到一些用PHP編寫的開源應用程序,這樣我就可以查看經驗豐富的PHP編碼人員如何構建他們的網站,所以如果任何人有一個可以看的人的例子,那也是值得讚賞的。

在此先感謝!

回答

1

你需要細心的第一條規則是永遠,永遠信任用戶的輸入,尤其是在你的GET/POST /請求超變量。

這一切都取決於你想要做的事情的範圍,但是一般你只想從你的$_POST只想把你想要的變量放到你自己的變量中,比如$data(即$ data ['' do'] = $ _POST ['do']),這樣你就不會有額外的變量在邊界內隱藏。

您需要做的另一件事是確保您的用戶輸入正確地對其應用程序進行了消毒。如果您正在爲博客進行輸入 - 您想刪除將以HTML解析的內容。如果您正在進行登錄,您希望禁止用戶輸入SQL注入攻擊,以允許他們以任何人的身份登錄。

現在,使用一箇中央文件委託所有其他任務實際上是一種很好的做法。你可以看到它全部結束。花一些時間考慮調用所有函數的最佳方式 - 我個人將變量檢查和請求委託放在一個頁面中。它減少了進入系統的入口點數量,使安全更容易鎖定(因爲您不必看管多個文件)。

使用它來委託你請求的是什麼樣的頁面並不會改變設置。

在互聯網上的論壇經常使用這種模式,以確保您不會保留雙重張貼。但這並不涉及那些抨擊「提交」的人。

有更好的方法來處理重複提交。首先,您應該在該頁面上使用javascript單擊後禁用您的提交按鈕,並且只是拋棄一些讓用戶知道它正在加載的東西。然後,您可以使用此方法將重定向發送到「可以使用」頁面(或失敗頁面)。下一步可能是使用cookie或生成表單ID數據來跟蹤正在發送的提交內容。例如,當用戶打開一個新頁面時,帖子ID 123是打開的,如果他們一再提交,它會失敗,因爲帖子123已經發送。

我會建議比我的建議更深入研究這一點。 http://wiki.apache.org/struts/DataEntryForm

相關問題