Это моя вторая статья, так что судить строго, всё еще не стоит. Повторюсь, если вы щитаете себя продвинутым ПХП кодером, то читать вам сдесь скорее всего нечего
Итак, начнём с самых распространенных ошибок при кодинге на ПХП 1. Самый распостранненый до сих пор БАГ В исходниках он выглядит так - include('$file'); Суть этой ошибки в том, что это уже сам по себе локальный инклуд, то есть при желании, мы можем подставить в переменную $file любое значение и получить текст файла, при этом эта уязвимость опасна как сама по себе, так и её последствия... С помощью этого БАГА можно получить доступ в админку, прочитав файл .htaccess в котором хранятся логины и пароли, которые без проблем расшифровываются Джоником... Во вторых через эту багу можно прочитать файл etc/passwd в котором хранятся пользователи и пароли для доступа к системе, если открыт доступ по ССШ то эта уязвимость становится еще более опасной ....
Методы избежания... Во первых можно сделать так, как делаю я сам... То есть перед инклудом, мы пишем не include($file), а заносим файл в базу данных sql и берём из неё по идентификатору. То есть исходник будет выглядеть так - $link=mysql_query("Select `name` from `include` where id='".$id."'); include($link["name"]); Это способ безопасен в связи с тем, что на переменную инклуда пользователь повлиять не может. Структура бд при этом может выглядеть так --- _________________ | id | name | |_____|___________|
Также, большинство кодеров, при програмировании полагаются на опытность Админов, которые будут устанавливать их продукт, с этим я столкнулся, когда просматривал исходники интернет казино, при чем программер, утверждал, что вводимые поля фильтруються автоматом... Тоесть не ленитесь, в тех скриптах, где используются формы прописать включение magicquotes...
2. "Пустые переменные"... Ситуация следующая, есть переменная значение которой используются только в скрипте, и за пределы скрипта не выходит... Ошибка следующая - действия с этой переменной производятся, без проверки этой переменной... Из-за этой ошибки, если я не ошибаюсь была найдена БАГА в MINIBB. Тоесть, если переменная используется только в скрипте, не забывайте её обнулить перед использованием!!!
3. Запросы SQL ... Третья по распространености ошибка. Когда кодер составляет sql запрос mysql_query("Select * from `table` where id=".$id."); Проблема в том что в такой ситуации, можно "выпрыгнуть" за пределы запроса, то есть ввести в переменную id данные вроде 1+union+select+... То есть конечный запрос должен выглядеть так --- mysql_query("Select * from `table` where id='".$id."'); То есть переменную надо ограничивать двойной кавычкой, чтобы за пределы запроса нельзя было выпрыгнуть... Далее обязательное требование, если данные передаються из формы, то либо в ручную фильтровать переменную на спец символы, либо включить MAGICQUOTES...