当前位置: 首页 > 知识库问答 >
问题:

流星中的安全方法

上官琦
2023-03-14

我在用流星做一个消息应用程序。出于安全原因,我禁用了从客户端调用的任何插入/更新/删除。现在插入消息的唯一方法是使用方法。

Meteor.methods({
  sendMessage: function (text) {
    Messages.insert({ userId: Meteor.userId(), roomId: Rooms.findOne()._id, name: Meteor.users.find(Meteor.userId()).fetch()[0].profile.name , message: text });
  }
});

如果是这种情况,我将不得不在函数上包含额外的参数,这将使它更加不安全。

我可能不明白这里的方法。

共有1个答案

漆雕嘉平
2023-03-14

你在正确的轨道上。使用rooms.findone()在服务器上肯定没有意义,坦率地说,在客户端上也没有那么好(如果您发布了更多的一个房间,这将会破坏)。您需要将消息和房间id都传递给您的方法。该方法应验证插入是否有意义。例如,此用户当前是否在房间中。假设在room.members中跟踪,则SendMessage可以按以下方式实现:

Meteor.methods({
  sendMessage: function(message, roomId) {
    check(message, String);
    check(roomId, String);

    if (!this.user)
      throw new Meteor.Error(401, 'You must be logged in.');

    if (_.isEmpty(message))
      throw new Meteor.Error(403, 'Message must not be empty.');

    var room = Rooms.findOne(roomId);

    if (!room)
      throw new Meteor.Error(404, 'Room not found.');

    if (!_.contains(room.members, this.userId))
      throw new Meteor.Error(403, 'You are not in the room.');

    var name = Meteor.user().profile.name;

    return Messages.insert({
      userId: this.userId,
      roomId: roomId,
      name: name,
      message: message
    });
  }
});

并非所有这些检查都是必要的,但是这个示例应该让您了解一个方法可以提供的丰富的验证集。

 类似资料:
  • 问题内容: 我有 在一个文件中 在另一个文件中。 我得到了错误。很明显,我必须在文件中定义而不是将它们分开。但是Meteor如何处理单独文件中的代码?我可以访问某些对象和变量,而另一些则无法访问。 问题答案: 当您以经典的JavaScript方式定义变量时: 在文件的根目录,Meteor使用IIFE将其范围限定为文件。 如果要定义全局变量,只需不要编写,就可以了: 这将定义默认情况下,所有应用程序

  • 我在尝试在Spring Boot应用程序中启用全局方法安全性时遇到了一些问题。或多或少我有这样的配置: @Secure注释在服务中工作正常,但在控制器中不行,所以我读到这里(http://docs.spring.io/spring-security/site/faq/faq.html#faq-method-security-in-web-context)我认为这是因为方法安全性只在根应用程序上下文

  • 瑞星卡卡安全浏览器是一款基于Firefox 3开源代码而设计的浏览器,为用户提供了最佳的Web浏览体验。 性能表现:由于建立在功能强大的新的Gecko 1.9引擎之上,瑞星卡卡安全浏览器整体表现更安全、更易用、更个性化。 安全特性:瑞星卡卡安全浏览器的安全性得到了进一步提升。新的防木马、防网络钓鱼功能让你远离病毒、蠕虫、木马以及间谍软件的威胁。 可定制化:每个人都有自己特殊的上网习惯,瑞星卡卡安全

  • 主要内容:渗透测试工作流程安全测试可视为对系统的受控攻击,以实际的攻击方式揭示安全漏洞或问题。安全测试的目标是评估IT系统的当前状态。它也被称为渗透测试或道德黑客攻击。 渗透测试分阶段进行,在本章中,我们将讨论完整的过程。应在每个阶段进行适当的记录,以便随时可以获得重现攻击所需的所有步骤。本文还可作为客户在渗透测试结束时收到的详细报告的基础。 渗透测试工作流程 渗透测试包括四个主要阶段 - 踩点阶段 扫描阶段 枚举阶段 渗

  • 我们在hello-world-test的基础上,我们新建了一个名为method-security的 Gradle 项目。 本项目用于演示方法级别的安全设置。 build.gradle 修改 build.gradle 文件,让我们的method-security项目成为一个新的项目。 修改内容也比较简单,修改项目名称及版本即可。 jar { baseName = 'method-securi