Angular如何保护其中包含id的路由,任何人都可以猜到它?

时间:2017-10-25 01:55:38

标签: angular

我有一个Angular 4应用程序依赖于使用我用于获取信息的参数(即drop table t1 purge; drop table t2 purge; /project/:id的路由问题是这不安全,因为任何用户都可以猜出这个数字我正在采取预防措施,在后端验证请求它的人是被检索数据的所有者。

由于我正在检查后端,用户仍然可以输入/project/1,如果该项目不属于他们,则不会返回任何数据,但用户仍会看到HTML页面。

我曾考虑使用会话存储来存储project/310而不是组件检查,看看它是否存在,如果不是重定向。

如果有人有更好/更有效的方法来做到这一点,我将不胜感激。

1 个答案:

答案 0 :(得分:2)

您需要 Route Guard

i_ = 'd'

myList = ['a','b','c','d','e']

random.sample(random.sample(myList[:myList.index(i_)] +
                            myList[(myList.index(i_) + 1):],
                             2)
              + [i_], k=3)

['c', 'd', 'b']

在您的路由中,添加此

import { AngularFireAuth } from 'angularfire2/auth';
import { Injectable } from '@angular/core';
import { Router,  ActivatedRouteSnapshot, RouterStateSnapshot, CanActivate } from '@angular/router';
@Injectable()
export class AuthGuard implements CanActivate {
  loggedIn = false;

  constructor(private dummyService: DummyService, private router: Router) {
  }
  canActivate( route: ActivatedRouteSnapshot,  state: RouterStateSnapshot) {
   //To get the data in the url for instance,'product/1'
   const productId = route.params.id; 
   //here get the data and do the necessary logic
  return this.dummyService.SomeFunction
      .map( authState => !!authState) need to return a boolean
      .do( auth => {
            //user is not the owner of the data so redirect them somewhere else
          if (!auth) {
            this.router.navigate(['/login']);
          }
            //if you got here, then the user is the owner of the data.
      }).take(1);
      }
    }

在app.module中的提供程序中添加 { path: 'product/:id', component: SomeComponent, canActivate: [AuthGuard ] }

更多信息:

CanActivate - https://angular.io/api/router/CanActivate