П О Р Т А Л                            
С Е Т Е В Ы Х                          
П Р О Е К Т О В                        
  
                                                 
Главная

О проекте

Web-мастеру
     HTML & JavaScript
     SSI
     Perl
     PHP
     XML & XSLT
     Unix Shell

MySQL

Безопасность

Хостинг

Другое







Самое читаемое:

Учебник PHP - "Для Чайника".
Просмотров 98027 раз(а).

Иллюстрированный самоучитель по созданию сайтов.
Просмотров 29044 раз(а).

Учебник HTML.
Просмотров 56168 раз(а).

Руководство по PHP5.
Просмотров 25918 раз(а).

Хостинг через призму DNS.
Просмотров 30442 раз(а).

Подборка текстов стандартных документов.
Просмотров 28945 раз(а).

Учебник PHP - Самоучитель
Просмотров 33668 раз(а).

Документация на MySQL (учебник & справочное руководство)
Просмотров 34955 раз(а).

Внешние атаки...
Просмотров 26929 раз(а).

Учебник PHP.
Просмотров 22759 раз(а).

SSI в примерах.
Просмотров 17840 раз(а).



 
 



ГЛАВА 16. Безопасность.

Проблемы программирования (безопасность данных)

Обработка пользовательского ввода

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

Простейший способ борьбы с потенциально опасным пользовательским вводом — обработка полученных данных стандартной функцией escapeshellcmd().

escapeshellcmd()

Функция escapeshellcmd() экранирует все сомнительные символы в строке, которые могут привести к выполнению потенциально опасной системной команды:

string escapeshellcmd(stringкоманда) 

Чтобы вы лучше представили, к каким последствиям может привести бездумное использование полученных данных, представьте, что вы предоставили пользователям возможность выполнения системных команд — например, `ls -l`. Но если пользователь введет команду `rm -rf *` и вы используете ее для эхо-вывода или вставите в вызов ехес() или system(), это приведет к рекурсивному удалению файлов и каталогов на сервере! Проблемы можно решить предварительной «очисткой» команды при помощи функции escapeshel lcmd(). В примере `rm -rf *` после предварительной обработки функцией escapeshellcmd() строка превращается в \ `rm -rf *\`.

Обратные апострофы (backticks) представляют собой оператор РНР, который пытается выполнить строку, заключенную между апострофами. Результаты выполнения направляются прямо на экран или присваиваются переменной.

При обработке пользовательского ввода возникает и другая проблема — возможное внедрение тегов htmlL. Особенно серьезные проблемы возникают при отображении введенной информации в браузере (как, например, на форуме). Присутствие тегов htmlL в отображаемом сообщении может нарушить структуру страницы, исказить ее внешний вид или вообще помешать загрузке. Проблема решается обработкой пользовательского ввода функцией strip_tags().

strip_tags()

Функция strip_tags() удаляет из строки все теги htmlL. Синтаксис:

string strip_tags (string строка [,string разрешенные_теги])

Первый параметр определяет строку, из которой удаляются теги, а второй необязательный параметр определяет теги, остающиеся в строке. Например, теги курсивного начертания (<1 >...</ 1>) не причинят особого вреда, но лишние табличные теги (например, <td>...</td>) вызовут настоящий хаос. Пример использования функции strip_tags():

$input = "I <i>really</i> love РНР!";
$input = strip_tags($input);

// Результат: 

$input = "I really love PHP!";

На этом завершается краткое знакомство с двумя функциями, часто используемыми при обработке пользовательского ввода. Следующий раздел посвящен шифрованию данных, причем особое внимание, как обычно, уделяется стандартным функциям РНР.

Назад | Содержание раздела | Общее Содержание | Вперед



 





Copyright © 2005-2011 Project.Net.Ru