OWASP ZAP può controllare XSS per l'API REST?

2

Ho un'applicazione web e ho usato OWASP ZAP per controllare XSS. Ho provato due casi come ad esempio:

URL: localhost: 8888 / test / login

HTML della pagina Öogin:

<!DOCTYPE html>
<html>
<head>
<meta charset="US-ASCII">
<title>Login Page</title>
<script src="https://code.jquery.com/jquery-1.9.1.min.js"></script></head><body><h3>Loginwithemailandpassword</h3><formid="testForm" action="login" method="post">
<strong>User Email</strong>:<input type="text" name="email" id="email"><br>
<strong>Password</strong>:<input type="pass" name="pass" id="pass"><br>
<input type="submit" value="Login" id="subForm">
<div id="result"><%=request.getAttribute("email")%></div>
</form>
<br>
If you are new user, please <a href="register.html">register</a>.
</body>
</html>

Caso 1 : applicazione restituisce HTML (risposta HTML)

  • Avvia ZAP

  • Invia modulo di accesso

  • Scegli XSS di scansione attiva per questo URL: localhost: 8888 / test / login

    Risultato: ZAP ha trovato 1 script di avviso XSS

Caso 2 : l'applicazione restituisce JSON (REST API)

URL: localhost: 8888 / api / login

Richiedi il formato dati JSON: {"email":"abc", "pass": "123456"}

Formato dati JSON di risposta: {"email":"abc", "pass": "123456"}

  • Uso di Ajax per chiamare l'API con richiesta JSON

    <script>
    
    function sendAjax() {
    
        var user = new Object();
    
        var email = $('#email').val();
    
        var pass = $('#pass').val();
    
        $.ajax({
            url: "localhost:8888/api/login",
            type: 'POST',
            dataType: 'json',
            data: JSON.stringify({"email":email,"pass":pass}),
            contentType: 'application/json',
            mimeType: 'application/json',
    
            success: function (data) {
                $("#result").html("email: "+data.email+" pass: "+data.pass)
            },
            error:function(data,status,er) {
                alert("error: "+data+" status: "+status+" er:"+er);
            }
        });
    }
    </script>
    
  • Avvia ZAP

  • Fai clic sul summit del pulsante (chiama la funzione sendAjax per inviare i dati della richiesta)

  • Scegli XSS di scansione attiva per questo URL: localhost: 8888 / api / login

    Risultato: non è stato trovato nulla

Che cosa esattamente voglio sapere è che: ZAP può controllare XSS in resto dell'API o no? Se non è possibile, come posso verificare l'XSS in questa API (caso 2)?

    
posta nhatnguyen 10.12.2015 - 09:16
fonte

2 risposte

1

Purefan ha già risposto alla tua domanda nei commenti, ma è un po 'espanso.

Un attacco XSS non è possibile se il sito Web restituisce un JSON utilizzando l'intestazione Content-type: application/json . Perché? Perché un JSON è solo una stringa, quindi non importa se il tuo sito restituisce {123 : alert('blablabla')} perché è solo una stringa.

D'altra parte, un XSS funziona perché il client interpreta la risposta HTML, quindi è per questo che ZAP rileva l'XSS quando si restituisce un HTML invece che il JSON.

    
risposta data 11.12.2015 - 10:41
fonte
0

Se la tua API restituisce JSON, allora c'è la possibilità di XSS sull'interfaccia utente (client) se e solo se l'applicazione non analizza correttamente il JSON sull'interfaccia utente (client).

Controlla se il server sta convalidando il tipo di contenuto, perché potrebbe portare a CSRF.

Rivedi questa risposta correlata su StackOverflow: È possibile XSS sfruttare le risposte JSON con la corretta escaping della stringa JavaScript?

    
risposta data 01.04.2016 - 12:22
fonte

Leggi altre domande sui tag