拒絕直接存取!!!"
Response.Write "
來源: " & from
Response.Write "
請訪問: " & onlyURL & ""
Response.Write "
"
Response.Write "
" & vbCRLF
Response.End
Else
If InStr(from, onlyURL) <> 1 Then
' 非指定來源:疑似盜鏈或外站嵌入
Response.Write "
拒絕盜鏈!!!"
Response.Write "
來源: " & from
Response.Write "
請訪問: " & onlyURL & ""
Response.Write "
"
Response.Write "
"
Response.End
Else
' 來源合法:繼續執行後續頁面邏輯
End If
End If
%>
邏輯解析
| 情境 | HTTP_REFERER | 處理方式 |
| 直接輸入網址 / 書籤 / 爬蟲偽裝 | 空字串 | 輸出隱藏提示並用 JS 提交空表單導向首頁 |
| 外部網站嵌入 / 盜鏈 | 非自有域名開頭 | 同樣阻擋並導向首頁 |
| 自家頁面連結點擊 | 以 onlyURL 開頭 | 放行,正常顯示內容 |
局限性與進階防護建議
- Referer 可偽造:爬蟲可輕易偽造
Referer 標頭,此法僅能阻擋低階采集。
- 隱私模式/防火牆會移除 Referer:導致合法用戶誤判。
- 建議搭配:
- IP 訪問頻率限制(如 Nginx limit_req、WAF 規則)
- User-Agent 特徵分析與封鎖
- 動態生成 CSS/JS 混淆、字體加密、Canvas 指紋驗證
- 重要資料走 API + Token/簽名驗證,而非直接輸出 HTML
現代替代方案(Java/JSP 範例)
<%
String referer = request.getHeader("Referer");
String allowed = "https://www.yoursite.com/";
if (referer == null || !referer.startsWith(allowed)) {
response.sendRedirect(allowed); // 或回傳 403
return;
}
%>
- 上一篇文章: JSP 動態頁面靜態化實戰:Filter + Response Wrapper 實現高效 HTML 快取
- 下一篇文章: JSP 發送郵件完整實作:JavaMail API 整合與表單處理範例