首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何防止攻击者复制提交?

如何防止攻击者复制提交?
EN

Software Engineering用户
提问于 2015-09-04 15:06:43
回答 2查看 137关注 0票数 3

我想创建一个投票网站。客户端请求使用POST回答投票,服务器将使用候选服务器进行响应。然后,客户端向服务器发送带有候选信息和胜利者的POST,然后服务器存储在该信息中。我希望通过向服务器反复发送他们的投票来防止客户端操纵结果。我想的一种方法是:

  1. 客户要求在投票中投票。
  2. 服务器发送候选人列表、时间戳和使用候选项和时间戳创建的咸散列。然后,服务器存储哈希。
  3. 客户端选择一个候选人,并将获胜者与候选人列表、时间戳和盐渍哈希一起发回。
  4. 服务器使用相同的盐分计算哈希,并检查哈希是否是存储在数据库中的有效散列。如果哈希是有效的,它尊重投票。如果没有,那么它要么会悄悄地避免提醒攻击者,要么会以错误的方式进行响应。

不过,我想找一种更优雅的方法来做这件事。首先,我很难想到一种不是静止的盐。我不希望用户受到IP地址的限制,所以不能包含在salt中。在那之后,我想不出一种好的方法来腌制我的哈希。

其次,我想找到一种不用在服务器上存储信息的方法。如果我能够创建一个可以快速计算而不是存储的验证方法,那将会更好(除非存储肯定比计算更好,因为它可能更快?)

第三,我应该悄悄地失败,还是显式地将错误通知客户端?

EN

回答 2

Software Engineering用户

发布于 2015-09-08 17:27:06

听起来你真的有两个问题:

  • 防止重播攻击。
  • 阻止同一个客户投票两次。

这些都是微妙的不同。重放攻击是简单地多次发送请求,可能有细微的变化,也可能是由第三方发送。多次投票就是这样:合法地投票不止一次。

这里的核心问题是你不知道客户是谁。如果客户端移动位置(IP或子网)怎么办?是新客户吗?即使你认为你知道他们是谁,在抽象的层面上,你也不知道。

这不是什么新问题。总的来说,大多数互联网通过要求客户创建帐户来解决这个问题。身份验证发生在TLS上,确保客户端是他们所说的那个人。完成此操作后,客户端可以通过服务器将其存储在数据库中的TLS连接发送其投票。一个客户ID (如电子邮件地址或帐户名称),一票。

这可以防止重放攻击: TLS已经通过设计增强了对这些攻击的抵抗力。这也防止了多次投票:投票是根据数据库中的帐户ID链接起来的,这使得查看特定客户端是否已经投票变得非常容易。只需有一个由轮询ID和帐户ID组成的多部分主键。另一个字段存储投票。您可以添加可选元数据,如IP地址和投票日期/时间。

这里没有理由重新发明轮子: TLS和一些基本的数据库设计可以轻松地解决您的问题,并且比任何本土开发的解决方案都要好得多。

票数 3
EN

Software Engineering用户

发布于 2015-09-08 16:20:54

  1. 将记录存储为salt的表行号是否可行?(或此唯一数字的函数)。
  2. 我会将信息存储在服务器上,因为作为一个原则问题,我永远不会相信互联网上的客户端。如果您真的想在客户端上存储信息,您将使用您的私钥对其进行数字签名或加密,并在投票时验证或解密它。这是否可以接受取决于投票的性质:对于竞选公职,我会选择服务器,去哪里吃团队午餐,我也会选择服务器。
  3. 给出反馈意见(并记录下来),否则你就会面临这样的风险:在真正的选民有时间投票之前,甚至没有人知道合法的选票是否被压缩和使用。
票数 0
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/296473

复制
相关文章
如何防止表单重复提交
在看Java Web 深入分析时, 看到表单重复提交问题一节, 如下描述如何解决问题:
望天
2018/08/02
3.2K0
如何防止表单重复提交
Spring Boot 如何防止重复提交?
在传统的web项目中,防止重复提交,通常做法是:后端生成一个唯一的提交令牌(uuid),并存储在服务端。页面提交请求携带这个提交令牌,后端验证并在第一次验证后删除该令牌,保证提交请求的唯一性。
Java技术栈
2019/07/19
4.2K0
Spring Boot 如何防止重复提交?
防止重复提交
提交form数据,假如提交的按钮是图片按钮而不是submit按钮,可以按下面方法防止按钮被多次提交: 1. ---------------------------------------------------------------------
源哥
2018/08/28
1.9K0
【干货】如何防止接口重复提交?(中)
在上一篇文章中,我们详细的介绍了对于下单流量不算高的系统,可以通过请求唯一ID+数据表增加唯一索引约束这种方案来实现防止接口重复提交!
Java极客技术
2022/12/04
1.7K0
【干货】如何防止接口重复提交?(中)
【干货】如何防止接口重复提交?(下)
在上一篇文章中,我们详细的介绍了随着下单流量逐渐上升,为了降低数据库的访问压力,通过请求唯一ID+redis分布式锁来防止接口重复提交,流程图如下!
Java极客技术
2022/12/04
1.1K0
【干货】如何防止接口重复提交?(下)
【干货】如何防止接口重复提交?(上)
对于投入运营的软件系统,最近小编在巡检项目数据库的时候,发现某些表存在不少的重复数据,对于这样的脏数据,初步分析大致的来源有以下可能:
Java极客技术
2022/12/04
1.5K0
【干货】如何防止接口重复提交?(上)
【黄啊码】PHP如何防止重复提交
防抖(Debounce)是一种防止重复提交的策略,它通过延迟一定时间来合并连续的操作,以确保只执行一次。
黄啊码
2023/12/18
3130
防止表单重复提交
我只会写Bug啊
2023/12/25
2180
ajax防止重复提交
 //防止重复提交     var pendingRequests = {};     jQuery.ajaxPrefilter(function( options, originalOptions, jqXHR ) {         var key = options.url;         i=0;         i++;         console.log(key+"aaaaaaaaaaa"+i);         if (!pendingRequests[key]) {          
