Mi chiedo se la mia API Web ASP.NET abbia una vulnerabilità XSS poiché il mio controller non aveva un metodo per gestire la chiamata GET predefinita.
Senza il metodo GET gestito nel codice, una chiamata a
/api/mycontroller/?<script>alert('hi');</script>
risulterebbe in:
{"Message":"No HTTP resource was found that matches the request URI
'http://localhost:8888/api/mycontroller/?'.",
"MessageDetail":"No action was found on the controller 'MyController' that
matches the request."}
Tieni presente che i tag dello script si trovano nell'origine JSON, non vengono semplicemente visualizzati nella pagina.
Rilascia il punto interrogativo, /api/mycontroller/<script>alert('hi');</script>
, e otterrai
"A potentially dangerous Request.Path value was detected from the client (<)."
, quindi ora HttpException protegge gli utenti.
Il routing dell'API è semplicemente quello predefinito:
.Routes.MapHttpRoute(
"DefaultApi",
"api/{controller}/{id}",
new { id = RouteParameter.Optional });
e ora ho aggiunto un metodo di azione predefinito:
[HttpGet]
public HttpResponseMessage Get()
{
// do something.
}
L'inserimento di questo metodo di azione, tuttavia, potrebbe facilmente essere perso quando uno sviluppatore sta creando un'API, credo.
Quindi mi stavo chiedendo, si tratta di un problema XSS sfruttabile?