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

本贴最后更新于 219 天前,其中的信息可能已经事过景迁

介绍

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

效果

  • 禁止导出

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

    • 如果使用者使用了键盘,自动弹窗提示并重定向到别的网址
    • 记录使用了键盘的使用者的 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)

  • 思源笔记

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

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

    25533 引用 • 105611 回帖 • 1 关注

相关帖子

欢迎来到这里!

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

注册 关于
请输入回帖内容 ...
CongSec
新手可以看我发的求助帖以及汇总帖子,很有帮助的!_! 网安笔记分享:http://congsec.xyz 广州