Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » DEL

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10

Открыть новую тему     Написать ответ в эту тему

Terabyte



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DEL

Всего записей: 1325 | Зарегистр. 09-09-2002 | Отправлено: 14:32 20-09-2003 | Исправлено: Terabyte, 21:13 31-08-2017
xntx



хнотик-багоискатель
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Terabyte
подправь название темы, а то не понимается...

----------
Hello world!

Всего записей: 5169 | Зарегистр. 15-02-2003 | Отправлено: 14:40 20-09-2003
Terabyte



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DEL

Всего записей: 1325 | Зарегистр. 09-09-2002 | Отправлено: 14:46 20-09-2003 | Исправлено: Terabyte, 21:14 31-08-2017
xntx



хнотик-багоискатель
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Terabyte

Цитата:
Ну какие ошибки типа как в функции include еще не нужно допускать.

что ты имеешь ввиду. хочешь сказать что функция include это ошибка? хы...
 
хорошо, еще для безопасности надо каждую переменную назначать нулю,
тоесть если в скрипте используем $some то сначала делаем $some = ''; или можно unset($some); чтоб если был врублен register_globals нельзя было через гет закинуть левую переменную

----------
Hello world!

Всего записей: 5169 | Зарегистр. 15-02-2003 | Отправлено: 14:52 20-09-2003
Terabyte



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DEL

Всего записей: 1325 | Зарегистр. 09-09-2002 | Отправлено: 15:08 20-09-2003 | Исправлено: Terabyte, 21:14 31-08-2017
Advanced_Guest



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Terabyte
на примере с Include:
если в названии файла сначала есть точки или "/" или "\"  - попытка хака.
 
потом обычно делаеться так:
 

Код:
switch ($mode) {
case 'file1':
   include "file1.php";
   break;
case 'file2':
   include "file2.php";
   break;
case 'file3':
   include "file3.php";
   break;
default:
   include "file1.php";
}

 
то есть даже если хакер и ввёдёт типа:
$mode='..\hacked_by.php'
то ничего не даст....
(вставиться  file1.php )
 
и так далее.
ещё можешь использовать функцию  
$text=addslashes($text);
 
заменяет все \ -> \\, ' -> \' , " -> \"
 
правда при выводе не забывай делать stripslashes($text) (обратная функция.)

----------
The Abyss - UO, LA2, Ботва, BSFG

Всего записей: 2446 | Зарегистр. 14-04-2002 | Отправлено: 16:08 20-09-2003
dmka



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Еще распространенная ошибка писать внешние переменные прямо в SQL запрос:
 
"DELETE FROM MyTable WHERE id=$id"
 
вместо $id передается строка вроде "1 OR (1=1)"

Всего записей: 948 | Зарегистр. 23-04-2003 | Отправлено: 18:53 25-09-2003
Advanced_Guest



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dmka
 

Цитата:
Еще распространенная ошибка писать внешние переменные прямо в SQL запрос:  
 
"DELETE FROM MyTable WHERE id=$id"  
 
вместо $id передается строка вроде "1 OR (1=1)"

 
аха, и лечиться такое:
 
$id=addslashes($id);  
 
и потом например так:
 
"DELETE FROM MyTable WHERE id='$id' limit 1"  
 
limit 1 говорит что надо удалить только 1 строку. (не всегда нужно, но обычно по id удаляют только 1 строку)

----------
The Abyss - UO, LA2, Ботва, BSFG

Всего записей: 2446 | Зарегистр. 14-04-2002 | Отправлено: 19:55 25-09-2003
dmka



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
2 Advanced_Guest
Причем тут limit 1 ? Что кроме mysql других баз в природе не существует? Да и limit не гарантирует, что удалится та самая строка.
 
Просто нужно параметр $id проверить на допустимость - regexp-ом или intval($id) сделать. Строковые переменные соответственно проескейпить.

Всего записей: 948 | Зарегистр. 23-04-2003 | Отправлено: 13:29 26-09-2003
Advanced_Guest



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
dmka
про limit 1 я специально написал что это не обязательно, но иногда можно использовать для точности.
 
а про ескейпность- тоже  

Цитата:
 аха, и лечиться такое:  
 
$id=addslashes($id);    


----------
The Abyss - UO, LA2, Ботва, BSFG

