当前位置: 首页 > news >正文

Angular安全专辑之五 —— 防止URL中敏感信息泄露

URL  中的敏感数据是指在网址上的机密或者个人信息,包括 UserId, usernames, passwords, session, token 等其他认证信息。

由于URL 可能会被第三方拦截和查看(比如互联网服务商、代理或者其他监视网络流量的攻击者),所以URL中的敏感数据会带来安全风险,攻击者可能会捕获并使用它进行攻击。

例如:

  1. 信息泄露: URL 中的敏感数据泄露会被攻击者拦截,并导致个人身份信息或者系统机密信息泄露。
  2. 账户劫持: 攻击者可以使用URL中的敏感数据对用户账户进行未授权的访问,并执行各种恶意活动。
  3. 网络钓鱼攻击:攻击者可以创建模仿合法网站的虚假网页,并在 URL 中包含敏感数据,以诱骗用户泄露其登录凭据或其他敏感信息。
  4. 跨站点脚本(XSS)攻击:攻击者可以将恶意代码注入 URL,这些代码在由用户浏览器执行时可以窃取敏感数据,例如 Cookie 或会话 ID。

如何防止URL中敏感数据泄露

1.禁止在代码中储存敏感数据

比如:

<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title></title>
</head>
<body><form  method="post"><div class="imgcontainer"><img src="img_avatar2.png" alt="Avatar" class="avatar"></div><div class="container"><label for="uname"><b>Username</b></label><input type="text" placeholder="Enter Username" name="uname" required><label for="psw"><b>Password</b></label><input type="password" placeholder="Enter Password" name="psw" required><button type="submit">Login</button><label><input type="checkbox" checked="checked" name="remember"> Remember me</label></div><div class="container" style="background-color:#f1f1f1"><button type="button" class="cancelbtn">Cancel</button><span class="psw">Forgot <a href="#">password?</a></span></div>
</form></body>
</html>
<!-- test user: user1/12345-->

在代码中保存了测试账号和密码信息,而为了不泄露敏感数据,需要将测试账号和密码删掉。

2.不要在URL 中添加敏感数据

比如:当我们登录成功后获得了自己的auth token = eydGbGciOiJSUzI3VidIsInR5cCI6IkpXVCIsImtpZCI6IlJfRmJ0MllaTW142310dencYVpxWCJ9

此时连接 socket:

客户端:

  const ioSocket = io.connect('localhost: 4200', {query:  'utcoffset=' + (new Date()).getTimezoneOffset(),transports: ['websocket', 'polling'],});

服务端:

此时我们其实把auth token 添加到了URL 上。如下图

如何修改: 不要将auth token放在URL里。

客户端:

const ioSocket = io.connect('localhost: 4200', {forceNew: false,query:  'utcoffset=' + (new Date()).getTimezoneOffset(),transports: ['websocket', 'polling'],upgrade: false});
ioSocket.on('connect', () => {ioSocket.emit('authenticate', { token: 'eydGbGciOiJSUzI3VidIsInR5cCI6IkpXVCIsImtpZCI6IlJfRmJ0MllaTW142310dencYVpxWCJ9' });});

服务端:

const cookie = require('cookie');
const _ = require('lodash');module.exports = function(app, server) {io.on('connection', async function(socket) {socket.authenticated = false;socket.on('authenticate', async function(data) {// 验证tokensocket.authenticated = checkToken(data.token);});let authId = _.get(socket, ['request', 'decoded_token', 'sub']);       const cookieStr  = _.get(socket, ['request', 'headers', 'cookie']);const cookies = cookie.parse(cookieStr);const consid = cookies['connect.sid' ];if (authId) {let userSockets = _.get(app, ['ioUserSockets', authId], []);if (!_.find(userSockets, socket)) {userSockets.forEach(socket => {if (_.get(socket, 'consid') === consid) {delete socket.consid;}});_.set(socket, 'consid', consid);userSockets.push(socket);_.set(app, ['ioUserSockets', authId], userSockets);}socket.on('disconnect', () => {let userSockets = _.get(app, ['ioUserSockets', authId], []);logger.debug('Removing socket for user %s', authId);_.pull(userSockets, socket);_.set(app, ['ioUserSockets', authId], userSockets);});}    setTimeout(function() {if (!socket.authenticated) {socket.disconnect('unauthorized');}}, 3000);}
};

这样就可以防止auth token 在URL里出现了。

http://www.lryc.cn/news/195402.html

相关文章:

  • vueday01——文本渲染与挂载
  • Prometheus的Pushgateway快速部署及使用
  • spring cloud config 占位符 application用法
  • SAP ERP系统解决光伏电池产业管理难题
  • el-table的formatter属性的使用方法
  • 高质量床上用品类网站带手机端的pbootcms模板
  • paddlenlp:社交网络中多模态虚假媒体内容核查(特征篇)
  • 【网络】总览(待更新)
  • 策略模式——多重if-else解决方案
  • CTAmap 1.12版本2013年-2023年省市县矢量数据更新
  • 【Linux初阶】多线程3 | 线程同步,生产消费者模型(普通版、BlockingQueue版)
  • JUC并发编程——四大函数式接口(基于狂神说的学习笔记)
  • 【2】c++11新特性(稳定性和兼容性)—>超长整型 long long
  • AI算法检测对无人军用车辆的MitM攻击
  • 运维 | 如何在 Linux 系统中删除软链接 | Linux
  • Jmeter接口测试:jmeter导入和导出接口的处理
  • 一文了解 Go fmt 标准库的常用占位符及其简单使用
  • Linux命令(94)之history
  • Prompt 驱动架构设计:探索复杂 AIGC 应用的设计之道?
  • 【代码随想录】算法训练营 第三天 第二章 链表 Part 1
  • winform开发经验(1)——调用Invoke更新UI时程序卡死原因以及解决办法
  • JNI 的数据类型以及和Java层之间的数据转换
  • EFLK与logstash过滤
  • docker jenkins
  • 单例模式之「双重校验锁」
  • 2023年中国商业版服务器操作系统市场发展规模分析:未来将保持稳定增长[图]
  • BIM如何通过3D开发工具HOOPS实现WEB轻量化?
  • Unity 3D基础——通过四元数控制对象旋转
  • python--短路运算,把0、空字符串和None看成 False,其他数值和非空字符串都看成 True
  • 《算法通关村第一关——链表青铜挑战笔记》