Question

Disons que nous avons une fonction compliquée qui détermine si une chaîne correspond à une chaîne d'attaque XSS, et lance une erreur ou fait autre chose dans ce cas.

function somethingWithXSSVulnerability(x) {
  var regex = /<script(.*)>(.*)<\/script>/
  if (x.match(regex)) {
    throw new Error('XSS')
  } else {
    return x
  }
}

En essayant de comprendre l'évaluation symbolique en ce qui concerne la génération de tests, je me demande comment cela générerait un test pour ce cas. Comment cela générerait un x de telle sorte qu'il correspond au regex. Cela pourrait être beaucoup plus compliqué qu'un regex, une grammaire par exemple. Le cas de test générant l'erreur serait quelque chose comme:

// yes case
somethingWithXSSVulnerability('<script>alert("foo")</script>')
// no case
somethingWithXSSVulnerability('anything else even <script> w/o closing tags')

À vraiment Testez-le, il peut avoir besoin de générer une alerte ou d'essayer de régler un cookie ou quelque chose, donc là, il devient encore plus compliqué.

Mais j'essaie d'avoir une idée de la façon dont l'évaluateur symbolique génère un test pour ce cas. Comment il détermine la valeur de l'entrée à la fonction. Il semble qu'il faudrait comprendre la structure du regex, puis une entrée inverse pour l'adapter. Vous vous demandez si c'est le cas.

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
Non affilié à cs.stackexchange
scroll top