Tengo una aplicación web y utilicé OWASP ZAP para verificar XSS. Probé dos casos como ejemplo abajo:
URL: localhost: 8888 / test / login
Öogin page HTML:
<!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 : HTML de devolución de la aplicación (respuesta HTML)
-
Iniciar ZAP
-
Enviar formulario de inicio de sesión
-
Elija Active scan XSS para esta URL: localhost: 8888 / test / login
Resultado: ZAP encontró 1 script de alerta XSS
Caso 2 : retorno de aplicación JSON (REST API)
URL: localhost: 8888 / api / login
Formato de datos JSON de solicitud: {"email":"abc", "pass": "123456"}
Formato de datos JSON de respuesta: {"email":"abc", "pass": "123456"}
-
Uso de Ajax para llamar a API con solicitud 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>
-
Iniciar ZAP
-
Pulse la cumbre del botón (llame a la función sendAjax para enviar los datos de solicitud)
-
Elija Active scan XSS para esta URL: localhost: 8888 / api / login
Resultado: No se encontró nada
Lo que quiero saber exactamente es que: ZAP puede verificar si la API de XSS está en reposo o no. Si no puedo, ¿cómo puedo verificar si hay XSS en esta API (caso 2)?