之前我以為
PHP cURL
模擬請求也會有跨域限制的。
在之前設計介面的時候,需要權限存取的敏感資料(例如需要登入後查看的個人資料)。我是會做token
檢測的。
但是其他的普通介面可以直接取得的,只是添加了跨域頭,防止跨域調用,但是後面發現,透過PHP cURL
是能調用成功的。後面看了eechen
的回答。如下:
同源策略防止跨域是瀏覽器中的安全機制.而PHP的cURL可以看做一個命令行下的瀏覽器(客戶端),不受任何限制,就像你用file_get_contents下載互聯網上的東西一樣隨心所欲, 來源。
感覺這樣設計會不會有點不合理? JS Ajax
有跨域限制,PHP cURL
這種形式的則沒有跨域限制。為什麼當時確定跨域限制的時候,為什麼不把PHP cURL
形式的也當作跨域限制?
那這樣的形式又該如何去防止跨域呼叫呢?
之前想做網易雲客戶端的時候,有看過網易雲音樂
的接口,是透過CSRF_TOKEN
防止跨域調用的。
PS:話說這種方案,似乎能夠透過爬網頁取得CSRF_TOKEN
,再進行跨域呼叫吧?
另外,還有什麼方案能夠解決這個問題嗎?
============ 10-27 15:51 ==============
Sorry,我理解錯了...我以為是PHP cURL
做了什麼特殊處理。謝謝南小鳥
的回答,其實就是相當於直接訪問指定URL
,自然不會產生跨域問題...
那如果希望我的介面不能被外界存取呢?
這種應該就不需要設定什麼了。
設定CSRF_TOKEN
,但我查了一些CSRF_TOKEN的資料,貌似CSRF_TOKEN
主要是為了防止跨站請求偽造
,並不是用來做這個的信息... SESSIONID進行攻擊。
REFER。
JWT生成
Token,每次,請求需要帶上
Token(帶上用戶信息,進行權限控制等)。
Gforce的回答。
之前我以為疑問PHP cURL
模擬請求也會有跨域限制的。
token檢測的。
PHP cURL是能調用成功的。後面看了
eechen的回答。如下:
同源策略防止跨域是瀏覽器中的安全機制.而PHP的cURL可以看做一個命令行下的瀏覽器(客戶端),不受任何限制,就像你用file_get_contents下載互聯網上的東西一樣隨心所欲, 來源。
感覺這樣設計會不會有點不合理? JS Ajax有跨域限制,
PHP cURL這種形式的則沒有跨域限制。為什麼當時確定跨域限制的時候,為什麼不把
PHP cURL形式的也當作跨域限制?
解決方案
網易雲音樂的接口,是透過
CSRF_TOKEN防止跨域調用的。
PS:話說這種方案,似乎能夠透過爬網頁取得
CSRF_TOKEN,再進行跨域呼叫吧?
Sorry,我理解錯了...我以為是
PHP cURL做了什麼特殊處理。謝謝
南小鳥的回答,其實就是相當於直接訪問指定
URL,自然不會產生跨域問題...
這種應該就不需要設定什麼了。
設定CSRF_TOKEN
,但我查了一些CSRF_TOKEN的資料,貌似CSRF_TOKEN
主要是為了防止跨站請求偽造
,並不是用來做這個的信息... SESSIONID進行攻擊。
REFER。
JWT生成
Token,每次,請求需要帶上
Token(帶上用戶信息,進行權限控制等)。
Gforce的回答。
php curl 就等於你瀏覽器直接開啟一個網址,這樣當然不算跨域了
可以作一個介面驗證,例如利用 JWT