Nodejs网站上关键数据如何防止被采集?
Nodejs网站上关键数据如何防止被采集?
假设我的网站上有用户的电话号码或者私人相册地址 如何防止这些数据被采集?
目前我能想到的是: 通过ajax请求这些数据而不是放在html内容里面. 但是这样做有个问题就是通信时数据是明文的, 如何加密这些数据呢?
或者有其他的办法防止扫描? 请有经验的人教教
在Node.js网站中,防止关键数据(如用户电话号码或私人相册地址)被采集是一个重要的安全措施。以下是一些有效的方法来实现这一点:
1. 使用HTTPS加密通信
首先,确保所有通信都通过HTTPS进行,以保护数据在传输过程中的安全。这可以通过使用SSL/TLS证书来实现。
示例代码:
const https = require('https');
const fs = require('fs');
const options = {
key: fs.readFileSync('/path/to/server.key'),
cert: fs.readFileSync('/path/to/server.crt')
};
https.createServer(options, (req, res) => {
// 处理请求逻辑
}).listen(443);
2. 服务器端渲染与客户端请求分离
不要直接将敏感数据嵌入到HTML页面中,而是通过AJAX请求从服务器获取这些数据。服务器端处理这些请求,并根据用户身份验证结果决定是否返回敏感数据。
示例代码:
const express = require('express');
const app = express();
const jwt = require('jsonwebtoken');
app.use(express.json());
// 检查JWT令牌
function authenticateToken(req, res, next) {
const authHeader = req.headers['authorization'];
const token = authHeader && authHeader.split(' ')[1];
if (token == null) return res.sendStatus(401);
jwt.verify(token, process.env.ACCESS_TOKEN_SECRET, (err, user) => {
if (err) return res.sendStatus(403);
req.user = user;
next();
});
}
app.get('/api/data', authenticateToken, (req, res) => {
// 假设我们有一个用户模型
const userId = req.user.id;
// 查询数据库获取数据
const data = getUserData(userId);
res.json(data);
});
app.listen(3000);
3. 数据脱敏和访问控制
对敏感数据进行脱敏处理,例如只显示部分电话号码。同时,使用严格的访问控制策略来限制哪些用户可以访问特定数据。
示例代码:
function getUserData(userId) {
// 查询数据库
const userData = getUserFromDatabase(userId);
// 脱敏处理
const maskedPhoneNumber = maskPhoneNumber(userData.phone);
return {
...userData,
phone: maskedPhoneNumber
};
}
function maskPhoneNumber(phone) {
return phone.replace(/(\d{3})\d{4}(\d{4})/, '$1****$2');
}
总结
通过上述方法,您可以有效地防止关键数据被采集。HTTPS加密通信确保了数据的安全传输;服务器端渲染与客户端请求分离避免了敏感数据暴露在客户端;数据脱敏和访问控制进一步增强了安全性。
如果是百姓网那种谁都能看的页面呢
58是把电话号码做成图片的,增长别人的采集难度,不过还是可以处理。
如果是点击之后有功能的链接呢? 比如邮箱地址, 或者下载链接
刚发现一个网站用这种方法来增加采集难度:把网页中显示的字符串数据,ASCII字符部分全部替换成图片(通过CSS来显示背景图片,都是一张图片,不同的字符背景偏移量不一样,而且这个图片也是随机的),这样即使采集过来了,某部分数据也是不完整的,大大增加采集难度。
这个很有意思, 谢谢
ajax通讯加密, 大家有办法吗?
防采集一直都是很让人蛋疼的问题。各种办法基本上都是防君子不防小人的。
我见过一个网站,很极端的防别人采集他的页面。
就是把页面HTML代码全部URLEncode加码。
然后再在前段用js的decode解码。
做一个例子
比如页面HTML代码是 <html><body>…呵呵呵…</body></html> 先在后台进行URLEncode成为一个字符串
String enHTML = “%20%sdf%s12%12…%asdf%qwe”
然后输出在模板上
document.write(decodeURI("${enHTML}"));
(ps : 我用的是JAVA的模板写法,{enHTML}就是再模板中调用 enHTML字符串)
这样在页面源代码中看到的就是
%20%sdf%s12%12…%asdf%qwe
因为用了js的decodeURI解码,所以页面显示确实正常的。。
这种方式极不利于SEO。。
不过防采集确实效果不错。
粗糙的伪代码,只表达一下思路。。。
希望你能理解我的意思 : )
其实这个思路我想过, 但是还是有办法采集的, 采集器用同样的方法解密一遍就好了, 破解难度不是很大
谁都能看的页面,那就是谁都能解密的页面。
用人机识别:你要看一个人的资料,先输一遍验证码。
这个影响用户体验, 而且现在验证码都已经不太好用了
具体如何做呢
url 地址随机 别搞那种 有规律的 如 uid=1。。。。。uid=100 再有最好别出现列表页面