速率限制以防止 ExpressJS 中的恶意行为

2023-11-26

有人让我意识到我正在开发的应用程序中存在一些缺陷(主要是在前端的 JavaScript 中),这使得有可能同时单击大量按钮并发送大量事务电子邮件。这显然不好。

我认为在 ExpressJS 中处理这个问题的一种方法是使用app.all()计算在特定时间范围内发生的请求数量。我会将其存储在带有时间戳的会话元数据中,如果在 Y 时间内发生超过 X 个请求,我会将它们切断一段时间,直到限制到期。

有没有人以前做过这个或有任何提示/提示来帮助我?最好是易于放入和取出我的应用程序的东西。谢谢!


你可以使用Collate网页中的对象。

function Collate(timeout) {
  this.timeout = timeout || 1000;
}
Collate.prototype = {
  time: 0,

  idle: function() {
    var t = new Date().getTime();
    return (t - this.time > this.timeout && (this.time = t));
  },

  prefer: function(func) {
    this.func = func;
    clearTimeout(this.timer);
    this.timer = setTimeout(func, this.timeout);
  }
};

如果您希望某个函数运行一次并且在接下来的 1 秒内不再运行。 就像如果你想阻止用户多次提交表单,你可以这样做:

var timer = new Collate(3000);  //3 seconds
button1.onclick = function() {
    if(timer.idle()) {
        button1.form.submit();
    } else alert("Don't click too quickly!");
}

//or on the form tag

<script>var submitTimer = new Collate(3000);</script>
<form action="post" onsubmit="return submitTimer.idle();">

如果您期望一个事件多次触发并且只想对其最后一次触发做出反应。 就像如果您想在用户完成输入后进行搜索,您可以这样做:

var timer = new Collate(700); //0.7 seconds
textfield1.onkeyup = function() {
    timer.prefer(function() {
        autocomplete.search(textfield1.value);
    });
};
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

