2009-08-04 2 views
3

I was refactoring some code в a web application today и came across something like это в base class для всех webpages:Использование QueryString в качестве отладочного переключателя?

if (Request.QueryString["IgnoreValidation"] != null) 
{ 
    if (Request.QueryString["IgnoreValidation"].ToUpper() == "TRUE") 
    { 
     SessionData.IgnoreValidation = true; 
    } 
} 

Чтобы меня, это appears к be a Very Bad Thing ™, поэтому я instantly removed все следы этого флага из кода. Во-первых, было несколько утверждений if, на которых проверялось значение флага, что приводило к загроможденной и нечеткой логике. Во-вторых, я столкнулся с другим, более опасным флагом с именем «IgnoreCreditCardValidation». Вы можете догадаться, что это сделал ...

Затем я подумал об этом и вспомнил аналогичный пример из предыдущей работы. В коде приложения, проданном как «защищенный модуль аутентификации», использовался параметр QueryString, используемый для переопределения поведения по умолчанию, что позволяет любому, кто знает об этом, обходить аутентификацию.

Теперь мой вопрос является скорее подтверждением, так ли это плохо, как кажется в моей голове, или я просто слишком остро реагирую, и это обычное явление? Существуют ли какие-либо случаи, когда есть веская причина для этого? Для меня это просто похоже на ужасную смесь лени и небрежности.

Если это дубликат, не стесняйтесь указывать меня в правильном направлении.

Спасибо!

+0

Кто-нибудь помнит бэкдор в фильме WarGames? –

+0

Нет, извините. Мне было 2. :) –

+5

Кто-нибудь постучал в твою дверь, все еще удивляясь, почему их игнорирующие флаги больше не работают? –

ответ

4

Это ужасает ли это обычная практика или нет. +1 к вам за то, что он надел его крайним предрассудком.

1

Я согласен с тобой. Особенно, если модуль предназначен для обеспечения безопасности, это глупое дело в выпуске (неплохо также иметь встроенные отладочные сборки, но это может быть разумным). Это по существу безопасность за неясностью ,

+1

Я бы даже не поместил его в сборку отладки на том основании, что какой-то осел мог включить его для освобождения после того, как я переехал. Лучше избегать плохих идей в головах людей. –

+0

Я бы ** никогда не говорил **, но я бы не удалял его без дальнейших исследований. Возможно, какая-то система тестирования опирается на нее. Вы не должны этого делать, не зная последствий своих действий. –

+0

Если система тестирования опирается на нее, необходимо перезаписать систему тестирования, и кто бы ни писал эту систему тестирования, нужно выпороть. –

1

Это не вы. Тот, кто писал, никогда не занимался публичными веб-приложениями. Как вы правильно отметили, любой, кто знает об этом «бэкдоре», может разрушить хаос вашего приложения.

1

Это оригинальный разработчик, ленивый, когда дело дошло до дизайна и тестирования.

Идеальное решение - это отдельная проверка подлинности или аутентификации кредитной карты и т. Д. Из кода в отдельные dlls/services/etc. Реальные версии затем могут быть заменены макетами, чтобы облегчить тестирование сайта. Услуги также могут быть протестированы независимо.

Эти издевательства никогда не приближаются к производственному серверу, поэтому у вас никогда не должно быть бэкдоров в вашем коде.

Вы также можете заменить любые/все сервисы без обновления вашего приложения - пока новая служба представляет тот же интерфейс, что и оригинал.

1

Я иду против зерна и говорю, что querystrings делают хорошие отладочные переключатели.

Перед тем, как все прыгают на меня - с использованием запроса, чтобы отключить проверку, является ужасно глупым, гигантским дыром в безопасности и никогда не должно произойти. Вы были полностью действительны и оправданы, немедленно закодировав код.

Но для отладки, querystrings работают отлично.У нас есть несколько запросов, которые будут включать идентификаторы для нескольких объектов на наших страницах, чтобы мы могли быстро получить их без входа в производственную базу данных (конечно, не каждый имеет доступ к базе данных Prod DB) или для проверки вычислительных компонентов. Вы просто должны быть осторожны и умны о них.

Смежные вопросы