PHP基礎之POST與GET

來源:互聯網
上載者:User
post 與 get區別

重點:

*.Post傳輸資料時,不需要在URL中顯示出來,而Get方法要在URL中顯示。
*.Post傳輸的資料量大,可以達到2M,而Get方法由於受到URL長度的限制,只能傳遞大約1024位元組.
*.Post顧名思義,就是為了將資料傳送到伺服器段,Get就是為了從伺服器段取得資料。而Get之所以也能傳送資料,只是用來設計告訴伺服器,你到底需要什麼樣的資料。Post的資訊作為http請求的內容,而Get是在Http頭部傳輸的。

詳細說明:

1、Get 通過 URL 請求來傳遞使用者的資料,將表單內各欄位名稱與其內容以成對的字串串連,置於 action 屬性所指程式的 url 後, 資料都會直接顯示在 url 上,就像使用者點擊一個連結一樣;

Post 方法通過 HTTP post 機制,將表單內各欄位名稱與其內容放置在 HTML 表頭(header)內一起傳送給伺服器端交由 action 屬效能所指的程式處理,該程式會通過標準輸入(stdin)方式,將表單的資料讀出並加以處理

2、 Get 方式需要使用 Request.QueryString 來取得變數的值。

Post 方式通過 Request.Form 來訪問提交的內容。
3、 Get 方式傳輸的資料量非常小,一般限制在 2 KB 左右,執行效率卻比 Post 方法好;

Post方式傳遞的資料量相對較大,它是等待伺服器來讀取資料,也有位元組限制,這是為了避免對伺服器用大量資料進行惡意攻擊。
建議:除非你肯定你提交的資料可以一次性提交,否則請盡量用 Post 方法

4、 Get 方式提交資料,會帶來安全問題,表單提交建議使用 Post 方法;(比如登陸頁面,通過 Get 方式提交資料時,使用者名稱和密碼出

現在 URL 上,如果頁面可以被緩衝或者其他人可以訪問客戶這台機器,就可以從記錄獲得該使用者的帳號和密碼)

Post 方法提交的表單頁面常見的問題是,該頁面如果重新整理的時候,會彈出對話方塊。建議:出於安全性考慮,最好使用 Post 提交資料

5、Get限制Form表單的資料集的值必須為ASCII字元;而Post支援整個ISO10646字元集。
6、Get是Form的預設方法。

HTTP協議裡面,四個表示操作方式的動詞:GET、POST、PUT、DELETE。它們分別對應四種基本操作:
GET用來擷取資源
POST用來建立資源(也可以用於更新資源)
PUT用來更新資源
DELETE用來刪除資源。

PHP通過post/get獲得資料會自動轉義

根據伺服器的不同配置,在通過post、get獲得資料時可能出現一些類似於 ',"等特殊符合會被轉義。這個問題主要由PHP魔術引號引起。PHP魔術引號包括 magic_quotes_gpc,magic_quotes_runtime,magic_quotes_sybase。

magic_quotes_gpc 總結如下:

1. 對於magic_quotes_gpc=on的情況,

我們可以不對輸入和輸出資料庫的字串資料作

addslashes()和stripslashes()的操作,資料也會正常顯示。

如果此時你對輸入的資料作了addslashes()處理,

那麼在輸出的時候就必須使用stripslashes()去掉多餘的反斜線。

2. 對於magic_quotes_gpc=off 的情況

必須使用addslashes()對輸入資料進行處理,但並不需要使用stripslashes()格式化輸出

因為addslashes()並未將反斜線一起寫入資料庫,只是協助mysql完成了sql語句的執行。

關於php注入中的magic_quotes_gpc magic_quotes_gpc = on

大家都知道php設定檔php.in ,如果裡面的magic_quotes_gpc 配置被開啟 那就是magic_quotes_gpc = on 懂點php的人都知道。

那我們就要對數值型的欄位注入。

 1  2if ( isset($_POST["f_login"] ) ){ 3//串連資料庫 4$t_strUid = $_POST["f_uid"]; 5$t_strPwd = $_POST["f_pwd"]; 6$t_strSQL = "SELECT * FROM tbl_users WHERE uid=$t_strUid AND password = '$t_strPwd'      LIMIT 0,1"; 7if ( $t_hRes = mysql_query($t_strSQL) ){ 8// 成功查詢 9          }10       }11 ?>

 1<html> 2<head> 3<title>sample testtitle> 4head> 5<body> 6<form method=post action=""> 7             User ID: <input type="text" name="username" size=30><br> 8             Password: <input type=text name="userpwd" size=30><br> 9<input type="submit" name="user_login" value="登入">10form>11body>

如果正確輸入:

SELECT * FROM tbltable_users WHERE userid=admin AND password = 'admin' LIMIT 0,1

 如果攻擊者在username處,輸入:admin OR 1 =1 #,則注入的sql語句如下:

SELECT * FROM table_users WHERE userid=admin OR 1 =1 # AND password = 'admin' LIMIT 0,1

下面就可以進行注入了.

在php.ini 中把display_errors 選項設為display_errors = off 這樣就可以防止.

magic_quotes_runtime
如果開啟的話,大部份從外部來源取得資料並返回的函數,包括從資料庫和文字檔,所返回的資料都會被反斜線轉義。該選項可在啟動並執行時改變,在 PHP 中的預設值為 off。

magic_quotes_sybase
如果開啟的話,將會使用單引號對單引號進行轉義而非反斜線。此選項會完全覆蓋 magic_quotes_gpc。如果同時開啟兩個選項的話,單引號將會被轉義成 ”。而雙引號、反斜線 和 NULL 字元將不會進行轉義。

由於不同伺服器的配置不同,需要在代碼中用get_magic_quotes_gpc() 檢測伺服器配置。

1if(isset($_POST['c'])){2$s = $_POST['c'];3if(get_magic_quotes_gpc())4$s = stripslashes($s);//stripslashes() 函數刪除由 addslashes() 函數添加的反斜線。5//do something6 }

以上就介紹了PHP基礎之POST與GET,包括了方面的內容,希望對PHP教程有興趣的朋友有所協助。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.