Всего записей: 2446 | Зарегистр. 14-04-2002 | Отправлено: 16:31 26-09-2003
Kristaliar



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Приемы безопасного программирования веб-приложений на PHP

----------
Дело ясное, что дело темное.

Всего записей: 835 | Зарегистр. 29-08-2002 | Отправлено: 14:21 29-09-2003
Terabyte



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DEL

Всего записей: 1325 | Зарегистр. 09-09-2002 | Отправлено: 22:19 29-09-2003 | Исправлено: Terabyte, 21:14 31-08-2017
Cheery



.:МордератоР:.
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Terabyte

Цитата:
Кстати, вот очень интересные и познавательные статейки про дыры в ПХП:  

Разве только для полных ламеров.. Меня больше всего интересует.. откуда они взяли,
Цитата:
Наверное, слышал, что знаменитый apache.org (веб-сайт команды разработчиков, чей веб-сервер один из самых распространенных в мире) в 2000 году подвергся хакерской атаке, и был произведен дефейс главной страницы сайта.

Если они используют только perl..
И то, что там написано, давно известно.. пережевано по много раз в manual.

----------
Away/DND

Всего записей: 52737 | Зарегистр. 04-04-2002 | Отправлено: 22:24 29-09-2003
Terabyte



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DEL

Всего записей: 1325 | Зарегистр. 09-09-2002 | Отправлено: 22:27 29-09-2003 | Исправлено: Terabyte, 21:14 31-08-2017
Svarga

Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
В рассылке пришло... может кому-то и полезно будет :

Цитата:
** Открытие файлов и внешние данные. Потенциальная уязвимость php-скриптов.
 
В 2002 году параллельно несколькими группами, занимающимися поиском уязвимостей в ПО, была обнаружена серьёзная и мощная уязвимость в php.  
В русскоязычном интернете эта уязвимость практически не была освещена. На русскоязычных сайтах по проблемам безопасности мне не удалось найти непосредственного сообщения об этой уязвимости.
Предупреждаю ничего нового в этом материале не будет. Несмотря на впечатляющие возможности для злоумышленника, данная уязвимость — просто комбинация общеизвестных свойств php.
 
Уязвимость
 
Url fopen wrapper: Для увеличения функциональности и упрощения кодирования, разработчики php сделали такую особенность в функциях fopen, file, include и прочих
Если имя файла начинается с "http://", сервер выполнит HTTP-запрос, скачает страницу, и запишет в переменную как из обычного файла. Аналогично работают префиксы "ftp://", "php://" (последний предназначен для чтения и записи в stdin, stdout и stderr).
Нужно это было для того, чтобы разработчики сайтов не мучались с библиотеками http-запросов и не писали их вручную
 
Данная опция отключается в настройках php, параметр allow_url_fopen.
 
