Domanda

Supponiamo che abbiamo una funzione complicata che determina se una stringa corrisponde a una stringa di attacco XSS e lancia un errore o fa qualcos'altro in quel caso.

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

Nel tentativo di comprendere la valutazione simbolica per quanto riguarda la generazione di test, mi chiedo come genererebbe un test per questo caso. Come genererebbe un x in modo tale che corrispondesse al regex. Potrebbe essere molto più complicato di un regex, ad esempio una grammatica. Il caso di prova che genera l'errore sarebbe qualcosa di simile:

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

Per veramente Provalo, potrebbe essere necessario generare un avviso o provare a impostare un cookie o qualcosa del genere, quindi sta diventando ancora più complicato.

Ma sto cercando di avere un'idea di come il valutatore simbolico genera un test per questo caso. Come determina il valore dell'input alla funzione. Sembra che dovrebbe comprendere la struttura del regex, quindi un ingresso inverso un input per abbinarlo. Chiedendomi se sia così.

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a cs.stackexchange
scroll top