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)?