2010-01-06 4 views
1

Я склонен к написанию безупречных приложений. Например, с PHP-сайтом, я проверяю все входы с клиентской стороны с помощью JS. На стороне сервера я снова проверяю. С обеих сторон я проверяю пустоту и другие шаблоны (адрес электронной почты, телефон, URL, номер и т. Д.). И затем я разделяю вредоносные теги или символы, обрезаю их (на стороне сервера). Позже я конвертирую вход в нужные форматы/типы данных (строка, int, float и т. Д.). Если библиотека предназначена только для серверной части, я даже даю разработчикам шанс на изящную деградацию и допускаю терпимые наихудшие входы и нормализуются к приемлемым (у меня есть предопределенный набор приемлемых).Написание дурацких приложений против записи для производительности

Теперь я читаю библиотеку, которую я написал полтора года назад. Мне интересно, насколько разработчики настолько злы или мне не хватает IQ для меня, так много изящного деградации, найдя все возможное, чтобы сделать парней прав, даже они дали дрянной вход, который серьезно вредит производительности. Или я должен делать минимальную проверку и ожидать, что разработчики смогут и намеренно дать правильный ввод? У меня нет надежды на конечных пользователей, но я должен больше доверять разработчикам и предоставлять им приложение/библиотеку с лучшей производительностью?

+0

У меня действительно нет никакого мнения, кроме этого: какой бы вы ни выбрали, зачеркните ад из него. –

+0

Спасибо, Майк. Не могли бы вы дать больше обоснований или подробностей? Благодарю. – Viet

+2

Foolproof + производительность? – spender

ответ

6

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

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

+0

+1 Для «исправления недействительного ввода автоматически может быть столько же проклятия, сколько и благословение». – Viet

3

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

2

Конечные пользователи (будь то программисты, использующие ваш инструмент или не-программисты, использующие ваше приложение) не должны быть глупыми или злыми, чтобы вводить неправильную вещь. Как программисты, мы слишком часто делаем неправильные предположения о что для них очевидно.

Это первое, что само по себе оправдывает всестороннюю проверку. Но валидация - это не то же самое, что угадать, что они имели в виду от того, что они набрали, и вывести правильный ввод из-за неправильного - если правила вывода также не известны пользователям (например, автоматическое исправление Word, например).

Но что вы ищете? Нет никакой проверки на стороне клиента (или на стороне сервера, если на то пошло), которая занимает больше времени, чем вторая или около того, что является приемлемым временем отклика.

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

+0

+1 Спасибо за рассуждение. – Viet

1

Microsoft допустила ошибку, доверяя программистам делать правильные вещи в дни Windows 3.1 и, в меньшей степени, Windows 95. Вам нужно только read a fewposts от Раймонда Чена, чтобы узнать, куда ведет эта дорога.

(PS Это не рыть против Microsoft - это утверждение о том, о том, как программисты злоупотребляют более либеральной Win16, либо намеренно или по незнанию)

+0

+1 Спасибо за ссылки. – Viet

1

Я думаю, вы правы в том, смещена в сторону дурака Приложения. Я бы не стал предполагать, что это ухудшает производительность, чтобы вызывать большую озабоченность. Скорее, я буду рассматривать проблемы производительности отдельно, начиная с профилирования или моего любимого метода, stackshots. Должен быть способ получить их в PHP.

+0

+1 спасибо Майку. Никогда не слышал об этом. – Viet