Тест Гатлинга CSRF Spring Security заблокирует мой пост через веб-форму - PullRequest
0 голосов
/ 11 мая 2018

Я хочу сделать тест Гатлинга и отправить форму через сообщение с параметрами формы, но я получаю 403 из-за токена CSRF, сгенерированного из Spring Security, это мой сценарий:

 val sentHeaders = Map(
        "Content-Type" -> "application/x-www-form-urlencoded",
        "User-Agent" -> "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0",
        "Accept" -> "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
        "Accept-Language" -> "fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3",
        "Connection" -> "keep-alive")
    
  val rechercheAvanceeScn = scenario("RechercheAvanceeAgent").during(TestsPerfConfiguration.dureeTest, "RechercheAvanceeAgentDuration", true) {   
      // Phase1: Authentification
      exec(
      http("Authentification")
      .get("/authlogin?sid=1&app=999&code_teleservice=DELTA-T"))
      
      // Phase 2: Form Recherche avancée
      .exec(
      http("RechercheAvanceeForm")
      .get("/recherche/avancee/form")
      .check(status.is(200))
      )
      
      // Phase 3: Recherche Avancée par type de declaration et type de garantie
      .exec(
      http("RechercheAvanceeAgentPost")
      .post("/recherche/avancee/result")
      .headers(sentHeaders)
      .formParam("mrn.comparateur", "EGAL")
      .formParam("mrn.value", "")
      .formParam("typeDeclaration.value", "")
      .formParam("dateDebut.comparateur", "EGAL")
      .formParam("dateDebut.value", "")
      .formParam("dateDebut.valueMax", "")
      .formParam("dateLimitePresentationMarchandises.comparateur", "EGAL")
      .formParam("dateLimitePresentationMarchandises.value", "")
      .formParam("dateLimitePresentationMarchandises.valueMax", "")
      .formParam("modeTransmission.value", "TOUS")
      .formParam("typeProcedureDepart.value", "")
      .formParam("typeProcedureDestination.value", "")
      .formParam("dateFin.comparateur", "EGAL")
      .formParam("dateFin.value", "")
      .formParam("dateFin.valueMax", "")
      .formParam("dateDepotDeclaration.comparateur", "EGAL_HEURE_MINUTES")
      .formParam("dateDepotDeclaration.value", "")
      .formParam("heureDepotDeclaration.value", "00:00")
      .formParam("dateDepotDeclaration.valueMax", "")
      .formParam("heureDepotDeclaration.valueMax", "00:00")
      .formParam("donneesSureteSecurite.value", "")
      .formParam("paysExpedition.value", "")
      .formParam("nomenclatureMarchandises.comparateur", "EGAL")
      .formParam("nomenclatureMarchandises.value", "")
      .formParam("paysDestination.value", "")
      .formParam("valeurFactureTotale.comparateur", "EGAL")
      .formParam("valeurFactureTotale.value", "")
      .formParam("valeurFactureTotale.valueMax", "")
      .formParam("bureauDepart.value", "")
      .formParam("bureauDestination.value", "")
      .formParam("bureauPassage.value", "")
      .formParam("circuitBureauDepart.value", "")
      .formParam("resultatControlesDepart.value", "")
      .formParam("circuitBureauPassage.value", "")
      .formParam("resultatControlesPassage.value", "")
      .formParam("circuitBureauDestination.value", "")
      .formParam("resultatControlesDestination.value", "")
      .formParam("typeGarantie.value", "TYPE_1")
      .formParam("dateDebutGarantie.comparateur", "EGAL")
      .formParam("dateDebutGarantie.value", "")
      .formParam("dateDebutGarantie.valueMax", "")
      .formParam("montantDetteSusceptibleNaitre.comparateur", "EGAL")
      .formParam("montantDetteSusceptibleNaitre.value", "")
      .formParam("montantDetteSusceptibleNaitre.valueMax", "")
      .formParam("grn.comparateur", "EGAL")
      .formParam("grn.value", "")
      .formParam("dateFinGarantie.comparateur", "EGAL")
      .formParam("dateFinGarantie.value", "")
      .formParam("dateFinGarantie.valueMax", "")
      .formParam("_suiteNonLiberationService.booleanValue", "on")
      .formParam("_suiteControleGarantie.booleanValue", "on")
      .formParam("etatDeclaration.value", "VALIDEE_MRN")
      .formParam("result", "")
      .check(status.is(200))
      )
  } 

Ошибка: ---- Ошибки --------------------------------------------- -----------------------

status.find.is (200), но фактически найдено 403 102 (100,0%)

в параметрах сообщения, когда я выполняю и отправляю форму из Firefox, я получаю токен _csrf: "832749f8-7fc2-4fe7-8572-dedd578d1f9f" , но я не знаю, как это получить сгенерированный токен в моем тесте не имеет ошибки 403.

токен хранится в параметрах, а токен реализован в заголовке с тегом JSTL:.

Может ли кто-нибудь помочь мне, пожалуйста?

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

Маркер csrf будет отправлен в ответе от сервера. Вам просто нужно найти, куда оно отправлено, и сохранить его, используя check().saveAs(), как говорит CampFire.

Я видел токены csrf, отправленные в кодировке base 64, поэтому вам может потребоваться проверить это в ответе сервера.

0 голосов
/ 05 июля 2018

Вы можете получить значения со страницы, используя API check () и API saveAs (). Вы должны посмотреть здесь: https://gatling.io/docs/current/http/http_check/#saving Вы можете получить токен со страницы с помощью чека, а затем сохранить его и использовать позже.

...