Me pregunto si mi API web ASP.NET tenía una vulnerabilidad XSS ya que mi controlador no tenía un método para manejar la llamada GET predeterminada.
Sin el método GET manejado en el código, una llamada a
/api/mycontroller/?<script>alert('hi');</script>
resultaría en:
{"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."}
Tenga en cuenta que las etiquetas de script están en la fuente JSON, simplemente no se muestran en la página.
Elimine el signo de interrogación, /api/mycontroller/<script>alert('hi');</script>
, y obtendrá
"A potentially dangerous Request.Path value was detected from the client (<)."
, por lo que ahora una HttpException está protegiendo a los usuarios.
El enrutamiento de la API es simplemente el predeterminado:
.Routes.MapHttpRoute(
"DefaultApi",
"api/{controller}/{id}",
new { id = RouteParameter.Optional });
y ahora lo he agregado en un método de acción predeterminado:
[HttpGet]
public HttpResponseMessage Get()
{
// do something.
}
Sin embargo, se podría pasar por alto poner este método de acción cuando un desarrollador está creando una API, creo.
Me preguntaba, ¿es este un problema XSS explotable?