windseek
2018/05/15
3K0
表单提交原理_防止表单重复提交
<form>标签的属性enctype设置以何种编码方式提交表单数据。可选的值有三个:
全栈程序员站长
2022/11/08
5.8K0
防止表单重复提交
写的真的很好 https://blog.csdn.net/chenzao666/article/details/81222855
周杰伦本人
2022/10/25
1.6K0
在Spring boot中使用 AOP 如何防止重复提交!!!
上述的思路其实没有问题的,但是需要前后端都稍加改动,如果在业务开发完在加这个的话,改动量未免有些大了,本节的实现方案无需前端配合,纯后端处理。
用户5224393
2019/07/10
1.6K0
在Spring boot中使用 AOP 如何防止重复提交!!!
EasyNVR前端防止提交成功后多余操作提交
从代码中我们不难看出,EasyNVR前端页面是通过触发Ajax来进行表单提交的。出现上图中的问题主要是由于多次的触发Ajax。因此,要规避这个问题,我们可以通过限定AJax的触发来,完成这项需求。
EasyNVR
2020/04/23
8760
EasyNVR前端防止提交成功后多余操作提交
网页防止复制js代码
第一种 {tabs-pane label="代码"} document.body.oncontextmenu=document.body.ondragstart= document.body.onselectstart=document.body.onbeforecopy=function(){return false;}; document.body.onselect=document.body.oncopy=document.body.onmouseup=function(){document.sele
堡主
2023/03/04
18.4K0
Html.AntiForgeryToken 防止伪造提交
In this tutorial, I am not going to discuss the concept in-depth since they have done such a fantastic job. Instead, I want to show how you can easily incorporate the Html.AntiForgeryToken HtmlHelper Method and [ValidateAntiForgeryToken] Attribute in the sample code from our first meeting:Introduction to ASP.NET MVC Screencast and Sample Code.
javascript.shop
2019/09/04
1.3K0
实战之防止表单重复提交
对于防止重复提交,最简单也最不安全的做法相信大家也都经历过,前端在一个请求发送后立即禁用掉按钮,这里咱们来讨论一下后端对防止重复提交的处理方式。 主要针对非分布式环境下防止重复提交与分布式环境下的防止重复提交。一般分布式环境下也可以通过网关路由的方式将同一个用户的请求路由到一个实例上处理。
山行AI
2019/06/28
2.9K0
java防止接口重复请求_前端防止重复提交
对于一些新增数据的接口通常需要进行接口的防重复提交保护,如:用户账号注册、用户下单、用户发帖等等类似的应用场景。 防重复提交主要应用场景是避免用户短时间内由于误操作导致同一份数据被保存多次所带来的问题,如果被保存的数据内容存在唯一标识限制则可以选择不使用防重复提交,在业务侧保证数据的唯一性即可。 注意:防重复提交只能防止短时间内用户的误操作导致插入重复数据的问题,如果需要数据的唯一性还是需要在业务中自行处理。
全栈程序员站长
2022/09/27
2.1K0
HTML防止input回车提交表单
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
奋飛
2019/08/15
4K0
SpringMVC token 防止表单重复提交
一、定义注解 Token.java @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface Token { boolean save() default false; boolean remove() default false; } 二、定义token 过滤器 TokenInterceptor.java package com.bra.common.web; import com.
week
2018/08/27
1.4K0
springmvc防止重复提交_java后端解决重复提交问题
表单提交时需要校验数据是否已存在,如果已存在需要防止重复提交,做法比较简单,不再赘述。
全栈程序员站长
2022/11/11
1.5K0
springmvc防止重复提交_java后端解决重复提交问题

相似问题

如何防止.NET应用程序被复制?

30

如何防止不知情地复制代码?

60

使用PRG模式防止双重提交

20

如何在用户重新加载页面时防止多个表单提交

30

如何正确地管理提交、防止特性冲突和管理VCS的依赖关系?

80
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档