Con este codigo podremos prevenir los ataques XSS en nuestros sitios desarrollados con ASP y .ASP.net


// Comentarios añadidos
public void Redirect(string url, bool endResponse)
{
      if (url == null)
      {
            throw new ArgumentNullException("url");
      }
      if (url.IndexOf('n') >= 0) // no se permiten saltos de línea
      {
            throw new ArgumentException(HttpRuntime.FormatResourceString("Cannot_redirect_to_newline"));
      }
      if (this._headersWritten)
      {
            throw new HttpException(HttpRuntime.FormatResourceString("Cannot_redirect_after_headers_sent"));
      }
      url = this.ApplyAppPathModifier(url); // determina la ruta correcta si es una URL relativa
      url = this.ConvertToFullyQualifiedRedirectUrlIfRequired(url); // Usa la url absoluta si está definida en el web.config
      url = this.UrlEncodeRedirect(url); // Codifica espacios y caracteres especiales (ascii > 128)
      this.Clear();
      Page page1 = this._context.Handler as Page;
      if (((page1 != null) && page1.IsPostBack) && page1.SmartNavigation)
      {
            this.Write("<BODY><ASP_SMARTNAV_RDIR url="");
            this.Write(url);
            this.Write(""></ASP_SMARTNAV_RDIR>");
            this.Write("</BODY>");
      }
      else
      {
            this.StatusCode = 0x12e; // Código HTTP 302
            this._redirectLocation = url; // Se envía la cabecera Location con este valor
            this.Write("<html><head><title>Object moved</title></head><body>rn");
            // HttpUtility.HtmlEncode codifica sólo algunos caracteres (<, >, &, etc)
            this.Write("<h2>Object moved to <a href='" + HttpUtility.UrlEncode(url) + "'>here</a>.</h2>rn");
            this.Write("</body></html>rn");
      }
      if (endResponse)
      {
            this.End();
      }
}