首页 > 解决方案 > 如何避免角度应用程序中遵循的一系列输入?

问题描述

我正在学习角度,我遇到了这个问题。如何通过连续多次输入表单来防止用户淹没程序..例如使用这个javascript:

javascript:for(var i=0;i<9999999;i++){ document.getElementByTagName("button")[0].click();

那是我的角度代码: 组件:

export class InsertTODO implements OnInit {
constructor(private angularFire: AngularFireDatabase) { }
ngOnInit() {
}
form_submit(f: NgForm) {
this.angularFire.list('todos').push(
  {
    name: f.controls.name.value
  }).then((t: any) => console.log('recorded data ' + t.key),
   (e: any) => console.log(e.message));
  f.controls.name.setValue('');
}

看法:

<h1> WorkZone TODO </h1>
<form #f="ngForm" (submit)="form_submit(f)">
  <input type="text" ngModel name="name" placeholder="TODO">
  <br/>
  <br/>
  <button type="submit">Insert</button>
  <button type="reset">Clear</button>
</form>

这是在 firebase 主机上部署的 workzone.tk 上在线

谢谢大家!

标签: javascriptangularvalidationsubmit

解决方案


停止多个帖子并不容易,无论如何,如果您在应用程序(客户端)中进行限制,仍然有人可以使用一些自动化工具向您的网站发出多个重复请求。例如,如果您使用fiddler,您可以多次播放相同的请求。甚至可以使用可以重放任何请求的开发人员工具来实现这一点。

这不能在客户端处理。您只需要在服务器端处理。

以下是您可以尝试的几种方法。

  1. 在您的应用程序中实施CAPTCHA/re-CAPTCHA。这很容易集成,您会发现很多插件Angular可供使用。

  2. 您也可以考虑基于 IP 的限制,如果来自特定 IP,您收到多个请求,您可以将其阻止一段时间。

  3. 如果相同的记录已经存在,您可以随时在服务器端/数据库端检查,如果是,则拒绝请求。


推荐阅读