速率限制以防止 ExpressJS 中的恶意行为 的相关文章

  • 使用 jQuery Select2 清除下拉菜单

    我正在尝试使用奇妙的方式以编程方式清除下拉菜单Select2 http ivaynberg github com select2 图书馆 使用 Select2 远程 ajax 调用动态填充下拉列表query option HTML
  • 在随机位置启动 HTML5

    我有一个大约 2 小时长的音轨 我想在我的网站上使用它 我希望它在页面加载时在随机位置开始播放曲目 使用 HTML5 可以吗 我知道您可以使用 element currentTime 函数来获取当前位置 但是如何在完全下载之前获取曲目的总时
  • 在 R 传单中添加不透明度滑块

    如何在 R leaflet 应用程序中添加滑块来控制特定图层的不透明度 对于这个应用程序 我不想使用闪亮 这里建议 在 R 传单应用程序中添加滑块 https stackoverflow com questions 37682619 add
  • 如何使 d3 饼图响应式?

    我有一个 PIE 图表 它工作正常 但我无法使其具有响应能力和可调整大小 我需要它与移动浏览器和 iPad 等兼容 div div
  • jQuery输入文件点击方法和IE上拒绝访问

    我尝试仅使用一个按钮作为输入文件 它在 Firefox Chrome Safari 中工作正常 但在 IE 中不行 提交表单时我总是收到 访问被拒绝 的消息 代码 input file click 有真正的解决方法吗 我在谷歌上浪费了大约2
  • 此页面上的脚本导致 ie 运行缓慢

    问题就在标题中 IE 行为异常 并说有一个脚本运行缓慢 FF 和 Chrome 没有这个问题 我怎样才能找到问题所在 那个页面有很多JS 手动检查不是一个好主意 EDIT 这是我正在处理的一个项目的页面 但我需要一个工具来查找问题 End
  • 访问 nuxt 配置文件中的存储

    我想添加通过 Nuxt 静态生成的动态路由 我定义了一个客户端 服务器端存储asyncData方法 我想将这个存储值 一个数组 映射到我的nuxt config js文件使其成为 动态 静态 路线图nuxt generate命令 但如何访问
  • Nodejs 中的子域

    如何处理nodejs的子域请求 例如以下代码回显test在控制台中的任何请求http localhost 9876 任何内容 http localhost 9876 5Banything 5D var http require http h
  • Nodejs 调试生产中的错误

    我有一个在生产环境中运行的 Nodejs 脚本 我不太可能 千分之一 遇到这样的错误 TypeError value is out of bounds at checkInt buffer js 1009 11 at Buffer writ
  • 检索 css3 缩放元素的宽度/高度

    我正在与 offsetWidth 属性的奇怪之处 我认为 作斗争 这是场景 比方说 我有一个span标签 在我的js中 在某个时刻我执行css3转换 对于这个元素 例如 el set styles transform scale scale
  • 全局传递 xhr onload 函数的值

    在我正在创建的应用程序中 我有以下 XMLHttpRequest 并且我正在尝试传递结果data在 的里面xhr onload 到在同一父函数中创建的数组中 var url http api soundcloud com resolve j
  • 使用 JQuery 禁用和启用所有超链接

    我有以下禁用所有超链接的内容 但在事件发生后我想再次启用它们 我该如何执行此操作 a click function return false 我认为这不仅仅是将其设置为 true 那么简单 谢谢大家 不要以这种方式绑定 点击 处理程序 而是
  • 添加要在给定命令中运行的 .env 变量

    我有一个 env 文件 其中包含如下变量 HELLO world SOMETHING nothing 前几天我发现了这个很棒的脚本 它将这些变量放入当前会话中 所以当我运行这样的东西时 cat env grep v xargs node t
  • webpack中动态加载外部模块失败

    我正在尝试建立以下架构 一个核心 React 应用程序 它具有一些基本功能 并且能够在运行时加载其他 React 组件 这些额外的 React 组件可以按需加载 并且它们在构建核心应用程序时不可用 因此它们不能包含在核心应用程序的捆绑包中
  • 如何动态调整jqgrid到当前窗口大小?

    如何动态调整jqgrid到当前窗口大小 基于javascript jQuery 最好的例子在这里 TinyMCE 去 http www tinymce com tryit full php http www tinymce com tryi
  • 如何在 webpack 中渲染嵌套的 SASS?

    采取以下CSS MyComponent color blue Button color red 以及以下 React 组件 import React from react import classes from MyComponent sc
  • 使用 ref 触发反应 dropzone 不起作用

    我正在实现这个库 https github com felixrieseberg React Dropzone Component https github com felixrieseberg React Dropzone Compone
  • 以角度访问窗口 TemplateUrl 内的范围

    我的模式有一个 windowTemplateUrl 如下 div class modal fade div class modal dialog div class modal content square btn div div div
  • ng-include 和 ng-view 不同时加载

    下面是我的应用程序的结构 很简单 页眉和页脚是非常小的文件 而主页上的 ng view 要大得多 当我进入该页面时 我注意到了这一点 首先加载两个 ng include 然后 ng view 出现 页脚被推到底部 页脚闪烁大约 0 1 秒
  • MongoDB:javascript执行失败:无法在 src/mongo/shell/collection.js 保存 DBQuery 对象

    在 MongoDb 中 当我尝试修改集合中的现有文档时 它会生成以下异常 javascript execution failed can t save a DBQuery object at src mongo shell collecti