CR/LF в HTTP-запросах: Комбинация символов carriage return и line feed в HTTP-запросе разделяет заголовки. Подробно об этом можно почитать в статье Антона Калмыкова «Генерация HTTP-запросов» [ http://detail.phpclub.net/2001-03-26.htm ].
 
Эту комбинацию символов можно передать в GET-запросе в виде "%0D%0A".
 
Untrusted input: На многих сайтах страницы генерируются скриптом-шаблонизатором. В скрипт перенаправляются все запросы сайта. Из REQUEST_URI берётся имя файла, который надо открыть. Файл считывается, к нему добавляется шаблон с навигацией, шапкой и т.п., и результат выдаётся клиенту.
 
Нерадивый или неопытный программист запросто может написать открытие файла без проверки данных:
 
<?  
echo implode("", file(substr($REQUEST_URI, 1)));  
 
От запроса отбрасывается первый символ — слэш — и открывается файл. Злоумышленник легко может вписать в качестве пути к файлу на сервере строку http://example.com:
 
http://n00b.programmer.com/http://example.com
 
Другой вариант — все адреса на сайте имеют вид
 
http://n00b.programmer.com/index.php?f=news
 
В таком случае злоумышленник будет пробовать открыть адрес типа
 
http://n00b.programmer.com/index.php?f=http://example.com
 
Очень важно не доверять входящим данным и фильтровать при помощи  
регулярных выражений входящие запросы.
 
Эксплойт: Поскольку в приведённом примере адрес никак не проверяется, в запрос можно вставить строку с HTTP-запросом.
Если злоумышленник откроет путь
 
index.php?f=http%3A%2F%2Fexample.com%2F+HTTP%2F1.0%0D%0A%0D%0A
Host:+example.com%0D%0AUser-agent:+Space+Bizon%2F9%2E11%2E2001+
%28Windows+67%29%0D%0Avar1%3Dfoo%26var2%3Dbar%0D%0A%0D%0A
 
то скрипт выполнит HTTP-запрос:
 
GET example.com/ HTTP/1.0\r\n
Host: example.com\r\n
User-agent: Space Bizon/9.11.2001 (Windows 67)\r\n
var1=foo&var2=bar\r\n
\r\n
HTTP/1.0\r\n
Host: www.site1.st\r\n
User-Agent: PHP/4.1.2\r\n
\r\n
 
Последние три строки скрипт добавляет автоматически, но два \r\n перед ними означают конец запроса.
 
Таким образом, незащищённый скрипт можно использовать как прокси-сервер. Зная несколько "дырявых" сайтов, злоумышленник может выстроить из них цепочку, чтобы его было сложнее найти.
 
Умное использование эксплойта: Если у провайдера, предоставляющего бесплатный демо-доступ, дырявый сайт, можно написать скрипт для домашнего сервера, который бы формировал запросы к такому прокси-серверу и экономил немного денег.
 
Это дело, безусловно, подсудное и наказуемое, но по большому счёту баловство.
 
Более прибыльное использование чужой машины как прокси — рассылка коммерческого спама. Пример из статьи, написанной Ульфом Харнхаммаром
[http://archives.neohapsis.com/archives/vulnwatch/2002-q3/0109.html]:
 
index.php?f=http%3A%2F%2Fmail.example.com%3A25%2F+HTTP/1.0%0D%0AHELO+  
my.own.machine%0D%0AMAIL+FROM%3A%3Cme%40my.own.machine%3E%0D%0ARCPT+  
TO%3A%3Cinfo%40site1.st%3E%0D%0ADATA%0D%0Ai+will+never+say+the+word+  
PROCRASTINATE+again%0D%0A.%0D%0AQUIT%0D%0A%0D%0A  
(должно быть одной строкой)
 
модуль PHP соединится с сервером mail.example.com по 25 порту и отправит следующий запрос:
 
GET / HTTP/1.0\r\n
HELO my.own.machine\r\n
MAIL FROM:\r\n
RCPT TO:\r\n
DATA\r\n
i will never say the word PROCRASTINATE again\r\n
 .\r\n
QUIT\r\n\r\n
 
HTTP/1.0\r\n
Host: mail.site1.st:25\r\n
User-Agent: PHP/4.1.2\r\n\r\n
 
PHP и почтовый сервер будут ругаться, но письмо будет отправлено.
 
Имея такую уязвимость в чьем-то сайте, можно искать закрытый почтовый релей, принимающий от эксплуатируемого веб-сервера почту. Этот релей не будет в чёрных списках провайдеров, и рассылка спама может получиться очень эффективной.
На своём сайте я нашёл множество запросов с 25-м портом в пути. Причём до начала этого года таких запросов не было. Раньше о такой уязвимости знали единицы любопытных пользователей, и лишь в прошлом году дыра стала общеизвестной и поставлена на поток спаммерами.
Меры защиты от эксплойта: Вам, как разработчику или владельцу сайта, важно сделать всё возможное, чтобы через ваш сайт никто не смог разослать спам. Если это получится, разослан он будет с какого-нибудь гавайского диалапа, владельцы которого не понимают человеческого языка, а крайним могут сделать именно вас.
Проверка журнала запросов: Для начала полезно ознакомиться со списком уникальных адресов, запрашиваемых с сайта. Это поможет узнать, были ли случаи атак и использования дырки.
Обычно спамеры сразу проверяют возможность соединения с нужным им почтовым релеем по 25 порту. Поэтому искать следует строки ":25" и "%3A25".
Настройка php: Самый простой способ отключить возможую уязвимость — запретить открывать URL через файловые функции.
Если вы администратор своего сервера — запрещайте allow_url_fopen в настройках php. Если вы просто клиент — запретите у себя локально. В файле .htaccess для корня сайта напишите строку:
 
php_value allow_url_fopen 0
 
Если вы злой хостинг-провайдер, можете запретить URL fopen wrapper для всех клиентов при помощи директивы php_admin_value. Включение безопасного режима (safe mode) в данном случае не поможет, функция продолжает работать исправно.
 
Изменение кода: Возможна такая сложная ситуация: вы клиент, а нерадивый админ хостинг-провайдера вписал все установки php в php_admin_value, и поменять их нельзя.
 
Придётся модифицировать код скриптов. Самый простой способ — искать функции fopen, file и include, открывающие файлы из имён переменных. И вырезать функцией str_replace префиксы http:// и ftp://.
Впрочем, иногда скрипту, всё-таки, необходимо открывать адреса, которые приходят от пользователя. Например, скрипт-порнолизатор, который вставляет в текст матерки или заменяет текст на ломаный русский язык ("трасса для настайащих аццоф, фсем ффтыкать"). Наверное, больше всего от неряшливого программирования пострадали именно эти сайты.
В данном случае вполне можно ограничиться вырезанием "\r\n" из полученной строки. В таком случае злоумышленник не сможет добавить свой собственный заголовок к запросу, который отправляете вы.
Прекращение работы при оффенсивном запросе: Клиент, сканирующий ваш сайт на предмет непроверяемых переменных, создаёт лишний трафик и загружает процессор сервера. Понятно, что ему не нужны страницы, которые генерирует ваш сайт, если они не работают как прокси.
Желательно убивать такие запросы ещё до запуска php-интерпретатора. Это можно сделать при помощи модуля mod_rewrite. В файле .htaccess в корне сайта я поставил такую строку:
 
RewriteRule ((%3A|:)25|%0D%0A) - [G]
 
При этом предполагается, что на сайте не будут отправляться методом GET формы с многострочным пользовательским вводом. Иначе они будут остановлены этим правилом.
 
Если вы при помощи mod_rewrite поддерживаете адресацию, удобную для чтения, то скорее всего, двоеточие и CRLF не используются. Поэтому другие строки RewriteRule не будут подходить под сканирующий запрос, и строку, прекращающую обработку запроса, лучше поместить в конце списка правил. Тогда обычные запросы будут переписываться и перенаправляться до этой строки (используйте флаг [L]), что уменьшит время их обаботки.
В зависимости от разных условий оно может варьироваться.
 
=============================================
Источник: Club of the developers PHP
© 2002-2003 Copyright by GreatWeb Design
Копирование материалов рассылки возможно только в случае явного указания  
на сайт "GreatWeb.RU" как на источник информации.


----------
away.

Всего записей: 4161 | Зарегистр. 25-06-2002 | Отправлено: 02:20 10-10-2003 | Исправлено: Svarga, 02:24 10-10-2003
IntenT



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Svarga
ну, блин.. прям америку открыли.... ты смотри какие дыры в пхп..
Интересно, и долго эту уязвимость искали эти
Цитата:
несколько групп, занимающихся поиском уязвимостей в ПО


Всего записей: 1584 | Зарегистр. 16-12-2001 | Отправлено: 20:26 10-10-2003
Svarga

Moderator
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
IntenT
да кто говорит, что Америку
я ж и постил с припиской-- "может кому-то полезно будет "


----------
away.

Всего записей: 4161 | Зарегистр. 25-06-2002 | Отправлено: 23:08 10-10-2003
Terabyte



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DEL

Всего записей: 1325 | Зарегистр. 09-09-2002 | Отправлено: 10:09 11-10-2003 | Исправлено: Terabyte, 21:15 31-08-2017
Terabyte



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
DEL

Всего записей: 1325 | Зарегистр. 09-09-2002 | Отправлено: 08:35 13-10-2003 | Исправлено: Terabyte, 21:15 31-08-2017
woffer

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Terabyte
cлэши добавляет:

Код:
<?
$badStr = "aaa'\"aaa";
 
print $badStr ;
print "\n";
print addslashes($badStr);
?>

 
E:\a.php
Content-type: text/html
X-Powered-By: PHP/4.3.1
 
aaa'"aaa
aaa\'\"aaa
E:\>
 

Всего записей: 935 | Зарегистр. 11-10-2002 | Отправлено: 09:16 13-10-2003
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10

Компьютерный форум Ru.Board » Интернет » Web-программирование » DEL


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru