![]() |
Модераторы: Aliance, skyboy, MoLeX, ksnk |
![]() ![]() ![]() |
|
Opik |
|
||||||||||||||||||||||||||||||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 1918 Регистрация: 6.10.2004 Где: Рига Репутация: нет Всего: 55 |
Первое и самое главное правило программиста:
Никогда не доверяй тому, чего приходит от пользователя! Больше не буду мучить теорией т.к не люблю всё это, сразу к живым примерам. Ошибка №1: include-баг Ошибка №1 заключается в т.н include-баге. Описание: Вы делаете простенький движок сайта со следующей структурой:
и навигация происходит методов ссылок, типа:
т.е переменная $page содержит имя подлючаемого файла. Если Вы делаете сайт такого типа, то , что мешает хакеру воспользоваться данной дырой и сделать своё коварное дело? ничего ![]() а сделает он следующим образом: Метод №1: подставит своё значение page:
Тем самым благополучно получит содержимое этого файла на экран. (В нем хранятся пароли, однако на современных хостах они обычно зашифрованы ![]() Метод №2: Include своего скрипта. Если на сервере включена опция open_wrappers (Возможность работы с удаленными файлами), то хакер может поступить и так:
А файл hack.txt:
Если на сервере есть возможность пользоваться системыни командами, то хакер получит список всех файлов в данном каталоге. И что самое ужасное может выполнять Shell команды, что собственно влечет за собой взлом сервера. Решения: Функция basename. Эта функция вернет имя файла, чей путь был передан в качестве параметра. Если имя файла оканчивается на suffix, он также будет отброшен. Например Пример 1. Пример использования функции basename()
на деле:
Избежать инклуда можно указыв все возможные варианты:
Для полной безопасности я воспользовался уже известной функцией basename() Однако такой подход не удобен, если страниц много. Если же вам необходимо подключать файлы из разных каталогов, то можно поспользоваться оператором switch или старыми добрыми if elseif else…например:
Последний вариант, и наверное более верный, пропускать только "подходящие символолы", это A-Za-z0-9_- и делать это примерно так:
Ошибка №2: register_globals Сразу скажу, что это ошибкой не является, но это не мешает быть причиной взломов. На многих серверах эта опция PHP стоит в положении ON, что значит доступ к переменным окружения через их индекс напрямую, из вышеуказанного примера: $page, правильно будет использовать $_GET['page']. Сейчас кратко скажу почему оно именно так: Указывая суперглобальный(т.е доступным из любого места программы(main, class, function)) массив $_GET, мы говорим программе брать значение только из метода GET. Иначе хакер мог бы воспользоваться, например, методом POST и подставить своё значение ![]() Доступные суперглобальные массивы:
Далее распинаться по поводу register_globals я не хочу, т.к по этому поводу написана не одна статья... К добавок скажу, что на момент отладки скрипта включите отображение всех нотайсов (сообщений PHP):
в PHP5 лучше установить уровень E_STRICT И определяйте все значения заранее. Тем самым Вы избавитесь от возможных ошибок . Когда Вы заканчиваете режим отладки и выставляете Ваше творение на общее обозрение ставьте нулевой вывод ошибок, т.е
Ошибка №3: SQL-инъекции SQL – инъекции[b] – это SQL запросы, которые выполняет хакер для получения нужного ему результата. Приведу пример:
1) Узнать существующий логин, например админа – Admin; 2) Логиниться, если через форму, то, в поле для пароля ввести: ' or a = 'a Тем самым получится запрос:
Как бороться: 1) Перед подставлением параметра, обязательно его обрабатывать функцией mysql_escape_string(); Эта функция экранирует все SQL спец-символы в unescaped_string, вследствие чего, её можно безопасно. Эта функция идентична функции mysql_real_escape_string. Однако в последняя экраниует в зависимости от кодировки, в которой Вы работаете с БД; 2) Если переменная заведомо является числом, можно привести её к числовому виду:
Пару советов: 1) Тчательно шифруйте пароли доступа, например, функцией md5, чтобы усложнить расшифровку хеша, можете добавлять случайную строку. 2) Делать пароли на базу и FTP разными. Ведь имея возможность читать файлы, хакер сможет получить полный доступ к серверу. При хранении данных от пользователя, например в гостевых книгах делать проверки на html теги – htmlspecialchars(); 3) Если есть возможность обойтись без функции system. То лучше вообще её отключить (в конфиге disable_functions). В заключение: Если вы определили, что на сервере вашего провайдера возможны подобные действия, попросите администратора запретить их. если ваш скрипт написан безупречно, но вы вынуждены использовать shared hosting, вы ставите свой сайт под удар маразматиков, чьи криво написанные сайты лежат на том же сервере, что и ваш. Обсуждение здесь Это сообщение отредактировал(а) Opr - 19.5.2005, 02:57 |
||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||
IZ@TOP |
|
|||
![]() Панда-бир! ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4795 Регистрация: 3.2.2003 Где: Бамбуковый лес Репутация: 1 Всего: 73 |
Думаю что про метод №2 надо уточнить чтобы было понятно, записав в урл какую нибудь команду: cmd=rmdir(/)...
-------------------- Один из розовых плюшевых-всадников апокалипсиса... очень злой... Семь кругов ада для новых элементов языка Мои разрозненные мысли |
|||
|
||||
InfMag |
|
|||
… ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1037 Регистрация: 21.11.2004 Репутация: нет Всего: 4 |
Мдя, очень полезная статья, но она еще и дает информацию для самих хакеров...
![]() ![]() Кстати, люди, если не хотите, чтобы юзеры видели содержимое ваших папок, набирая типа: http://mysite.ru/images/ , то просто в папках, не имеющих главных файлов посоздавайте пустые файлы просто - index.html ... Добавлено @ 19:21 И еще одна фишка, для людей таких как я - не очень любящих MySQL и использующих простые файлы и функцию explode. Для того, чтобы юзеры не могли набирая http://site.ru/data/passwd.dat увидеть ваши пароли, либо MD5 хеши (их можно легко подобрать, например через MD5 Inside), то создайте папку date в корневом коталоге Вашего сайта (то бишь где валяются папки site(или www), cgi-bin и прочие) и выложите все свои файлы, где храниться записываемая информация в нее. Если хотите инклудировать фалйы, то пишите include("../date/file.dat");. Дальше вы разберетесь. |
|||
|
||||
InfMag |
|
||||
… ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1037 Регистрация: 21.11.2004 Репутация: нет Всего: 4 |
Теперь идет речь о include баге...
Юзер может набрать http://site.ru/page.php?file=../date/passwd.dat Можно использовать обычные извращения типа:
Либо прописать замену двойных точек со слешем.
Зы. Кто не знает, то return 0; - означает, что дальше скрипт не поедет и остановится на этом месте. А return 1; - это спокойное продолжение дальше. Еще можно вместо 0 писать FALSE, а вместо 1 писать TRUE... |
||||
|
|||||
Opik |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 1918 Регистрация: 6.10.2004 Где: Рига Репутация: нет Всего: 55 |
InfMag
про index.html - можно просто запретить листинг директорий. на файлы с паролями обычно ставят права на чтение только сервером.
exit() или die() на что?
о basename внимательно читал? |
||||||
|
|||||||
pasha_kiev |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 26.1.2005 Репутация: нет Всего: нет |
Скажите,
а если у меня на стрнаице вывод переменной типа:
и потом отправка ее по почте и она задается в запросе
то хватит ли ее так обезопасить?
Это у меня в форме обратной связи Добавлено @ 14:40 И вообще, давайте затроним шире вопрос проверки переменных Это сообщение отредактировал(а) pasha_kiev - 26.1.2005, 14:39 |
||||||
|
|||||||
Vaulter |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1724 Регистрация: 30.12.2002 Где: бункер Репутация: нет Всего: 22 |
pasha_kiev
нельзя ли форму отправлять методом POST? тогда строки не будет в строке адреса page.php?string=dkl;skd;sdk |
|||
|
||||
pasha_kiev |
|
|||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 26.1.2005 Репутация: нет Всего: нет |
она так и отправляется через ПОСТ, просто я для пирмера показал так
Дело в том, что форма может и не передать переменную, и тогда ее может ввести через запрос кулХацкер |
|||
|
||||
pasha_kiev |
|
|||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 26.1.2005 Репутация: нет Всего: нет |
вообщем вопрос отсается открытым - о качественной проверке переменных вводимых из-вне.
|
|||
|
||||
Opik |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 1918 Регистрация: 6.10.2004 Где: Рига Репутация: нет Всего: 55 |
pasha_kiev
если это данные SQL, то mysql_escape_string вполне хватит |
|||
|
||||
pasha_kiev |
|
|||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 26.1.2005 Репутация: нет Всего: нет |
нет, это простые переменные, которые потом передаются по мылу
|
|||
|
||||
Opik |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 1918 Регистрация: 6.10.2004 Где: Рига Репутация: нет Всего: 55 |
pasha_kiev
если это само мыло, то смотреть регами на правильность емайла. Да думаю тут опасного ничего нет. |
|||
|
||||
pasha_kiev |
|
|||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 26.1.2005 Репутация: нет Всего: нет |
при чем здесь мыло?
я хочу узнать как надежно проверять переменные вводимые пользователем несмотря на цели их использования |
|||
|
||||
Opik |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 1918 Регистрация: 6.10.2004 Где: Рига Репутация: нет Всего: 55 |
pasha_kiev
всё как раз зависит от целей. |
|||
|
||||
IZ@TOP |
|
|||
![]() Панда-бир! ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4795 Регистрация: 3.2.2003 Где: Бамбуковый лес Репутация: 1 Всего: 73 |
pasha_kiev, для переданных данных об адресе мейла будет одна проверка, при проверке номера ICQ, адреса сайта - другие, при передаче данных в MySQL третья, при записи в файлы четвертая. И для разных случаев необходимы разные проверки, например при ситуации когда надо чтобы в тесте созхранялся HTML, делаем одно, а когда нужно чтобы его там небыло - другое.
-------------------- Один из розовых плюшевых-всадников апокалипсиса... очень злой... Семь кругов ада для новых элементов языка Мои разрозненные мысли |
|||
|
||||
penizillin |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 10.11.2004 Репутация: нет Всего: 9 |
|
|||
|
||||
Opik |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 1918 Регистрация: 6.10.2004 Где: Рига Репутация: нет Всего: 55 |
Так, чем пополнить статью?
![]() |
|||
|
||||
Aliance |
|
|||
![]() I ♥ <script> ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: нет Всего: 137 |
уловками по обеспечению безопасности |
|||
|
||||
Opik |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 1918 Регистрация: 6.10.2004 Где: Рига Репутация: нет Всего: 55 |
Чуть поправил статью.
|
|||
|
||||
Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 1 Всего: 261 |
ты скажи что конкретно поправил, а то ведь не отличишь.. |
|||
|
||||
Opik |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 1918 Регистрация: 6.10.2004 Где: Рига Репутация: нет Всего: 55 |
Ну правил стиль написания
![]() |
|||
|
||||
Irokez |
|
|||
![]() индеец ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1180 Регистрация: 20.10.2004 Репутация: 1 Всего: 53 |
было бы интересно про использования SSL сертификатов для аутентинфикации пользователя.. |
|||
|
||||
fara |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 166 Регистрация: 15.3.2004 Где: С.-Петербург Репутация: нет Всего: 2 |
Да, действительно, что нибудь по серьезней
![]() --------------------
Крыша хлопает в ладоши -Спасибо всем за план хороший! |
|||
|
||||
$дмитрий |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1037 Регистрация: 19.6.2004 Репутация: нет Всего: 45 |
Opr когда- то писал свою статью по безопасности, на примерах. вышлю в ПМ, если нужно используй.
|
|||
|
||||
PROCESSOR |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 238 Регистрация: 25.5.2005 Репутация: нет Всего: нет |
Слава богу этих 3 ошибок неюзал никогда в жизни.
А методы взлома SQLite есть и вообще значительные дыры в PHP5 ? |
|||
|
||||
Mal Hack |
|
||||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 1 Всего: 261 |
Ты можешь их никогда и не поюзать, вопрос в том, поюзает ли их кто-ть против тебя ![]()
Также SQL иньекции, и простое скачивание файлов БД, если права на файл не установлены ![]() |
||||
|
|||||
-=Ustas=- |
|
|||
![]() Ustix IT Group ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2222 Регистрация: 21.1.2005 Где: Краснодар Репутация: нет Всего: 69 |
А вообще что лучше юзать в плане безопасности против sql-инъекций, addslashes или mysql_escape_string? Ведь эти две функции обе экранируют спецсимволы.
-------------------- В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм. ----- |
|||
|
||||
Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 1 Всего: 261 |
Само собой, т.к. она экранирует то, что нужно именно для mysql. |
|||
|
||||
HappyMan |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 347 Регистрация: 29.7.2004 Репутация: нет Всего: 2 |
Mal Hack
как узнать установлены ли права? --------------------
© Mal Hack |
||||
|
|||||
Denis-delphist |
|
|||
Unregistered |
Что-бы ты в коде не писал, какую бы защиту не ставил, если взломать не через сайт, а через соединение с сервером, то можно код изкаверкать, изменить, прочитать и удалить и т.п.
есс-но, можно зайти как администратор(Соедениться с сервером с другого) не через сайт... Тогда кранты ![]() МОГУ ОБРАДОВАТЬ: Таких хакеров щитанные сотни ![]() Так что вывод: Защищай соединение с сервером как можно сильнее. ![]() |
|||
|
||||
CyClon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 838 Регистрация: 3.12.2005 Репутация: нет Всего: 4 |
Респект, теперь есть о чем подумать... Давайте еще... Сам может что надумаю или найду - выложу...
|
|||
|
||||
CyClon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 838 Регистрация: 3.12.2005 Репутация: нет Всего: 4 |
|
|||
|
||||
CyClon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 838 Регистрация: 3.12.2005 Репутация: нет Всего: 4 |
Вот тут распечатал парочку статей включая эту.. Только дочитал.. И скажу вам - отличная статья! Читать всем без исключения.
|
|||
|
||||
Ciber SLasH |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1813 Регистрация: 9.11.2004 Где: С.-Петербург Репутация: нет Всего: 67 |
Источник не подскажешь ? |
|||
|
||||
CyClon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 838 Регистрация: 3.12.2005 Репутация: нет Всего: 4 |
Спросил бы раньше, подсказал бы
![]() Добавлено @ 20:46 Хех ребята учитись юзать поиск. http://yandex.ru Запрос: IP-адреса потенциального злоумышленника - то в вывалило кучу сайтофф ![]() http://www.winsov.ru/php003.php http://www2.marketer.ru/articles/index.pr820.html http://nbsp.ru/articles/2005/11/10/priemy_...okonchanie.html http://renewing.ru/modules.php?name=Pages&pa=showpage&pid=91 Думаю что то на всех есть полезное. Пойду серфить. Добавлено @ 20:47 Источник: http://detail.phpclub.net/ |
|||
|
||||
Alx |
|
||||||||||
Ajaxy ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2903 Регистрация: 26.11.2003 Где: Cutopia Репутация: нет Всего: 78 |
1. рекомендуется использовать функцию mysql_real_escape_string() вместо mysql_escape_string(), т.к. последняя теряет смысл при Unicode-кодировке.
2. с include (а вернее рекомендую использовать require) я поступаю так:
3. ещё раз четко про SQL, чтобы исключить возможность упущения чего-либо: 1) всегда использовать кавычки вокруг переменной вставляемой в запрос:
2) всегда использовать функцию mysql_real_escape_string() хотя бы для проставления бэкслэшей ( \ ) перед кавычками дабы не получилось так ( $cell = "' and _pass > '0" ):
а получилось так:
3) всегда хранить данные, введённые пользователем, которые рано или поздно будут выведены в браузер только после пропуска через функцию htmlspecialchars() 4) если мы ждем от юзера число, достаточно строку пропустить через intval():
таким образом, какую бы противную строчку мы не получили от хацкера, от неё останутся только циферки или 0. вот это надо обязательно запомнить! |
||||||||||
|
|||||||||||
Mal Hack |
|
||||||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 1 Всего: 261 |
Сам факт использования той или иной функции на безопасности в данном случае не сказывается.
А я бы вот использовал проверку, а не приведение типов. ctype_*();
http://vingrad.ru/PHP-ART-002847 |
||||||
|
|||||||
Mh139 |
|
||||
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 29.1.2006 Репутация: нет Всего: нет |
А по-моему не стоит заморачиваться с basename'ами и regexp'ами. Самый на мой взгляд удобный способ - ассоциативный массив типа
Ну и естественно в include() нужно передавать $page_array[$page]. Если переданный ключ в массиве отсутствует, то и подключать нечего. |
||||
|
|||||
CyClon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 838 Регистрация: 3.12.2005 Репутация: нет Всего: 4 |
Mh139, разумно.
Или юзать: switch ($_GET['page']) { case forum: include("forum.php"); default: include("news.php"); } |
|||
|
||||
IZ@TOP |
|
|||
![]() Панда-бир! ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4795 Регистрация: 3.2.2003 Где: Бамбуковый лес Репутация: 1 Всего: 73 |
CyClon, или хранить все данные в базе. А вообще с появлением РНР 5, стало возможным ограничивать доступ к переменным и методам классов, что на мой взгляд крайне удобно и плюс к безопасности.
-------------------- Один из розовых плюшевых-всадников апокалипсиса... очень злой... Семь кругов ада для новых элементов языка Мои разрозненные мысли |
|||
|
||||
CyClon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 838 Регистрация: 3.12.2005 Репутация: нет Всего: 4 |
IZ@TOP, PHP5 ни разу не юзал
![]() |
|||
|
||||
IZ@TOP |
|
|||
![]() Панда-бир! ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4795 Регистрация: 3.2.2003 Где: Бамбуковый лес Репутация: 1 Всего: 73 |
CyClon, четверка уже морально устарела как и третья версия в свое время.
-------------------- Один из розовых плюшевых-всадников апокалипсиса... очень злой... Семь кругов ада для новых элементов языка Мои разрозненные мысли |
|||
|
||||
Janus |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 186 Регистрация: 26.9.2005 Репутация: нет Всего: 1 |
Четверка все еще на большинстве хостингов стоит.
--------------------
Проект "Репликатор" |
|||
|
||||
CTAPbIuMABP |
|
||||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 92 Регистрация: 17.2.2006 Где: Киев Репутация: нет Всего: 1 |
IMHO
на этот случай есть программа InetCrack
тоже бред на проверку
А вообще чтобы узнать побольше советую очень практичный пример! скачайте XSpider даже демка подойдет, напишите чтото вроде
и посмотрите лог файл или БД там будет много интересного Это сообщение отредактировал(а) CTAPbIuMABP - 22.2.2006, 12:55 |
||||||||
|
|||||||||
OlegNT |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 58 Регистрация: 21.3.2006 Где: Нижний Тагил Репутация: нет Всего: нет |
C include поступаю так:
Кстати, ".php" в GET-запросе можно избавиться, если набрать: index.php?page=file.txt%00 Это сообщение отредактировал(а) OlegNT - 19.4.2006, 20:09 |
|||
|
||||
S.A.P. |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2664 Регистрация: 11.6.2004 Репутация: нет Всего: 71 |
Мое ИМХО по include багам:
в include, require и т.д. использовать только константные строки! и include баг исчезает как класс. Некоторые могут возразить: "а как - же ты тогда подрубаешь скрипты?". Отвечаю: вся структура с URL ами и соответствующими им модулями хранится в базе данных или других носителях. И уже давно пора на ЧПУ переходить. mod_rewrite даже на бесплатных хостах начинают ставить. Конечно - же исключением может являться функция __autoload, где как раз и должны использоваться переменные в include, но ИМХО однажды хорошо продуманный и реализованный __autoload должен решить пробему с этим
![]() Мое ИМХО по SQL и mysql_real_escape_string() Чтобы избавиться от подобных безобразий почитайте про placeholders у Д.Котерова. http://www.dklab.ru/lib/Database_Placeholder/ Это сообщение отредактировал(а) S.A.P. - 19.4.2006, 21:04 |
|||
|
||||
CyClon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 838 Регистрация: 3.12.2005 Репутация: нет Всего: 4 |
Я у себя использую данный способ проверки:
И все ваши include-баги отдыхают - можно вписывать только строчные буквы латинского алфавита с цифры + если ихсодники никому не показывать своего сайта - то у взломщика меньше 1% шанса, что он ломанет сайт через эту дырку. |
|||
|
||||
Aliance |
|
|||
![]() I ♥ <script> ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: нет Всего: 137 |
||||
|
||||
Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 1 Всего: 261 |
Да.
|
|||
|
||||
Wolf1994 |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1701 Регистрация: 5.10.2004 Репутация: нет Всего: 29 |
Добавлю свой метод защиты. При использовании читабельных файлов с данными, можно переписать обращение к этим файлам (например по расширению ".txt"), через мод-реврайт, на 404-страницу. |
|||
|
||||
AntiLL |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 4.2.2006 Репутация: нет Всего: нет |
Я больше доверяю защите через .htaccess. Ко всем файлам которые инклюдяться однозначно
Также если некоторые файлы только для приватного использования то однозначно в .htaccess:
Что касается средств безопасности пхп, то однозначно не доверять ничему и никому - GET, POST, cookie, формы и т.д. Очень часто встречается вид инъекции через GET, причем в самых разных приложениях, даже в тех за которые просятся крупные суммы денег. Я решаю эту проблему очень просто - просто напросто запрещаю все недопустмые символы в УРЛ - кавычки, скобки, "../" , как в прямом виде так и в Unicod. Приведу код, хотя он и не отличается оптимальностью, по идее бы это все надо делать регулярными выражениями но мне чета впадлу ща). Кстати на скорости работы всей системы в целом не влияет, но зато отпадает сразу уйма ненужной головной боли.
|
||||||
|
|||||||
Aliance |
|
|||
![]() I ♥ <script> ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: нет Всего: 137 |
Является ли функция addslashes() приемлиемой для экранирования SQL запросов?
|
|||
|
||||
CyClon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 838 Регистрация: 3.12.2005 Репутация: нет Всего: 4 |
Мои предпочтения по убывающей
![]() mysql_real_escape_string mysql_escape_string addslashes |
|||
|
||||
Aliance |
|
|||
![]() I ♥ <script> ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: нет Всего: 137 |
Нет, это понятно, я всегда пользуюсь mysql_real_escape_string, просто в данном вопросе мне нужно использовать функцию без подключения к БД, так как вставка происходит через API, написанные не мной и я не знаю есть ли там экранирование (хотя скорее всего есть)
|
|||
|
||||
Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 1 Всего: 261 |
Я бы использовал PDO->prepare в PHP5.
|
|||
|
||||
AntonioBanderaz |
|
|||
![]() Velichko Anton ![]() ![]() Профиль Группа: Участник Сообщений: 851 Регистрация: 28.4.2005 Где: Санкт-Петербург Репутация: нет Всего: 18 |
-------------------- ГЫ... |
|||
|
||||
Alx |
|
|||
Ajaxy ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2903 Регистрация: 26.11.2003 Где: Cutopia Репутация: нет Всего: 78 |
AntonioBanderaz
ок, спасибо) залатаю) |
|||
|
||||
R.M. |
|
|||
![]() Анархист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2164 Регистрация: 8.6.2005 Где: Питер Репутация: нет Всего: 30 |
Мне кажется в статье не хватает очень важной инфы.... о куках
![]() Это сообщение отредактировал(а) R.M. - 7.1.2007, 18:49 -------------------- Помнишь как бодрили дискотеки прошлого века? Теперь стул, компьютер и нету человека. Nokia LifeStyle - Всё для смартфонов Nokia |
|||
|
||||
Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 1 Всего: 261 |
И как она защитит?
http://phpclub.ru/detail/article/sessions |
|||
|
||||
R.M. |
|
|||
![]() Анархист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2164 Регистрация: 8.6.2005 Где: Питер Репутация: нет Всего: 30 |
Да, что-то я немного не о том ![]() Что ты хотел этим сказать? ![]() Это сообщение отредактировал(а) R.M. - 7.1.2007, 18:48 -------------------- Помнишь как бодрили дискотеки прошлого века? Теперь стул, компьютер и нету человека. Nokia LifeStyle - Всё для смартфонов Nokia |
|||
|
||||
Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 1 Всего: 261 |
||||
|
||||
Staind |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 175 Регистрация: 17.12.2007 Где: Планета сокровищ Репутация: нет Всего: 3 |
По поводу бага "Ошибка №1: include-баг".
У меня так сделано: Меню сайта (с шапкой) в отдельном файле menu.php Этот файлик прицепляется к каждой нужной страничке вот таким образом: "include "menu.php";". А вот теперь вопрос: "Так оставить, или лучше записать так include("./".basename("menu.php")); ? --------------------
Ничто так не раздражает человека, как просьба успокоиться |
|||
|
||||
Alx |
|
|||
Ajaxy ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2903 Регистрация: 26.11.2003 Где: Cutopia Репутация: нет Всего: 78 |
Staind, послушай, тут имелось ввиду использование basename для того что обезопасить данные, пришедшие от пользователя, потому что злоумышленник может составить запрос так, чтобы изменилась директория расположения подключаемого файла, что позволит ему подключить любой файл на сервере, чего нам совершенно не нужно. в данном случае ты сам выбираешь какой файл подключать, поэтому максимум что у тебя получилось - это защита от самого себя.
![]() |
|||
|
||||
Staind |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 175 Регистрация: 17.12.2007 Где: Планета сокровищ Репутация: нет Всего: 3 |
Все. Еще подумав 10 минут над багом понял, что это не то, что мне нужно, спасибо Alx за ответ. Я просто новичек
![]() --------------------
Ничто так не раздражает человека, как просьба успокоиться |
|||
|
||||
Alx |
|
|||
Ajaxy ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2903 Регистрация: 26.11.2003 Где: Cutopia Репутация: нет Всего: 78 |
мне вот интересно узнать, почему в последнее время все запретили подгружать аватарки, которые выдают скрипты?
даж на винграде так.. хотя у меня mod_rewrite avatar.gif -> avatar.php занял минуту... но на многих новых сайтах вообще разрешили загружать картинки только с локалки.. |
|||
|
||||
bars80080 |
|
||||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: нет Всего: 315 |
по этому поводу есть замечательная идея: обрабатывать только ожидаемые данные, то есть вместо $_GET['page'] = 'next_page.php'; использовать $_GET['page'] = 12; и далее из БД или просто из файла или написанного внутри того же скрипта проверять соответствие:
всё |
||||
|
|||||
Feldmarschall |
|
|||
Новичок ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2641 Регистрация: 11.12.2007 Репутация: нет Всего: 32 |
Код $page=basename($_GET['page']) на порядок короче твоего. Причем не увеличивается(!) с увеличением количества страниц.
|
|||
|
||||
bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: нет Всего: 315 |
не, я вообще с глобальной мыслью о централизации
то есть, если меню загнать в БД, чтоб легко было править и т.п.... тогда и проверять надо исходя из (есть ли такая страница) то есть чтобы вообще никаких сюрпризов |
|||
|
||||
Feldmarschall |
|
|||
Новичок ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2641 Регистрация: 11.12.2007 Репутация: нет Всего: 32 |
Лично я - так вообще не сторонник инклюдить переменные PHP скрипты.
Кабы не классическая реализация ЧПУ, когда все запросы идут на один индекс, который уже инклюдит в себя нужные модули - так и вообще бы никогда ничего не инклюдил с переменным именем, а только конфиги. Твой подход тоже неплох, за исключением того, что в базу придется лезть перед тем, как сторонний модуль инклюдить. По мне - так проверил нужный файл на наличие - та заинклюдил. Вот и все проверки. Но спорить о том, какой способ лучше - не стану. Все хороши. |
|||
|
||||
bars80080 |
|
||||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: нет Всего: 315 |
ой, вспомнил,
к вопросу о копировании файлов, допустим
то есть мы копируем чужой файл, разбираемся с методикой его поведения, достаём секретный сведения, скажем адрес на библиотеку функций занимающихся паролизацией и шифрованием, генерацией хэша и т.п., кот. тоже копируем конечно, это устраняется вынесением особо важных файлов за дерево каталогов, кстати, туда нет возможности залезть чужому? задавать конкретный адрес в передаваемых параметрах ( index.php?page=lock.php ) - дополнительный шанс хакеру чем меньше информации о структуре сайта, тем сложнее будет его сломать
|
||||
|
|||||
Feldmarschall |
|
|||
Новичок ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2641 Регистрация: 11.12.2007 Репутация: нет Всего: 32 |
||||
|
||||
bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: нет Всего: 315 |
стёр бы, если бы не поигрался с несколькими сайтами на вшивость
оказывается очень удобно коллекции фотографий таким образом вытягивать |
|||
|
||||
Feldmarschall |
|
|||
Новичок ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2641 Регистрация: 11.12.2007 Репутация: нет Всего: 32 |
при чем здесь коллекции фотографий? ты пишешь не про фотографии, а про index.php
Добавлено @ 16:36
слушай, не в обиду, перечитай, плиз, http://phpfaq.ru/na_tanke Это сообщение отредактировал(а) Feldmarschall - 18.12.2007, 16:36 |
|||
|
||||
bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: нет Всего: 315 |
если отсылаешь на танк, то конкретней куда (дуло, башня, гусеница?),
если конкретно index.php, то и его тоже копировал, просто я же не хакер долбанный какой-нибудь, лазить по чужим файлам так кое-где использовал для получения толпы фоток |
|||
|
||||
Feldmarschall |
|
|||
Новичок ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2641 Регистрация: 11.12.2007 Репутация: нет Всего: 32 |
|
|||
|
||||
bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: нет Всего: 315 |
хм, прикольно, я ж говорю, надо только хорошо поспорить, чтоб из тебя инфо вытащить, а ты в танк, танк...
да, никаких php нету... а как же тогда можно их стибрить? помнится эту идею Bushart предлагал
или это он про что-то другое? |
|||
|
||||
Feldmarschall |
|
|||
Новичок ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2641 Регистрация: 11.12.2007 Репутация: нет Всего: 32 |
Послушай.
Веб-сервер - это сервис, который отвечает по протоколу НТТР. есть адрес (URI), есть запрос, есть ответ. Никаких файлов в НТТР нету. Никаких физических файлов на сервере может не быть - ни php, ни txt, ни jpg. есть только запрос и ответ. мы запросили URI http://forum.vingrad.ru/style_images/2/menu/menu_forum.gif нам вернули заголовки и тело ответа. мы запросили URI http://forum.vingrad.ru/test.txt - нам вернули заголовки и тело ответа. запросили http://forum.vingrad.ru/index.php - вернули заголовки и тело ответа. причем всякий раз это могут быть не те заголовки и не то тело, которое мы ожидаем. menu_forum.gif может вернуть html index.php - gif test.txt - rar архив. Отсюда становится ясно, что никакой файл с сервера мы скопировать по НТТР не можем. Мы просто не видим никаких файлов. Мы получаем ответ сервера. А, в частности, ответ при обращении к php файлу представляет собой результат его работы (если сервер настроен) Это по поводу копирования. По поводу того, что говорил BuShaRt - я не понял, при чем здесь редактирование. В остальном, я думаю, он имел в виду, что Txt файл нельзя запретить скачивать. Это невозможно. Можно запретить или всем, или никому. Если один человек может качать "защищаемый" файл - значит, и другой может. Он доказывал невозможность создания стопроцентной защиты по теме топика. |
|||
|
||||
bars80080 |
|
|||
![]() прапор творюет ![]() ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 12022 Регистрация: 5.12.2007 Где: Königsberg Репутация: нет Всего: 315 |
что в принципе и нужно,
букарт, злодей, в сомнения ввёл и InfMag тоже |
|||
|
||||
gemaglabin |
|
|||
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 10.2.2008 Репутация: нет Всего: нет |
Думаю,будет интересно взглянуть тем разработчикам , для которых фильтрация от иньекций уже давно обыденность , на на мой материал
|
|||
|
||||
Vaulter |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1724 Регистрация: 30.12.2002 Где: бункер Репутация: нет Всего: 22 |
||||
|
||||
Kremnik |
|
|||
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 5.9.2008 Репутация: нет Всего: нет |
Стандарт? |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Избранное | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |