您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關(guān)php怎么實現(xiàn)禁止跨域訪問的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
php實現(xiàn)禁止跨域訪問的方法是,判斷HTTP Referer,如果沒有Referer或者Referer是在非本地訪問的,那么就禁止訪問。
本文操作環(huán)境:windows10系統(tǒng)、php 7.3、thinkpad t480電腦。
我們可以通過如下兩種方式來實現(xiàn)禁止跨域訪問。
方法一:判斷 HTTP Referer
HTTP Referer是header的一部分,當(dāng)瀏覽器向web服務(wù)器發(fā)送請求的時候,一般會帶上Referer,告訴服務(wù)器我是從哪個頁面鏈接過來的,服務(wù)器以此可以獲得一些信息用于處理。
在 post 請求 “文件” 或 “函數(shù)” 的最開始地方加入判斷 HTTP Referer:以下為 php 代碼,不語言做法相同。
沒有 Referer ,屬于直接訪問連接。如 http://www.a.com/ajax.php 返回 error
有 Referer ,但不是本站訪問,Referer 不包含 a.com domain。返回 error
// 如果(沒有 Referer 或者 Referer 非本地訪問的)return 'error' 或 die() 程序結(jié)束 if(!isset($_SERVER['HTTP_REFERER']) || !strstr($_SERVER['HTTP_REFERER'], 'http://www.a.com/')){ echo "error"; die(); }
方法二:服務(wù)器端禁止跨域訪問
Nginx禁止跨域訪問某個PHP文件
location ~ \.php$ { ... #新增代碼 start ------------------------------------- # 假設(shè) ajax.php 文件路徑是 /includes/ajax.php 和網(wǎng)站域名是 www.a.com # 新增一個變量 $nolocal 值為 1 set $nolocal 1; #下面開始判斷,不是 POST 或者請求路徑不是 ajax.php 的路徑或者請求來源屬于本站域名時,都設(shè)為 0 #因為 nginx 不支持多條件判斷,這里用三個 if ~ if ($request_method != POST) { set $nolocal 0; } if ($request_uri != /includes/ajax.php) { set $nolocal 0; } if ($http_referer ~* "www.a.com") { set $nolocal 0; } #經(jīng)過上面的篩選,值是 1 的,也就是本站外來源POST ajax.php 數(shù)據(jù)過來,直接返回 403 拒絕處理 #這樣,其他來源的請求就浪費不了你的PHP進程了。 if ($nolocal) { return 403; } #新增代碼 end ------------------------------------- ... }
感謝各位的閱讀!關(guān)于“php怎么實現(xiàn)禁止跨域訪問”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。