PHP 設定多網域名稱允許跨域訪問

2021-08-29 20:38:05 字數 1233 閱讀 2220

跨域是web開發中常見的問題,解決跨域的方法也有很多。本文以cors(跨域資源訪問)方式和大家一起來了解一下針對php語言,如何設定允許多網域名稱訪問。

首先,我們還需要對一些基礎知識有了解。

(1)伺服器變數

針對php語言而言,伺服器變數儲存在$_server陣列中,在這個陣列中有乙個特殊的鍵值:http_origin。這個鍵只在跨域的時候才會存在值,同源時為空字串。

(2)響應頭設定允許某網域名稱訪問:access-control-allow-origin

通過php的header函式可以設定允許某網域名稱跨域訪問,形式為header('access_control_allow_origin:*')。

ok,下面直接上**

);$origin = isset($_server['http_origin']) ? $_server['http_origin'] : ''; //跨域訪問的時候才會存在此欄位

if (in_array($origin, $allow_origin)) elsenote:

有一點要特別注意:通過介面工具請求介面時$_server['http_origin']變數也為空字串,如果你的服務外網可以訪問,那你一定要注意了。

***************=20181107 更新***************

背景:11月2號服務上線,上線之後發現郵件組裡收到了一些亂七八糟的郵件而且資料庫裡也插入了一些亂碼的資料。可以判定,後端服務被攻擊了。

追查:檢視線上機器日誌,發現日誌中記錄的**網域名稱均為空,之前做的策略無效。後端web server是nginx,在經過外網到內網流量排程、接入層**之後,業務中無法取到$_server['http_origin']變數。

解決:針對這種情況,想了以後幾種解決方案:

(1)在nginx中配置跨域

(2)做郵箱(手機號)驗證碼校驗

(3)前端做拖圖校驗

第一種方案實踐不可行,不知道是不是配置的問題,不起作用。

第三種方案需要使用到php的gd庫、redis快取以及開發量大,也棄用。

經過與pm fe ue商定,最終採用手機號進行驗證碼校驗。

經過兩天的開發、測試、上線,目前線上尚未發現之前的攻擊問題。

note:後端服務介面不可能完全避免被刷,可做的就是增加黑客的攻擊成本。

PHP介面允許ajax跨域訪問設定方法

背景 h5開發中使用ajax呼叫資料介面,如果介面檔案不在同網域名稱下會提示跨域錯誤 no access control allow origin header is present on the requested resource.解決方法 通過設定php介面檔案的 access control...

Ngnix 配置允許多個網域名稱跨域訪問

在nginx上的解決方案是配置access control allow origin來解決,但是此引數只允許配置單個網域名稱 add header access control allow origin baidu.com 或者 add header access control allow ori...

nginx允許跨域訪問

1瀏覽器是禁止跨域訪問 nginx access controller allow origin 頭資訊 告訴瀏覽器 允許跨站訪問 設定誇域訪問 這是執行跨域訪問的網域名稱 access controller allow origin 設定允許跨域訪問的方法 access controller al...