客戶需求,查詢到的圖片只能看,不能提供下載讓使用者自行儲存,那測試過一些工具,由於會有網頁行為產生,所以那些工具根本無法真正地阻擋下載成功,經過一些測試,發現可以透過網頁的 CSS, JS 的撰寫來達成部分功能。敘述如下:
測試命題:
利用網頁開一圖片,測試https://www.gss.com.tw/images/stories/news/gssnews20250725_2_1.jpg
並做禁止下列行為
|
No |
圖片保護措施 |
測試結果 |
測試狀態 |
|
1 |
禁止使用滑鼠右鍵下載 |
成功禁止使用滑鼠右鍵下載 |
◎ |
|
2 |
禁止列印 |
成功禁止列印 |
◎ |
|
3 |
禁止使用瀏覽器右上方的 ... 選單的功能 |
由於瀏覽器的安全限制,網頁無法阻止使用者透過 瀏覽器右上角的選單進行操作,但是運用空跑機制, 讓檔案無法完成下載 |
◎ |
|
4 |
螢幕截圖:單獨按 PrtScn; 同時按 PrtScn + 視窗鍵 |
由於瀏覽器的安全限制,網頁無法完全阻止 作業系統內建的螢幕截圖功能。 |
× |
技術:JavaScript 事件監聽器
關鍵語法:document.addEventListener('contextmenu', function(e) { e.preventDefault(); });
這段程式碼的作用是「監聽」網頁上的「右鍵點擊」事件。當使用者在網頁上點擊右鍵時,事件監聽器會被觸發,而 e.preventDefault() 這行程式碼會立即執行,阻止瀏覽器彈出預設的右鍵選單。
由於右鍵選單通常包含「另存圖片」或「圖片另存新檔」等下載選項,阻止右鍵選單的出現,就能達到禁止下載圖片的目的。contextmenu 事件在使用者點擊滑鼠右鍵時觸發。
event.preventDefault();: 這是關鍵,它會阻止瀏覽器執行右鍵的預設行為(即彈出右鍵選單)。
|
// 禁用右鍵選單並顯示提示 document.addEventListener('contextmenu', function(e) { e.preventDefault(); showMessage('禁止使用右鍵'); }); |
技術:CSS 媒體查詢與 JavaScript 事件
關鍵語法:@media print { ... } 和 window.onbeforeprint = function() { return false; };
這部分使用了兩種技術來確保列印功能失效:
CSS 媒體查詢 (@media print):這是一個專為列印設計的 CSS 規則。當瀏覽器進入列印模式時,它會自動將 .image-container 的 display 屬性設置為 none,這會使圖片在列印預覽中完全隱藏。同時,它會在頁面中央顯示一個「禁止列印此頁面」的提示訊息。
JavaScript 事件 (onbeforeprint):這個事件在瀏覽器即將開啟列印對話框時觸發。通過讓函式回傳 false,我們有效地取消了列印操作。這兩種方法相輔相成,即使其中一種失敗,另一種也能提供備援,確保列印功能被有效阻擋。
|
/* 使用 CSS 媒體查詢,在列印時隱藏圖片容器 */ @media print { .image-container { display: none !important; } body::before { content: "禁止列印此頁面。"; position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); font-size: 2rem; color: #000; background-color: #fff; padding: 20px; border: 2px solid #000; } } |
技術:瀏覽器層級的限制
這是一個重要的概念:網頁程式碼無法直接禁用瀏覽器本身的 UI 功能,例如 Chrome 右上角的「...」選單。這些選單屬於瀏覽器應用程式的一部分,其功能(如下載、列印)是內建且無法被網頁腳本修改的。
因此,我們的網頁只能透過干預行為來達到目的。例如:
當使用者從選單點擊「列印」時,window.onbeforeprint 會生效並阻止列印。
當使用者從選單點擊「下載」時,由於圖片是作為背景圖片呈現,而不是一個可下載的 <img> 標籤,
且右鍵選單已被禁用,下載行為自然就無法成功。
Print Screen(PrtScn)或 Windows 鍵 + Print Screen 鎖畫面或不讓你截圖
為什麼大部分網站做不到這件事?
|
|
網站類型 |
能封鎖截圖 |
原因說明 |
|
1 |
一般網站 |
不會 |
技術上無法、防護成本高 |
|
2 |
DR串流如Netflix 等 |
會 |
使用 EME/CDM 技術加密保護內容 |
|
3 |
DRM PDF 或企業方案 |
部分會 |
文件以 DRM 保護,防止截圖或複製 |
儘管網頁中實作了禁用右鍵和拖曳的功能,並嘗試禁用使用者選取,但這些都屬於客戶端 (Client-Side) 的保護措施。這意味著這些限制是在使用者的瀏覽器中執行的,有經驗的使用者仍然可以繞過這些限制,例如:
因此,如果需要更強大的圖片保護,例如防止未經授權的下載或追溯圖片來源,則必須在伺服器端 (Server-Side) 實作更嚴格的權限驗證、動態圖片生成或數位浮水印等技術。
When you subscribe to the blog, we will send you an e-mail when there are new updates on the site so you wouldn't miss them.
評論