随机推荐

  • 如果源 Web 服务器将响应标头中的过期值设置为相对较早之前的时间,会发生什么情况?

    如果源 Web 服务器将响应标头中的过期值设置为相对较早之前的时间 会发生什么情况 例如 考虑当前时间是 2013 年 1 月 25 日星期五 GMT 并且过期标头设置为 gt 到期时间 1994 年 12 月 1 日星期四 16 00 0
  • 在 ggplotly 中设置工具提示参数时,geom_line 不绘制

    我正在尝试在我闪亮的应用程序中使用绘图来实现交互式视觉效果 但是 在尝试向图表添加自定义工具提示时遇到了问题 如果我设置tooltip论证中ggplotly 然后我的geom line 在我的输出中被忽略 但工具提示有效 这是一个 MRE
  • Delphi XE下的工具栏2000?

    旧的 Toolbar 2000 软件包 最好带有 TBX 扩展 是否可以在 Delphi XE 下编译和工作 现在有人使用 Tb2k 和 TBX 吗 TB2K 和 TBX 可以编译吗 Toolbar2000 可以 它被用作 SpTBX 的一
  • 使用 pandas 滚动的滑动窗口迭代器

    如果它是单行 我可以得到迭代器如下 import pandas as pd import numpy as np a np zeros 100 40 X pd DataFrame a for index row in X iterrows
  • Pandas groupby 排名日期时间

    我遇到了关于日期时间排名的问题 可以说我有下表 ID TIME 01 2018 07 11 11 12 20 01 2018 07 12 12 00 23 01 2018 07 13 12 00 00 02 2019 09 11 11 00
  • setOrientationHint 在某些手机的前置摄像头 (HTC) 上逆时针旋转视频

    问题 某些 Android 设备 在问题底部列出 在使用setOrientationHint int degrees 功能用于使用前置摄像头拍摄的视频 预期的行为是视频顺时针旋转 但这些设备逆时针旋转视频 My Goal 识别相机设置或硬件
  • OpenGL ES GL_TEXTURE_RECTANGLE

    有谁知道OpenGL ES是否支持GL TEXTURE RECTANGLE 我计划将它用于 2D 图形以支持非二次幂图像 我当前的实现使用 alpha 0 填充的 POT 纹理 对于拉伸图像效果不佳 它适用于 OpenGL 但我们也计划将其
  • laravel eloquent 中 select() 和 get() 的区别

    使用 laravel eloquent 模型时 get 和 select 方法有什么区别吗 哪种方法更快 是 有一点不同 select 仅用于定义您想要的列 get 用于实际获取结果 gt 执行查询 它还允许您指定列 DB table fo
  • 使用 int[][] 和 int[] 有什么区别? [复制]

    这个问题在这里已经有答案了 来自 perl 背景 我总是使用定义一个 2D 数组int 我知道你可以使用int 那么有什么区别呢 这里的区别在于第一个样本 int 创建了一个锯齿状阵列 而第二个则创建一个矩形阵列 维度 2 在锯齿状数组中
  • MEMORY_BASIC_INFORMATION 结构中的 BaseAddress 和 AllocationBase 有什么区别?

    在 MSDN 中我发现以下内容 BaseAddress 指向页面区域基地址的指针 AllocationBase 指向由 VirtualAlloc 函数分配的一系列页面的基地址的指针 BaseAddress成员指向的页包含在这个分配范围内 但
  • 如何在玉中的链接内添加条件?

    如何在 jade 中的标签内部添加条件 在我的例子中是链接 锚点 这是我的伪代码 当然行不通 a href foo class if current route 1 foo active Go to Foo 怎么样 a href foo c
  • iOS (Safari) 中的 Flutter Web 状态栏

    我尝试更改 safari 浏览器中的状态栏 我搜索了它 有很多关于它的问题 但没有一个解决我的问题 我试过更改状态栏颜色 and 如何更改 chrome 标题颜色 这个蓝色区域位于 iPhone 的凹口周围 我想更改整个应用程序的颜色 感谢
  • css3 跨浏览器不透明度

    我找不到应用 css 跨浏览器不透明度的方法 IE7里有什么好东西 IE8里就别去了 反之亦然 谢谢 d opacity 0 5 filter alpha opacity 50 try this
  • MVCBuildViews 无法正常工作

    因此 我在 MVC 3 RTM 应用程序上编辑了 csproj 文件以设置以下属性
  • Objective-C 优化

    Objective C 是否有标准的优化技巧 可以沿着 C 或 g fast 标签中的 内联 频繁方法加快执行速度 编辑 当 theMethod 有两个 或更多 整数用于输入时 是否有人有一个使用 SEL 和 IMP 的简短示例 这是一个小
  • Netbeans 扫描项目太慢

    我使用 netbeans 7 3 1 我在这里找到了一种使 netbeans 更快的方法 如何提高 Netbeans 性能 但我的问题是我的netbeans因项目扫描而变慢 projectcanning对于软件很重要吗netbeans 我的
  • 如何向 gcc 提供有关循环计数的提示

    了解循环将经历的迭代次数允许编译器进行一些优化 例如考虑下面的两个循环 未知迭代次数 static void bitreverse vbuf desc vbuf unsigned int idx 0 unsigned char img vb
  • 未终止字符串文字的常见来源[重复]

    这个问题在这里已经有答案了 我正在尝试调试一个在 Firefox 扩展中读取并执行的 JavaScript 脚本 我只能通过 Firebug 控制台看到错误 我的代码对 Firebug 不可见 并且它报告 未终止的字符串文字 我检查了该行及
  • 使用 Nokogiri 获取节点的兄弟节点

    有没有办法找到节点中的特定值 然后返回其所有兄弟值 例如 我想找到id包含 ID 5678 的节点 然后获取电子邮件地址以及与 ID 5678 关联的所有图像 Nokogiri XML parse File open info xml 这是
  • 速率限制以防止 ExpressJS 中的恶意行为

    有人让我意识到我正在开发的应用程序中存在一些缺陷 主要是在前端的 JavaScript 中 这使得有可能同时单击大量按钮并发送大量事务电子邮件 这显然不好 我认为在 ExpressJS 中处理这个问题的一种方法是使用app all 计算在特