Ответ 1
Одна вещь, которую вы можете сделать, - это получить список зарегистрированных HTTP-обработчиков и проверить, обрабатывается ли они системным классом. Предполагая, что вы не называете свои собственные классы в пространстве имен System.*
, это довольно безопасно:
using System.Configuration;
using System.Web.Configuration;
Configuration config = WebConfigurationManager.OpenWebConfiguration("/");
HttpHandlersSection handlers = (HttpHandlersSection) config
.GetSection("system.web/httpHandlers");
List<string> forbiddenList = new List<string>();
// next part untested:
foreach(HttpHandlerAction handler in handlers.Handlers)
{
if(handler.Type.StartsWith("System."))
{
forbiddenList.Add(handler.Path);
}
}
В качестве альтернативы вы можете отменить поиск и перечислить все существующие обработчики, кроме тех, которые находятся в вашем собственном (или текущем) домене, возможно, предоставлены некоторые исключения (т.е. если вы хотите переопределить существующий обработчик изображений). Но что бы вы ни выбрали, это дает вам полный доступ к уже зарегистрированным.
Примечание: обычно проще сделать обратное. Кажется, вы хотите, чтобы в черный список попали несколько путей, но вместо этого, если вы можете сделать белый список (т.е. Составить список тех расширений, которые вы хотите обработать), вы можете сделать это самим намного проще.