Можно ли экранировать все параметры сразу на нескольких маршрутах? - PullRequest
0 голосов
/ 30 мая 2019

У меня есть маршрутизатор, который имеет несколько маршрутов. В настоящее время я экранирую каждый параметр, передаваемый методу отдельно в самом методе.

Мне нужно экранировать все параметры, которые передаются в URL в целях безопасности.

class MyRouter extends Backbone.Router
   routes:
     "student/:id/:name"         :        "student"
     "teacher/:tid/:tname"       :        "teacher"
     "teacher/:tid/:tname/share" :        "teacher_share"

  student: (id, name) ->
    id = _.escape(id)
    name = _.escape(name)
    #do stuff

  teacher: (tid, tname) ->
    tid = _.escape(tid)
    tname = _.escape(tname)
    #do stuff

  teacher_share: (tid, tname) ->
    tid = _.escape(tid)
    tname = _.escape(tname)
    #do stuff

Можно ли экранировать все параметры сразу на всех маршрутах, чтобы мне не пришлось явно экранировать их в каждом соответствующем методе?

1 Ответ

0 голосов
/ 30 мая 2019

Вы можете переопределить execute

выполнить router.execute(callback, args, name) Этот метод вызывается внутри маршрутизатора, всякий раз, когда маршрут совпадает и его соответствующий обратный вызов должен быть выполнен. Верните false из execute для отмены текущего перехода. Переопределите его, чтобы выполнить пользовательский анализ или перенос ваших маршрутов, например, для анализа строк запроса перед передачей их обратному вызову маршрута, например:

var Router = Backbone.Router.extend({
  execute: function(callback, args, name) {
    if (!loggedIn) {
      goToLogin();
      return false;
    }
    args.push(parseQueryString(args.pop()));
    if (callback) callback.apply(this, args);
  }
});
...