首頁  >  文章  >  後端開發  >  javascript - PHP cURL或類似的客戶端請求不算跨域,會不會不安全?有什麼防範措施?

javascript - PHP cURL或類似的客戶端請求不算跨域,會不會不安全?有什麼防範措施?

WBOY
WBOY原創
2016-12-01 01:27:401521瀏覽

之前我以為PHP cURL模擬請求也會有跨域限制的。

疑問

在之前設計介面的時候,需要權限存取的敏感資料(例如需要登入後查看的個人資料)。我是會做token檢測的。

但是其他的普通介面可以直接取得的,只是添加了跨域頭,防止跨域調用,但是後面發現,透過PHP cURL是能調用成功的。後面看了eechen的回答。如下:

同源策略防止跨域是瀏覽器中的安全機制.而PHP的cURL可以看做一個命令行下的瀏覽器(客戶端),不受任何限制,就像你用file_get_contents下載互聯網上的東西一樣隨心所欲, 來源。

感覺這樣設計會不會有點不合理? JS Ajax有跨域限制,PHP cURL這種形式的則沒有跨域限制。為什麼當時確定跨域限制的時候,為什麼不把PHP cURL形式的也當作跨域限制?

那這樣的形式又該如何去防止跨域呼叫呢?

解決方案

  1. 之前想做網易雲客戶端的時候,有看過網易雲音樂的接口,是透過CSRF_TOKEN防止跨域調用的。
    PS:話說這種方案,似乎能夠透過爬網頁取得CSRF_TOKEN,再進行跨域呼叫吧?

  2. 另外,還有什麼方案能夠解決這個問題嗎?

期待大家的解答,謝謝!

============ 10-27 15:51 ==============

Sorry,我理解錯了...我以為是PHP cURL做了什麼特殊處理。謝謝南小鳥的回答,其實就是相當於直接訪問指定URL,自然不會產生跨域問題...

那如果希望我的介面不能被外界存取呢?

在內網

這種應該就不需要設定什麼了。

在外網

  1. 設定CSRF_TOKEN,但我查了一些CSRF_TOKEN的資料,貌似CSRF_TOKEN主要是為了防止跨站請求偽造,並不是用來做這個的信息... SESSIONID進行攻擊。

  2. 檢查

    REFER

  3. 還有什麼方法呢?

目前我打算用

JWT生成Token,每次,請求需要帶上Token(帶上用戶信息,進行權限控制等)。

感覺留坑了,Sorry。也感謝

Gforce的回答。

回覆內容:

之前我以為

PHP cURL模擬請求也會有跨域限制的。

疑問

在之前設計介面的時候,需要權限存取的敏感資料(例如需要登入後查看的個人資料)。我是會做

token檢測的。

但是其他的普通介面可以直接取得的,只是添加了跨域頭,防止跨域調用,但是後面發現,透過

PHP cURL是能調用成功的。後面看了eechen的回答。如下:

同源策略防止跨域是瀏覽器中的安全機制.而PHP的cURL可以看做一個命令行下的瀏覽器(客戶端),不受任何限制,就像你用file_get_contents下載互聯網上的東西一樣隨心所欲, 來源。

感覺這樣設計會不會有點不合理? JS Ajax有跨域限制,PHP cURL這種形式的則沒有跨域限制。為什麼當時確定跨域限制的時候,為什麼不把PHP cURL形式的也當作跨域限制?

那這樣的形式又該如何去防止跨域呼叫呢?

解決方案

  1. 之前想做網易雲客戶端的時候,有看過

    網易雲音樂的接口,是透過CSRF_TOKEN防止跨域調用的。 PS:話說這種方案,似乎能夠透過爬網頁取得
    CSRF_TOKEN,再進行跨域呼叫吧?

  2. 另外,還有什麼方案能夠解決這個問題嗎?

期待大家的解答,謝謝!

============ 10-27 15:51 ==============

Sorry,我理解錯了...我以為是

PHP cURL做了什麼特殊處理。謝謝南小鳥的回答,其實就是相當於直接訪問指定URL,自然不會產生跨域問題...

那如果希望我的介面不能被外界存取呢?

在內網

這種應該就不需要設定什麼了。

在外網

  1. 設定CSRF_TOKEN,但我查了一些CSRF_TOKEN的資料,貌似CSRF_TOKEN主要是為了防止跨站請求偽造,並不是用來做這個的信息... SESSIONID進行攻擊。

  2. 檢查

    REFER

  3. 還有什麼方法呢?

目前我打算用

JWT生成Token,每次,請求需要帶上Token(帶上用戶信息,進行權限控制等)。

感覺留坑了,Sorry。也感謝

Gforce的回答。

php curl 就等於你瀏覽器直接開啟一個網址,這樣當然不算跨域了

可以作一個介面驗證,例如利用 JWT

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn