之前我以為
PHP cURL
模擬請求也會有跨域限制的。
在之前設計接口的時候,需要權限訪問的敏感數(shù)據(jù)(例如需要登錄后查看的個人數(shù)據(jù))。我是會做token
檢測的。
但是其他的普通接口可以直接獲取的,只是添加了跨域頭,防止跨域調用,但是后面發(fā)現(xiàn),通過PHP cURL
是能調用成功的。后面看了eechen
的回答。如下:
同源策略防止跨域是瀏覽器中的安全機制.而PHP的cURL可以看做一個命令行下的瀏覽器(客戶端),不受任何限制,就像你用file_get_contents下載互聯(lián)網(wǎng)上的東西一樣隨心所欲, 來源。
感覺這樣設計會不會有點不合理?JS Ajax
有跨域限制,PHP cURL
這種形式的則沒有跨域限制。為什么當時確定跨域限制的時候,為什么不把PHP cURL
形式的也作為跨域限制?
那這樣的形式又應該如何去防止跨域調用呢?
之前想做網(wǎng)易云客戶端的時候,有看過網(wǎng)易云音樂
的接口,是通過CSRF_TOKEN
防止跨域調用的。
PS:話說這種方案,貌似能夠通過爬網(wǎng)頁獲取CSRF_TOKEN
,再進行跨域調用吧?
另外,還有什么方案能夠解決這個問題嗎?
============ 10-27 15:51 ==============
Sorry,我理解錯了...我以為是PHP cURL
做了什么特殊處理。謝謝南小鳥
的回答,其實就是相當于直接訪問指定URL
,自然不會產生跨域問題...
那如果希望我的接口不能被外界訪問呢?
這種應該就不需要設置什么了。
設置CSRF_TOKEN
,但我查了一些CSRF_TOKEN的資料,貌似CSRF_TOKEN
主要是為了防止跨站請求偽造
,并不是用來做這個的...防止攜帶你的授權信息cookie:SESSIONID
進行攻擊。
檢查REFER
。
還有什么方法呢?
目前我打算用JWT
生成Token
,每次,請求需要帶上Token
(帶上用戶信息,進行權限控制等)。
感覺留坑了,Sorry。也感謝Gforce
的回答。
認證高級PHP講師