Урок этот предназначен скорее для тех, кто уже или прочел предыдущие уроки и знает основы, или же и так знал. Да-да, речь идет о безопасном программировании. Уточню - безопасное программирование не значит, что если написать что-то не так, то скриптописатель может ни с того ни с сего получить волшебный пендель от своего творения, когда не соблюдена безопасность. И это так же не значит, что программа может взорваться с мощью хорошей гранаты.
Нет-нет, безопасной программирование - значит создание такой программы, которая будет правильно работать в самых экстремальных ситуациях, создавая максимальную защищенность во-первых - пользовательским данным, во-вторых - системе, которая ее исполняет.
Почему я на первое место поставил именно данные? Да потому, что в случае "икс" (то есть когда возникла нештатная ситуация), если причинен ущерб системе, то это - расходы на восстановление только системы. А представим, что это у нас банковские операции и что-то там украли или повредили? Вот здесь уже и про гранату и про пендель придется вспомнить.
О том, как надо
Ну, со вступлением вроде бы разобрались, перейдем к делу. С чем же работает каждая программа? Конечно же, с данными. Данные принимают, данные передают, данные обрабатывают, их ищут и так далее. И вот на каждом этапе нужно думать о безопасности. Да, так оно и есть. Нельзя сначала написать скрипт кое-как, а потом приступать к фазе его "дезинфекции". Так не выйдет - мы все люди, и что-нибудь точно забудем. Да и потом, если сразу все делать правильно, то не возникнет и сомнений потом. А, значит, и нужды перепроверять. Хотя, конечно, программ без ошибок не бывает. Но в наших силах сделать так, чтобы их число было минимальным.
О пользователях и хакерах
Теперь я бы хотел рассказать о том, зачем же делать безопасным нашу программу. Ведь если пользователи заинтересованы в сохранности своих данных, с чего бы им вредить системе?.. Так вот, далеко не все пользователи заинтересованы в сохранности данных. А точнее - есть такие, которые заинтересованы в не сохранности чужих данных. Опять же - номера кредитной карты. Как ведь хочется его украсть. А значит, если у нас есть такие деятели, то я настаиваю: с точки зрения системы любой пользователь === хакер. То есть, подводя итог абзацу, скажу: в отношении всех действий пользователя действует презумпция виновности.
Мишени и лазейки
Теперь уже о конкретике. Расскажу о самых частых ошибках в программах. Именно на них нацелены действия хакеров, которые надеются, что автор что-то не учел. Используя такие ошибки, можно подобрать лазейки, и воспользоваться ими. Итак, поехали.
Пример. У нас есть скрипт авторизации - самый частый случай. Пусть он выглядит так:
PHP:
скопировать код в буфер обмена
скопировать код в буфер обмена
- <?PHP
- $admin=0;
- //тут может быть еще что-нибудь предварительное
- $admin=$_REQUEST['admin'];
- if($admin)
- {
- //..функционал админа
- }
- else
- {
- //что-то еще
- }
- ?>