[css] 发布服务 ~ 禁止键盘 ~ 记录使用者 ~ 禁止导出

介绍

当我们通过分享服务功能分享一个文档,笔记本的时候,只想要分享,看看,不想让其他人直接复制甚至导出,使用以下代码即可实现

效果

  • 禁止导出

    • 将电脑端和手机端的导出按钮进行隐藏
  • 禁止键盘的使用

    • 如果使用者使用了键盘,自动弹窗提示并重定向到别的网址
    • 记录使用了键盘的使用者的 ip 和 useragent
    • 禁止游览器的 js 会发现思源无法正常运行
    • image.png
  • 记录使用者

    • 每 10 秒钟记录一次使用者 ip 和 useragent,统计使用者的人数情况和使用时长情况
    • image.png

代码

  1. 服务器接受文件:

    1. cong.php(接受触发键盘的人的信息)

      1.  <?php
         // 获取 IP 和 UserAgent 参数
         $ip = isset($_GET['IP']) ? $_GET['IP'] : 'UNKNOWN_IP';
         $userAgent = isset($_GET['UserAgent']) ? $_GET['UserAgent'] : 'UNKNOWN_USERAGENT';
        
         // 获取当前时间
         $date = date('Y-m-d H:i:s');
        
         // 拼接记录内容
         $logEntry = "[$date] IP: $ip, User-Agent: $userAgent\n";
        
         // 记录到文件 'cong.txt'
         file_put_contents('cong.txt', $logEntry, FILE_APPEND);
        
         // 返回一个简单的响应
         echo "记录成功";
         ?>
        
    2. conglog.php(接受使用者的信息)

      1.  <?php
         // 获取 IP 和 UserAgent 参数
         $ip = isset($_GET['IP']) ? $_GET['IP'] : 'UNKNOWN_IP';
         $userAgent = isset($_GET['UserAgent']) ? $_GET['UserAgent'] : 'UNKNOWN_USERAGENT';
        
         // 获取当前时间
         $date = date('Y-m-d H:i:s');
        
         // 拼接记录内容
         $logEntry = "[$date] IP: $ip, User-Agent: $userAgent\n";
        
         // 记录到文件 'cong.txt'
         file_put_contents('cong.txt', $logEntry, FILE_APPEND);
        
         // 返回一个简单的响应
         echo "记录成功";
         ?>
        
  2. CSS 代码

    1. 隐藏手机端导出

      1.  /*
         #modelMain限定手机版
         :has(.b3-label.fn__none #token) 限定发布版
         .b3-label:has(#exportData) 定位导出按钮所在的label
         */
         #modelMain:has(.b3-label.fn__none #token) .b3-label:has(#exportData) {
             display:none;
         }
        
        
  3. JS 代码

    1. 发送使用者相关信息

      1.  // 获取用户的 User-Agent
         const userAgent = encodeURIComponent(navigator.userAgent);  // 防止特殊字符
        
         // 定义发送请求的函数
         function sendUserData() {
             // 通过 API 获取用户的 IP 地址
             fetch('https://api.ipify.org?format=json')
                 .then(response => response.json())
                 .then(data => {
                     const userIP = data.ip;
        
                     // 构建目标 URL,发送 IP 和 User-Agent 到 conglog.php
                     const targetURL = `http://IP地址/conglog.php?IP=${userIP}&UserAgent=${userAgent}`;
        
                     // 发送 HTTP 请求到服务器
                     fetch(targetURL)
                         .then(response => response.text())
                         .then(result => {
                             console.log('服务器响应:', result);
                         })
                         .catch(error => {
                             console.error('发送数据到服务器失败:', error);
                         });
                 })
                 .catch(error => {
                     console.error('获取IP地址失败:', error);
                 });
         }
        
         // 每五秒执行一次发送请求的函数
         setInterval(sendUserData, 20000); // 5000 毫秒 = 5 秒
        
         // 立即执行一次,确保第一次不会等待五秒
         sendUserData();
        
        
    2. 禁止键盘操作

      1.  document.addEventListener('keydown', function(e) {
        
        
             // 特定按键的行为处理
             if (e.keyCode) {
         	// 获取用户的 User-Agent
         	const userAgent = encodeURIComponent(navigator.userAgent);  // 防止特殊字符
        
         	// 通过 API 获取用户的 IP 地址
         	fetch('https://api.ipify.org?format=json')
         		.then(response => response.json())
         		.then(data => {
         			const userIP = data.ip;
        
         			// 构建目标 URL,发送 IP 和 User-Agent 到 cong.php
         			const targetURL = `http://IP地址/cong.php?IP=${userIP}&UserAgent=${userAgent}`;
        
         			// 发送 HTTP 请求到服务器
         			fetch(targetURL)
         				.then(response => response.text())
         				.then(result => {
         					console.log('服务器响应:', result);
         				})
         				.catch(error => {
         					console.error('发送数据到服务器失败:', error);
         				});
        
         			// 显示警告信息
         			alert(`来自CongSec的警告:\n\n已将你的IP:${userIP} 和 User-Agent:${decodeURIComponent(userAgent)} 记录下来`);
         		})
         		.catch(error => {
         			console.error('获取IP地址失败:', error);
        
         			// 如果获取IP失败,仍然显示警告信息(不包含IP)
         			alert(`来自CongSec的警告:已将你的 User-Agent:${decodeURIComponent(userAgent)} 记录下来`);
         		});
         		        // 5 秒后进行重定向
                 setTimeout(function() {
                     window.location.href = "www.baidu.com";
                 }, 5000); // 5000 毫秒 = 5 秒
                 e.preventDefault(); // 阻止这些按键的默认行为
             }
        
         });
        

部署

  1. 在服务器上部署思源并开启 web 服务,并开始发布服务

  2. 设置(移除按钮)插件,在设置禁止导出

    1. image
  3. 将对应的 php 文件和 txt 文件部署在服务器

  4. 将对应的 css/js 代码填写进去即可

以上 css/js 代码来源于思源社区,参考链接:

发布服务能否通过添加 js 代码片段将右键禁用 - 链滴 (ld246.com)

思源笔记分享功能太糟心了 - 链滴 (ld246.com)

  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    22251 引用 • 88937 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...