![]() |
Начинаем веб-программирование не падая лицом в грязь.
Начинаем веб-программирование не падая лицом в грязь.
В статье примеры будут на php, как на самом популярном языке среди программирования для веб. Нужно обрабатывать все данные, которые как либо будут участвовать в sql-запросах, которые будут участвовать в открытии файлов, выводится на страницу. Не надо забивать даже на мелкие детали – это лишь увеличит ваше «забей» в дальнейшем. SQL-Injections Давайте рассмотрим простой пример: PHP код:
Этого не было бы, если бы вы обработали сразу переменную. PHP код:
Но если значение id может быть только целым числом, зачем вообще допускать другие символы? Незачем. Может быть так будет лучше: PHP код:
PHP код:
mysql_escape_string и mysql_real_escape_string именно для этого и созданы. SQL-Injections нас уже не побеспокоят, перейдем дальше. Вывод данных. XSS это бич практически любого динамического сайта в Интернете. А все почему? Да потому что не многие считают это опасной уязвимостью (что очень и очень зря), и то, что просто забывают о том, что вместо ?page=1 злоумышленник может написать ?page=<script>evil_code</script>, который выведется на страницу. Как обезопасится? Так же, как и в первом случае: фильтровать все данные, которые так или иначе будут выводится на странице. Тут могу порекомендовать такой же совет, как и в случае защиты от sql-inj – если значение может быть только int, то и не надо допускать другого! В php есть несколько функций, которые вырезают html теги: htmlspecialchars, htmlentities, strip_tags Все данные, которые будут выводится на страницу должны быть отфильтрованы! Иначе безопасность вас и посетителей сайта может быть под угрозой. Инклудинг файлов. Из-за некорректности кода могут возникнуть и более серьезные угрозы безопасности вашего сайта, чем в предыдущем случае. Часто из-за недостаточной обработке данных на сайтах присутствует возможность инлкуда локальных или удаленных файлов. Если вы используете конструкцию типа приведенной ниже: PHP код:
А что если мы подставим в файл http://evilhost.com/shell.php? Правильно, на вашем сайте будет шелл :) Как защитится? Опять же – проверять данные, переданные скрипту. Скорее всего вам не понадобится никакие название файлов, кроме как из маски a-z Давайте проверим переменную файл регулярным выражением, и если она пройдет проверку, то мы ее и передадим: PHP код:
Пример: PHP код:
PHP код:
Readfile or include? Если в файле не планируется исполнения кода, то можно пользоватся функцией file_get_contents или readfile. Например: PHP код:
Ведь если злоумышленик получит доступ в админ-панель, а там создаст страницу с плохим кодом, то для вас это будет не менее печально, чем если бы был инклудинг файлов. |
Неплохо вроде...) Насчет SQL-Injections неплохо написал nerezus вот здесь https://forum.antichat.ru/thread30641.html там целая тема по тому же способу что ты описал...
Рекомендую к прочтению как в добавку к этой статье. |
Так все хорошо, но начало....(Защита от sql-inj) я бы поправил....
Правильней было бы сделать так: PHP код:
А так молодец....+ 3 |
я просто стараюсь держаться подальше от блядских серверов, чего и всем советую
|
Цитата:
Радует, что ее не будет в PHP6. |
| Время: 07:04 |