<?php
// 獲取引導(dǎo)用戶訪問(wèn)當(dāng)前頁(yè)面的頁(yè)面的 URL
$referer = isset($_SERVER[‘HTTP_REFERER’]) ? $_SERVER[‘HTTP_REFERER’] : ”;
// 檢查 referer 是否來(lái)自百度
$baidu_domains = [‘baidu.com’, ‘www.baidu.com’, ‘m.baidu.com’];
$is_from_baidu = false;
foreach ($baidu_domains as $domain) {
if (strpos($referer, $domain) !== false) {
$is_from_baidu = true;
break;
}
}
// 如果來(lái)自百度,則進(jìn)行屏蔽處理
if ($is_from_baidu) {
// 可選擇輸出一條消息并終止腳本執(zhí)行
header(‘HTTP/1.1 403 Forbidden’);
echo ‘訪問(wèn)被禁止:您來(lái)自百度的跳轉(zhuǎn)訪問(wèn)不被允許。’;
exit();
// 或者重定向到其他頁(yè)面
// header(‘Location: http://example.com/some-other-page’);
// exit();
}
// 如果不是來(lái)自百度,繼續(xù)正常執(zhí)行你的腳本
echo ‘歡迎訪問(wèn)!’;
?>
代碼說(shuō)明
-
?獲取 Referer?:
- 使用?
$_SERVER['HTTP_REFERER']
?獲取引導(dǎo)用戶訪問(wèn)當(dāng)前頁(yè)面的頁(yè)面的 URL。
- 使用?
-
?檢查 Referer?:
- 定義一個(gè)包含百度域名的數(shù)組?
$baidu_domains
。 - 使用?
strpos
?函數(shù)檢查 Referer 是否包含百度域名。
- 定義一個(gè)包含百度域名的數(shù)組?
-
?處理屏蔽邏輯?:
- 如果檢測(cè)到 Referer 來(lái)自百度,則設(shè)置 HTTP 狀態(tài)碼為 403 并輸出一條禁止訪問(wèn)的消息,然后終止腳本執(zhí)行。
- 你也可以選擇重定向到其他頁(yè)面,而不是直接終止訪問(wèn)。
-
?正常訪問(wèn)?:
- 如果 Referer 不是來(lái)自百度,則繼續(xù)執(zhí)行后續(xù)腳本。
注意事項(xiàng)
HTTP_REFERER
?字段可能不會(huì)被所有瀏覽器或代理發(fā)送,或被用戶或代理修改,因此不能完全依靠它來(lái)做安全相關(guān)的決策。- 此代碼只是基本的屏蔽實(shí)現(xiàn),對(duì)于更復(fù)雜的場(chǎng)景,可能需要更高級(jí)的訪問(wèn)控制策略。
使用京策盾高防CDN可以完美杜絕這個(gè)問(wèn)題,免去修改代碼的煩惱