# Http Method(Http方法)介紹 和 跨來源資源共用(CORS) 在瀏覽網頁時,其實會用各種Http方法去與Web伺服器取資料或是送資料,最常見的方法是Get;其次則是Post 兩者對一般人來說最大的差異就是 **GET會在網址列上顯示參數,Post不會** 但Http的方法其實不只Get和Post,以下有更多說明 --- ## HTTP/1.1 協定 HTTP定義了八種方法,以不同方式操作指定的資源: - OPTIONS:這個方法可使伺服器傳回該資源所支援的所有 HTTP 請求方法。 就是詢問這個主機提供哪些 Http 方法讓人使用,但也可以被惡意攻擊者**刺探敏感資訊**,通常弱點掃描檢測到都會**建議關閉此方法**。 - HEAD:可以在**不必傳輸全部內容**的情況下,就可以取得其中「關於該資源的資訊」(元資訊或稱元資料)。 以 html 來說,都有一塊<head>標題或css等資訊</head>,HEAD就是只取這一塊資料。 - GET:向指定的資源發出「顯示」請求。使用 GET 方法應該只用在讀取資料,而不應當被用於產生「副作用」的操作中。 - POST:向指定資源提交資料,請求伺服器進行處理(例如提交表單或者上傳檔案)。資料被包含在請求本文中。 - PUT:向指定資源位置上傳其最新內容。 - DELETE:請求伺服器刪除 Request-URI 所標識的資源。 - TRACE:回顯伺服器收到的請求,主要用於測試或診斷。 - CONNECT:HTTP/1.1 協定中預留給能夠將連線改為管道方式的代理伺服器。通常用於 SSL 加密伺服器的連結(經由非加密的 HTTP 代理伺服器)。 --- ## 先導請求 Preflighted requests javascript允許向目前的網站或外部網站傳送資料,傳送請求到外部網站時,可能會攜帶使用者資料,所以要先進行 **先導請求 Preflighted requests** 先導請求會先以 HTTP 的 OPTIONS 方法送出請求到另一個網域,確認後續真實請求是否可安全送出。 當符合以下其中一種條件時,會送出先導請求: 1.使用非簡單方法(GET, HEAD, POST)。 2.使用以下類型除外的標頭:Accept, Accept-Language, Content-Language,Content-Type 非為下列 application/x-www-form-urlencoded, multipart/form-data, 或 text/plain 其中一種(上述類型為簡單標頭,且皆不區分大小寫)。例如 POST 請求連帶的資料是 application/xml 或 text/xml 的 XML 類型資料,那麼先導請求就會先送出。 3.請求中有自訂義標頭,例如自訂義一個 X-PINGOTHER 標頭。 --- ## CORS 跨來源資源共用(CORS) 是有關於資訊安全的議題,我們可以想一個情況 如果javascript可以任意的修改自己的網頁,也可以在背景執行且隨意地從別的網站擷取資料。 那就可以做出以下攻擊 1. 做一個 網頁,用 javascript ,擷取 www.網路銀行.com/輸入帳號密碼的畫面 並且貼到我的網頁上 2. 輸入帳號密碼按下送出後,把密碼傳回自己的資料庫收藏 3. 把網址傳給其他人 4. 如果沒注意到網址不一樣,輸入了正確的帳號密碼,那我就取得正確的帳號密碼了 這樣子用 javascript 輕易地做一個完全相同的假網站,誘使沒注意到網址不同的使用者輸入帳號密碼,幾乎是只要改網址就可以立刻做出多個假網站。為了防止這種情況,網站伺服器需要設定允許 CORS ,才能授權讓跨網站的 javascript 取得資訊。 --- ## 在 IIS 上設定允許 CORS 跨站請求 * 選擇要開啟的 IIS 站台 * 點 HttpResponseHeader(Http回應標頭) 然後有2類情況,如果希望所有網站都可以跨站請求,要使用這個 **Access-Control-Allow-Origin** 共有2種值: ``` * 所有網站都可以連 uri 指定的網站才能連 (不允許多組) ``` --- ## X-Frame-Options 如果不要用 javascript,也有另一個 iframe 的方式可以擷取其他網頁,假設不希望自己的網頁被別人用iframe擷取,或是只希望自己的網站可以被 如果要設定同網站才能連,要使用這個 **X-Frame-Options** 共有三種值: - DENY 表示文件無論如何都不能被嵌入到 frame 中,即使是自家網站也不行。 - SAMEORIGIN 唯有當符合同源政策下,才能被嵌入到 frame 中。 - ALLOW-FROM uri 唯有列表許可的 URI 才能嵌入到 frame 中。 --- ## 參考資料 * CORS Part IV. Web Application Security https://docs.spring.io/spring-security/site/docs/4.2.x/reference/html/cors.html * 跨站 HTTP 請求 HTTP access control (CORS) [*https://developer.mozilla.org/zh-TW/docs/HTTP/Access_control_CORS*](https://developer.mozilla.org/zh-TW/docs/HTTP/Access_control_CORS) * [HTTP]Http GET、POST Method 比較 [*https://dotblogs.com.tw/marcus116/archive/2011/05/29/26428.aspx*](https://dotblogs.com.tw/marcus116/archive/2011/05/29/26428.aspx) * 超文本傳輸協定 [*https://zh.wikipedia.org/wiki/*](https://zh.wikipedia.org/wiki/%E8%B6%85%E6%96%87%E6%9C%AC%E4%BC%A0%E8%B[E%93%E5%8D%8F%E8%AE%AE)*超文本傳輸協定* * 實作 Cross-Origin Resource Sharing (CORS) 解決 Ajax 發送跨網域存取 Request* [*http://blog.toright.com/posts/3205/*](http://blog.toright.com/posts/3205/) * IIS 設定啟用 CORS (Cross-Origin Resource Sharing) - 跨來源資源共用* https://blog.yowko.com/2018/02/iis-enable-cors.html * X-Frame-Options 回應標頭* https://developer.mozilla.org/zh-TW/docs/Web/HTTP/X-Frame-Options * HTTP Headers 的資安議題 (1)* https://devco.re/blog/2014/03/10/security-issues-of-http-headers-1/ * 一篇文章帶你詳解HTTP 協議(網絡協議篇一) https://www.huaweicloud.com/articles/736eef13dc3e4d73b10d155557bb93c5.html ###### tags: `資安`
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.