---
title: 防止镜像，保护个人网站
abbrlink: 56845
date: "2024-10-27 17:07:24"
updated: "2024-10-27 17:07:26"
desc: "可以通过外部资源调用，亦可以直接在<body></body>标签里使用<script></script>来实现"
categories:
    - 疑难杂症
tags:
    - 教程
    - 记录
    - 学习
    - 进步
    - 网站
---

_你再镜像试试？_

<!--more-->

## 本文参考自 [保护您的博客不被恶意镜像](https://blog.goodboyboy.top/posts/3095793858.html?highlight=%E9%95%9C%E5%83%8F)

## 源码

可以通过外部资源调用，亦可以直接在`<body></body>`标签里使用`<script></script>`来实现

```js
(function () {
    var encodedValidDomain = "YmxvZy5nb29kYm95Ym95LnRvcA=="; //base64加密后的域名
    var encodedredirectUrl = "aHR0cHM6Ly9ibG9nLmdvb2Rib3lib3kudG9w"; //base64加密后的链接，包含协议头
    var decodedValidDomain = atob(encodedValidDomain);
    var redirectUrl = atob(encodedredirectUrl);
    var hostname = document.location.hostname;

    function createWatermark(text) {
        var watermarkDiv = document.createElement("div");
        watermarkDiv.style.pointerEvents = "none";
        watermarkDiv.style.position = "fixed";
        watermarkDiv.style.top = "0";
        watermarkDiv.style.left = "0";
        watermarkDiv.style.width = "100%";
        watermarkDiv.style.height = "100%";
        watermarkDiv.style.zIndex = "9999";
        watermarkDiv.style.opacity = "0.1";
        watermarkDiv.style.background = "transparent";
        watermarkDiv.style.overflow = "hidden";
        watermarkDiv.style.display = "flex";
        watermarkDiv.style.justifyContent = "center";
        watermarkDiv.style.alignItems = "center";
        watermarkDiv.style.flexWrap = "wrap";

        var watermarkText = document.createElement("div");
        watermarkText.innerText = text;
        watermarkText.style.color = "black";
        watermarkText.style.fontSize = "30px";
        watermarkText.style.transform = "rotate(-30deg)";
        watermarkText.style.whiteSpace = "nowrap";
        watermarkText.style.margin = "20px";

        for (var i = 0; i < 100; i++) {
            watermarkDiv.appendChild(watermarkText.cloneNode(true));
        }

        document.body.appendChild(watermarkDiv);
    }

    if (hostname !== decodedValidDomain) {
        createWatermark(decodedValidDomain); //decodedValidDomain可以替换为自定义水印内容
        var userResponse = confirm(
            "警告：您当前浏览的页面非官方页面，可能存在有害信息！建议您跳转至官方页面进行浏览！",
        );
        if (userResponse) {
            window.location.replace(redirectUrl);
        }
    }
})();
```

此源码：

> 作者: GoodBoyboy
> 链接: https://blog.goodboyboy.top/posts/3095793858.html?highlight=%E9%95%9C%E5%83%8F
> 来源: GoodBoyboy 's Blog｜惬意小屋-点滴记忆
> 著作权归作者所有。商业转载请联系作者获得授权，非商业转载请注明出处。

## 我自己使用文心一言来做的代码

```js
(function () {
    var encodedValidDomain = 'eGluZ3dhbmd6aGUuZnVu'; // base64加密后的域名
    var encodedredirectUrl = 'aHR0cHM6Ly94aW5nd2FuZ3poZS5mdW4='; // base64加密后的链接，包含协议头
    var decodedValidDomain = atob(encodedValidDomain);
    var redirectUrl = atob(encodedredirectUrl);
    var hostname = document.location.hostname;

    // 创建提示信息的div
    function showWarningMessage(message, delay) {
        var messageDiv = document.createElement('div');
        messageDiv.style.position = 'fixed';
        messageDiv.style.top = '50%';
        messageDiv.style.left = '50%';
        messageDiv.style.transform = 'translate(-50%, -50%)';
        messageDiv.style.padding = '20px';
        messageDiv.style.backgroundColor = 'red';
        messageDiv.style.color = 'white';
        messageDiv.style.zIndex = '9999';
        messageDiv.style.boxShadow = '0 0 10px rgba(0, 0, 0, 0.5)';
        messageDiv.innerText = message;

        document.body.appendChild(messageDiv);

        // 设置延时后移除提示信息并跳转
        setTimeout(function() {
            document.body.removeChild(messageDiv);
            window.location.replace(redirectUrl);
        }, delay);
    }

     检查是否为本地调试域名（可选）
     if (hostname.includes('localhost') || hostname.includes('127.0.0.1')) {
         return; // 退出函数，不执行后续代码
     }

    if (hostname !== decodedValidDomain) {
        // 显示提示信息，并在6秒后自动跳转
        showWarningMessage("警告：您当前浏览的页面非官方页面，可能存在有害信息！您将被自动跳转至官方页面。", 6000);
    }
})();
  </script>
```

它使用了一个自定义的 div 元素来显示提示信息，并在 5 秒后自动跳转到指定的 URL：

## 混淆

正如原文作者所说，为了防止正则匹配，我们需要混淆，下面是js混淆网站地址

GitHub 上一个项目：https://github.com/javascript-obfuscator/javascript-obfuscator

官方也提供了一个在线工具：https://obfuscator.io/#code

由于存在汉字,记得勾选unicode

## 建议

使用whois查找域名解析商，域名注册商，站长信息。并利用这些信息进行相关投诉


---

**作者：**xingwangzhe

**本文链接：**[https://xingwangzhe.fun/posts/56845/](https://xingwangzhe.fun/posts/56845/)

本文采用[知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议](https://creativecommons.org/licenses/by-nc-sa/4.0/)进行许可。