到目前爲止,我所見過的大部分答案都是以PHP的形式出現的,但實際上這並不是語言特定的。到目前爲止給出的答案都是從PHP的角度出發的,用來訪問信息的方法因語言的不同而不同,但數據在URL中的格式(稱爲查詢字符串)仍將保留相同(例如:page.ext?key1 =值& key2 =值& ...)。
我不知道你的技術背景或知識,所以請原諒我...
有一個網頁,以提供數據返回給Web服務器的兩種不同的方法。這些被稱爲POST或GET方法。還有一些其他的,但是在處理普通用戶時,這些都不應該用於任何網頁設計。POST方法不可見地發送到服務器,用於'上傳'數據,而GET方法作爲URL中的查詢字符串對用戶是可見的,僅用於從字面上'獲取'信息。
並不是所有的網站都遵循這個經驗法則,但是爲什麼會有原因。例如,一個站點可能會專門用POST來繞過代理服務器或瀏覽器的緩存,或者因爲它們使用雙字節語言,並且由於編碼轉換而嘗試執行GET時可能會導致問題。
關於這兩種方法以及何時使用它們的一些資源...
http://www.cs.tut.fi/~jkorpela/forms/methods.html http://weblogs.asp.net/mschwarz/archive/2006/12/04/post-vs-get.aspx http://en.wikipedia.org/wiki/Query_string
現在,從嚴格的PHP位置,現在有3個不同的陣列可以使用來獲得網頁已發送回服務器的信息。你有你的處置......
- $ _ POST [「鍵名」],搶僅從POST方法的信息
- $ _GET [「鍵名」],從GET只抓取的信息方法
- $ _REQUEST ['keyname'],允許您獲取可能已提交的POST,GET和任何COOKIE信息。排序的一種方式,特別是在您不知道哪個頁面可能用於提交數據的情況下。
通過直接使用$ _REQUEST方法不要馬虎。除非像上面提到的$ _REQUEST變量那樣,否則不要使用它。當涉及到安全性時,你想嘗試使用'拒絕所有,只允許x,y,z'的方法。只查找您知道自己的網站將發送的數據,只查找您期望的組合,並在使用之前清除所有信息。例如..
- 對任何通過上述方法傳遞的東西都不要做eval()。我從來沒有見過這樣做,但這並不意味着人們沒有嘗試或做過。
- 從不直接與數據庫不清洗他們(研究SQL注入攻擊,如果你不熟悉他們)使用的信息
這是迄今爲止不是結束一切,待所有PHP安全,但我們不是爲了這個。如果你想知道更多的線,那麼這是另一個問題。
希望這可以幫助,並隨時提出任何問題。
這是錯誤的。 「?」不是服務器的「另一個角色」。服務器將「?」上的URL分開(如果有的話)。前面的部分是請求的文件,後面的部分是「查詢字符串」,作爲QUERY_STRING環境變量呈現給CGI。 – 2009-02-22 07:14:31
我應該說,一般*的服務器*不應該專門處理它。在PHP(以及大多數其他Web框架)的情況下,提供了一些處理,因爲我繼續討論。這個問題沒有在任何地方指定CGI。 – Edmund 2009-02-22 07:46:21
服務器可能不是特殊的,但它是HTTP標準的一部分,而不是PHP。 – 2009-02-22 08:34:06