| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Избранное > Безопасность в PHP |
| Автор: Opik 6.1.2005, 00:06 | ||||||||||||||||||||||||||||||||||
| Первое и самое главное правило программиста: Никогда не доверяй тому, чего приходит от пользователя! Больше не буду мучить теорией т.к не люблю всё это, сразу к живым примерам. Ошибка №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, вы ставите свой сайт под удар маразматиков, чьи криво написанные сайты лежат на том же сервере, что и ваш. Обсуждение http://forum.vingrad.ru/index.php?act=ST&f=6&t=38531&st=0 |
| Автор: IZ@TOP 6.1.2005, 00:13 |
| Думаю что про метод №2 надо уточнить чтобы было понятно, записав в урл какую нибудь команду: cmd=rmdir(/)... |
| Автор: InfMag 23.1.2005, 19:14 |
| Мдя, очень полезная статья, но она еще и дает информацию для самих хакеров... Кстати, люди, если не хотите, чтобы юзеры видели содержимое ваших папок, набирая типа: 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 23.1.2005, 19:30 | ||||
| Теперь идет речь о include баге... Юзер может набрать http://site.ru/page.php?file=../date/passwd.dat Можно использовать обычные извращения типа:
Либо прописать замену двойных точек со слешем.
Зы. Кто не знает, то return 0; - означает, что дальше скрипт не поедет и остановится на этом месте. А return 1; - это спокойное продолжение дальше. Еще можно вместо 0 писать FALSE, а вместо 1 писать TRUE... |
| Автор: Opik 24.1.2005, 00:36 | ||||||
| InfMag про index.html - можно просто запретить листинг директорий. на файлы с паролями обычно ставят права на чтение только сервером.
exit() или die() на что?
о basename внимательно читал? |
| Автор: pasha_kiev 26.1.2005, 14:36 | ||||||
| Скажите, а если у меня на стрнаице вывод переменной типа:
и потом отправка ее по почте и она задается в запросе
то хватит ли ее так обезопасить?
Это у меня в форме обратной связи Добавлено @ 14:40 И вообще, давайте затроним шире вопрос проверки переменных |
| Автор: Vaulter 26.1.2005, 14:58 |
| pasha_kiev нельзя ли форму отправлять методом POST? тогда строки не будет в строке адреса page.php?string=dkl;skd;sdk |
| Автор: pasha_kiev 26.1.2005, 15:08 |
| она так и отправляется через ПОСТ, просто я для пирмера показал так Дело в том, что форма может и не передать переменную, и тогда ее может ввести через запрос кулХацкер |
| Автор: pasha_kiev 26.1.2005, 15:25 |
| вообщем вопрос отсается открытым - о качественной проверке переменных вводимых из-вне. |
| Автор: Opik 26.1.2005, 16:28 |
| pasha_kiev если это данные SQL, то mysql_escape_string вполне хватит |
| Автор: pasha_kiev 26.1.2005, 19:45 |
| нет, это простые переменные, которые потом передаются по мылу |
| Автор: Opik 26.1.2005, 22:05 |
| pasha_kiev если это само мыло, то смотреть регами на правильность емайла. Да думаю тут опасного ничего нет. |
| Автор: pasha_kiev 27.1.2005, 23:46 |
| при чем здесь мыло? я хочу узнать как надежно проверять переменные вводимые пользователем несмотря на цели их использования |
| Автор: Opik 28.1.2005, 02:02 |
| pasha_kiev всё как раз зависит от целей. |
| Автор: IZ@TOP 28.1.2005, 10:03 |
| pasha_kiev, для переданных данных об адресе мейла будет одна проверка, при проверке номера ICQ, адреса сайта - другие, при передаче данных в MySQL третья, при записи в файлы четвертая. И для разных случаев необходимы разные проверки, например при ситуации когда надо чтобы в тесте созхранялся HTML, делаем одно, а когда нужно чтобы его там небыло - другое. |
| Автор: penizillin 29.1.2005, 20:31 | ||
|
| Автор: Opik 19.3.2005, 05:04 |
| Так, чем пополнить статью? |
| Автор: Aliance 18.5.2005, 23:42 | ||
уловками по обеспечению безопасности |
| Автор: Opik 19.5.2005, 02:59 |
| Чуть поправил статью. |
| Автор: Mal Hack 19.5.2005, 13:45 | ||
ты скажи что конкретно поправил, а то ведь не отличишь.. |
| Автор: Opik 19.5.2005, 15:33 |
| Ну правил стиль написания |
| Автор: Irokez 19.5.2005, 15:51 | ||
было бы интересно про использования SSL сертификатов для аутентинфикации пользователя.. |
| Автор: fara 29.5.2005, 21:15 |
| Да, действительно, что нибудь по серьезней |
| Автор: $дмитрий 29.5.2005, 22:29 |
| Opr когда- то писал свою статью по безопасности, на примерах. вышлю в ПМ, если нужно используй. |
| Автор: PROCESSOR 19.7.2005, 06:47 |
| Слава богу этих 3 ошибок неюзал никогда в жизни. А методы взлома SQLite есть и вообще значительные дыры в PHP5 ? |
| Автор: Mal Hack 19.7.2005, 09:32 | ||||
Ты можешь их никогда и не поюзать, вопрос в том, поюзает ли их кто-ть против тебя
Также SQL иньекции, и простое скачивание файлов БД, если права на файл не установлены |
| Автор: -=Ustas=- 21.7.2005, 08:25 |
| А вообще что лучше юзать в плане безопасности против sql-инъекций, addslashes или mysql_escape_string? Ведь эти две функции обе экранируют спецсимволы. |
| Автор: Mal Hack 21.7.2005, 12:50 | ||
Само собой, т.к. она экранирует то, что нужно именно для mysql. |
| Автор: HappyMan 28.8.2005, 19:12 | ||
Mal Hack
как узнать установлены ли права? |
| Автор: Denis-delphist 26.11.2005, 11:50 |
| Что-бы ты в коде не писал, какую бы защиту не ставил, если взломать не через сайт, а через соединение с сервером, то можно код изкаверкать, изменить, прочитать и удалить и т.п. есс-но, можно зайти как администратор(Соедениться с сервером с другого) не через сайт... Тогда кранты МОГУ ОБРАДОВАТЬ: Таких хакеров щитанные сотни Так что вывод: Защищай соединение с сервером как можно сильнее. |
| Автор: CyClon 4.12.2005, 09:45 |
| Респект, теперь есть о чем подумать... Давайте еще... Сам может что надумаю или найду - выложу... |
| Автор: CyClon 10.12.2005, 20:21 | ||
|
| Автор: CyClon 10.12.2005, 21:00 |
| Вот тут распечатал парочку статей включая эту.. Только дочитал.. И скажу вам - отличная статья! Читать всем без исключения. |
| Автор: Ciber SLasH 14.12.2005, 19:22 | ||
Источник не подскажешь ? |
| Автор: CyClon 14.12.2005, 20:45 |
| Спросил бы раньше, подсказал бы Добавлено @ 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_bezopasnogo_vebprogrammirovaniya_na_php_okonchanie.html http://renewing.ru/modules.php?name=Pages&pa=showpage&pid=91 Думаю что то на всех есть полезное. Пойду серфить. Добавлено @ 20:47 Источник: http://detail.phpclub.net/ |
| Автор: Alx 8.1.2006, 16:37 | ||||||||||
| 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. вот это надо обязательно запомнить! |
| Автор: Mh139 30.1.2006, 10:55 | ||||
А по-моему не стоит заморачиваться с basename'ами и regexp'ами. Самый на мой взгляд удобный способ - ассоциативный массив типа
Ну и естественно в include() нужно передавать $page_array[$page]. Если переданный ключ в массиве отсутствует, то и подключать нечего. |
| Автор: CyClon 7.2.2006, 19:06 |
| Mh139, разумно. Или юзать: switch ($_GET['page']) { case forum: include("forum.php"); default: include("news.php"); } |
| Автор: IZ@TOP 14.2.2006, 09:21 |
| CyClon, или хранить все данные в базе. А вообще с появлением РНР 5, стало возможным ограничивать доступ к переменным и методам классов, что на мой взгляд крайне удобно и плюс к безопасности. |
| Автор: CyClon 19.2.2006, 20:46 |
| IZ@TOP, PHP5 ни разу не юзал |
| Автор: IZ@TOP 20.2.2006, 07:56 |
| CyClon, четверка уже морально устарела как и третья версия в свое время. |
| Автор: Janus 21.2.2006, 18:27 |
| Четверка все еще на большинстве хостингов стоит. |
| Автор: CTAPbIuMABP 22.2.2006, 12:51 | ||||||||
IMHO
на этот случай есть программа InetCrack
тоже бред на проверку
А вообще чтобы узнать побольше советую очень практичный пример! скачайте XSpider даже демка подойдет, напишите чтото вроде
и посмотрите лог файл или БД там будет много интересного |
| Автор: OlegNT 19.4.2006, 20:08 | ||
C include поступаю так:
Кстати, ".php" в GET-запросе можно избавиться, если набрать: index.php?page=file.txt%00 |
| Автор: S.A.P. 19.4.2006, 20:43 | ||
| Мое ИМХО по include багам: в include, require и т.д. использовать только константные строки! и include баг исчезает как класс. Некоторые могут возразить: "а как - же ты тогда подрубаешь скрипты?". Отвечаю: вся структура с URL ами и соответствующими им модулями хранится в базе данных или других носителях. И уже давно пора на ЧПУ переходить. mod_rewrite даже на бесплатных хостах начинают ставить. Конечно - же исключением может являться функция __autoload, где как раз и должны использоваться переменные в include, но ИМХО однажды хорошо продуманный и реализованный __autoload должен решить пробему с этим
Мое ИМХО по SQL и mysql_real_escape_string() Чтобы избавиться от подобных безобразий почитайте про placeholders у Д.Котерова. http://www.dklab.ru/lib/Database_Placeholder/ |
| Автор: CyClon 3.5.2006, 11:19 | ||
Я у себя использую данный способ проверки:
И все ваши include-баги отдыхают - можно вписывать только строчные буквы латинского алфавита с цифры + если ихсодники никому не показывать своего сайта - то у взломщика меньше 1% шанса, что он ломанет сайт через эту дырку. |
| Автор: Aliance 16.5.2006, 22:32 | ||
если в переменной должно содержаться только число - то ctype_digit() подойдет? Не точки, не запятой, не символов, только число. |
| Автор: Mal Hack 16.5.2006, 23:51 |
| Да. |
| Автор: Wolf1994 22.6.2006, 18:41 | ||
Добавлю свой метод защиты. При использовании читабельных файлов с данными, можно переписать обращение к этим файлам (например по расширению ".txt"), через мод-реврайт, на 404-страницу. |
| Автор: AntiLL 25.10.2006, 22:29 | ||||||
Я больше доверяю защите через .htaccess. Ко всем файлам которые инклюдяться однозначно
Также если некоторые файлы только для приватного использования то однозначно в .htaccess:
Что касается средств безопасности пхп, то однозначно не доверять ничему и никому - GET, POST, cookie, формы и т.д. Очень часто встречается вид инъекции через GET, причем в самых разных приложениях, даже в тех за которые просятся крупные суммы денег. Я решаю эту проблему очень просто - просто напросто запрещаю все недопустмые символы в УРЛ - кавычки, скобки, "../" , как в прямом виде так и в Unicod. Приведу код, хотя он и не отличается оптимальностью, по идее бы это все надо делать регулярными выражениями но мне чета впадлу ща). Кстати на скорости работы всей системы в целом не влияет, но зато отпадает сразу уйма ненужной головной боли.
|
| Автор: Aliance 7.11.2006, 18:39 |
| Является ли функция addslashes() приемлиемой для экранирования SQL запросов? |
| Автор: CyClon 7.11.2006, 19:13 |
| Мои предпочтения по убывающей mysql_real_escape_string mysql_escape_string addslashes |
| Автор: Aliance 7.11.2006, 19:36 |
| Нет, это понятно, я всегда пользуюсь mysql_real_escape_string, просто в данном вопросе мне нужно использовать функцию без подключения к БД, так как вставка происходит через API, написанные не мной и я не знаю есть ли там экранирование (хотя скорее всего есть) |
| Автор: Mal Hack 7.11.2006, 20:01 |
| Я бы использовал PDO->prepare в PHP5. |
| Автор: AntonioBanderaz 1.12.2006, 19:14 |
и твой сайт зациклен http://alx.com.ru/index.php?act=../index |
| Автор: Alx 1.12.2006, 22:19 |
| AntonioBanderaz ок, спасибо) залатаю) |
| Автор: R.M. 5.1.2007, 03:27 |
| Мне кажется в статье не хватает очень важной инфы.... о куках |
| Автор: Mal Hack 5.1.2007, 16:00 | ||
И как она защитит?
http://phpclub.ru/detail/article/sessions |
| Автор: R.M. 7.1.2007, 18:47 |
Да, что-то я немного не о том Что ты хотел этим сказать? |
| Автор: Mal Hack 7.1.2007, 19:03 |
Это - информация, которую ты не нашел. |
| Автор: Staind 17.12.2007, 18:14 |
| По поводу бага "Ошибка №1: include-баг". У меня так сделано: Меню сайта (с шапкой) в отдельном файле menu.php Этот файлик прицепляется к каждой нужной страничке вот таким образом: "include "menu.php";". А вот теперь вопрос: "Так оставить, или лучше записать так include("./".basename("menu.php")); ? |
| Автор: Alx 17.12.2007, 18:24 |
| Staind, послушай, тут имелось ввиду использование basename для того что обезопасить данные, пришедшие от пользователя, потому что злоумышленник может составить запрос так, чтобы изменилась директория расположения подключаемого файла, что позволит ему подключить любой файл на сервере, чего нам совершенно не нужно. в данном случае ты сам выбираешь какой файл подключать, поэтому максимум что у тебя получилось - это защита от самого себя. |
| Автор: Staind 17.12.2007, 18:28 |
| Все. Еще подумав 10 минут над багом понял, что это не то, что мне нужно, спасибо Alx за ответ. Я просто новичек |
| Автор: Alx 17.12.2007, 19:17 |
| мне вот интересно узнать, почему в последнее время все запретили подгружать аватарки, которые выдают скрипты? даж на винграде так.. хотя у меня mod_rewrite avatar.gif -> avatar.php занял минуту... но на многих новых сайтах вообще разрешили загружать картинки только с локалки.. |
| Автор: bars80080 18.12.2007, 11:11 | ||||
по этому поводу есть замечательная идея: обрабатывать только ожидаемые данные, то есть вместо $_GET['page'] = 'next_page.php'; использовать $_GET['page'] = 12; и далее из БД или просто из файла или написанного внутри того же скрипта проверять соответствие:
всё |
| Автор: Feldmarschall 18.12.2007, 13:46 |
| Код $page=basename($_GET['page']) на порядок короче твоего. Причем не увеличивается(!) с увеличением количества страниц. |
| Автор: bars80080 18.12.2007, 14:17 |
| не, я вообще с глобальной мыслью о централизации то есть, если меню загнать в БД, чтоб легко было править и т.п.... тогда и проверять надо исходя из (есть ли такая страница) то есть чтобы вообще никаких сюрпризов |
| Автор: Feldmarschall 18.12.2007, 14:31 |
| Лично я - так вообще не сторонник инклюдить переменные PHP скрипты. Кабы не классическая реализация ЧПУ, когда все запросы идут на один индекс, который уже инклюдит в себя нужные модули - так и вообще бы никогда ничего не инклюдил с переменным именем, а только конфиги. Твой подход тоже неплох, за исключением того, что в базу придется лезть перед тем, как сторонний модуль инклюдить. По мне - так проверил нужный файл на наличие - та заинклюдил. Вот и все проверки. Но спорить о том, какой способ лучше - не стану. Все хороши. |
| Автор: bars80080 18.12.2007, 15:51 | ||||
| ой, вспомнил, к вопросу о копировании файлов, допустим
то есть мы копируем чужой файл, разбираемся с методикой его поведения, достаём секретный сведения, скажем адрес на библиотеку функций занимающихся паролизацией и шифрованием, генерацией хэша и т.п., кот. тоже копируем конечно, это устраняется вынесением особо важных файлов за дерево каталогов, кстати, туда нет возможности залезть чужому? задавать конкретный адрес в передаваемых параметрах ( index.php?page=lock.php ) - дополнительный шанс хакеру чем меньше информации о структуре сайта, тем сложнее будет его сломать
|
| Автор: Feldmarschall 18.12.2007, 16:10 | ||
сотри, пока никто не видел... адреса же вида index.php?page=lock.php вообще не имеют смысла. куда проще и удобнее писать lock.php |
| Автор: bars80080 18.12.2007, 16:22 |
| стёр бы, если бы не поигрался с несколькими сайтами на вшивость оказывается очень удобно коллекции фотографий таким образом вытягивать |
| Автор: Feldmarschall 18.12.2007, 16:26 | ||
| при чем здесь коллекции фотографий? ты пишешь не про фотографии, а про index.php Добавлено @ 16:36
слушай, не в обиду, перечитай, плиз, http://phpfaq.ru/na_tanke |
| Автор: bars80080 18.12.2007, 16:45 |
| если отсылаешь на танк, то конкретней куда (дуло, башня, гусеница?), если конкретно index.php, то и его тоже копировал, просто я же не хакер долбанный какой-нибудь, лазить по чужим файлам так кое-где использовал для получения толпы фоток |
| Автор: Feldmarschall 18.12.2007, 16:50 | ||
|
| Автор: bars80080 18.12.2007, 16:57 | ||
| хм, прикольно, я ж говорю, надо только хорошо поспорить, чтоб из тебя инфо вытащить, а ты в танк, танк... да, никаких php нету... а как же тогда можно их стибрить? помнится эту идею Bushart предлагал
или это он про что-то другое? |
| Автор: Feldmarschall 18.12.2007, 17:27 |
| Послушай. Веб-сервер - это сервис, который отвечает по протоколу НТТР. есть адрес (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 18.12.2007, 17:53 |
| что в принципе и нужно, букарт, злодей, в сомнения ввёл и InfMag тоже |
| Автор: gemaglabin 10.2.2008, 13:28 | ||
Думаю,будет интересно взглянуть тем разработчикам , для которых фильтрация от иньекций уже давно обыденность , на на мой материал
|
| Автор: Vaulter 10.2.2008, 15:15 |
| Безопасность web-сайта http://vaultsoft.ru/txt.rus/safe-web-site.html |
| Автор: Kremnik 30.3.2009, 13:34 | ||
Стандарт? |