Защита Web-приложений
В этом уроке мы ознакомимся с некоторыми недостатками безопасности Web-приложений и рассмотрим, как их обнаружить. После изучения этого урока, Вы будете знать, по крайней мере, некоторые из наиболее распространенных способов, как нарушитель может получить доступ к Вашему ресурсу.
Вначале начнем с некоторых общих недостатков Web-приложений, которые могут быть проверены относительно легко. Наиболее общим недостатком является, обработка входных данных.
Рассмотрим сценарий проверки регистрационных данных. Допустим, что этот сценарий принимает два параметра – имя пользователя и пароль, методом POST. В исходный код этого сценария можно включить проверку подлинности, а именно:
$sqlquery="SELECT * FROM USERS WHERE username='$username' AND password='$password'";
if(function_to_perform_query($sqlquery))
{
echo “Вы успешно авторизировались”;
}
else {
echo “Неправильное имя пользователя или пароль. Ошибка”;
}
Выглядит довольно просто, не так ли? Предположим, что пользователь в поле Логин ввел admin, а пароль ввел:
'a' or 'a'='a
Теперь переменная $sqlquery примет следующие значения:
SELECT * FROM users WHERE username='admin' AND password='a' or 'a'='a'
Если все пройдет успешно, то злоумышленник войдет с правами администратора. Это очевидно! Sql запрос всегда будет возвращать истинное значение из-за дополнительного пункта 'a'='a', которые, конечно, всегда будет правильным, так как значение 'a' всегда будет равняться ‘a’.
Другим важным моментом является то, что многие языки программирования поддерживают функции вызова, что позволяет использовать внешние приложения. Многие Web-приложения не выполняют проверку входных данных параметров, которые вызываются, такие как system()
Например:
system ("/bin/echo $i");
Если переменная $i – это параметр принят от пользователя, то злоумышленник может ввести следующее значение:
'cat /etc/passwd'
Это приведет к выполнению следующего вида:
/bin/echo 'cat /etc/passwd'
Показывая тем самым файл, который находиться по пути 'cat /etc/passwd', вместо того, что Вы хотели показать.
Для того, чтобы защитить свое приложение, разработчик должен проверять входные данные отфильтровывать их с помощью символов:
' . ; / @ & | % ~ < > " $ ( ) { } [ ] * ! '
Так же потенциально опасно использовать Cookie. Cookie – это часть информации которая загружается на жесткий диск и храниться на компьютере. Пользователь или программы могут изменить их, что уже является небезопасным для Web-приложения. Рассмотрим Cookie со следующими данными:
lang=en-us; user=joe; time=10:10 EST;
Злоумышленник может изменить эти данные и иметь доступ к более высокой привилегированной учетной записи.
Web-приложение также может поддерживать вложение сессий в URL
http://www.testserver.com/authenticate.cgi?user=john&sessionid=123456789
Для того, чтобы пользователи не могли увидеть нужные данные через URL, я посоветую зашифровывать их с помощью MD5. Это позволит гораздо труднее повторить или скопировать нужные данные.
Также еще используются скрытые элементы. Эти статические элементы содержаться в Web-формах. Они обычно не отображаться в браузерах, а используются только для передачи информации между различными Web-формами через протокол POST. Вот пример скрытого элемента.
<INPUT NAME="example" TYPE=”HIDDE” VALUE="5.25">
Проблемой является то, что злоумышленник может изменить на любое значение которое ему нужно. Представьте себе, что вы используете скрытые элементы в Интернет магазине, который принимает онлайн платежи. Значение example – это сумма к оплате. Если пользователь вместо значение 5,25 напишет например -100, приложение может подумать, что она должна этому клиенту деньги и переведет на его счет 100 у.е.
Для того чтобы защитить свое Web-приложение, не забывайте использовать проверку входных данных. В следующих уроках я еще вернусь к этой теме, и мы рассмотрим другие уязвимые места Web-приложений. А пока на этом все!
Последние уроки категории:
Сокращение PHP кода
Вы задумывались когда — нибудь о том, что лишний и бесполезный код убивает ваше время разработки приложения/сайта. Хотя это и кажется мелочью, но когда такой мелочи становится много, то время, потраченное впустую, становится ценным. И так давайте посмотрим, что можно и нужно сокращать...
Видимость переменных в PHP
В данном уроке рассматривается область видимости переменных PHP. Объясняется различие локальной и глобальной области видимости, показывается как получить доступ к глобальным переменным внутри функции, как работать с суперглобалами и создавать статические переменные.
Как читать Rss ленты?
Читалки и агрегаторы RSS используются для доступа, чтения и управления периодически-обновляемыми лентами RSS (или Atom), которые генерируются веб-сайтами. Эти ленты предоставляют доступ к последним материалам с этих сайтов.
Установка и настройка PHP+Apache
В этом уроке хотелось бы поднять очень интересную тему – Установка и настройка веб сервера PHP5 + Apache. В интернете довольно много различных инструкций по данной теме, но только вот в основном это копипаст, а не инструкция для человека, я же постараюсь объяснить все намного проще – на пальцах. Причина для установки локального вебсервера довольно много, например скорость выполнения и отладки скриптов, простота загрузки и модернизации контента и еще много чего.
Как выбрать фреймворк
Так уж повелось, что лень – это двигатель прогресса и как бы странно это не звучало, все те блага цивилизации, которые мы имеем сейчас были сделаны в первую очередь для нашего комфорта. Так и программисты чтобы облегчить себе жизнь и тем самым получить возможность создавать более сложные проекты за менее долгое время придумали сделать себе фреймворки.




Комментарии: