|
26 / 19 / 5
Регистрация: 19.05.2009
Сообщений: 2,309
|
||||||
Правильно ли я делаю?12.03.2013, 20:58. Показов 3519. Ответов 31
Метки нет (Все метки)
Приветствую.
Я сейчас делаю один макет. Вот код. Подскажите, правильно ли я делаю, или для этого же имеется лучшее решение? И как это с точки зрения безопасности?
0
|
||||||
| 12.03.2013, 20:58 | |
|
Ответы с готовыми решениями:
31
Не работает mail(); все ли я делаю правильно? Правильно ли я реализовываю добавляемые пользователем поля в менеджер контактов. Код есть. Нужен совет, если не правильно делаю Правильно ли я делаю?? |
|
356 / 280 / 22
Регистрация: 27.08.2012
Сообщений: 855
|
|
| 13.03.2013, 15:34 | |
Только что проверил ещё раз file_exist, в первый раз я ошибся "я был не прав, но ты меня прости" (с) ![]() P.S. С Вами приятно вести дискуссию! ![]() Добавлено через 4 минуты Уязвимость слабая, но она есть, поэтому считаю свой код написанным не по фен-шую
2
|
|
|
26 / 19 / 5
Регистрация: 19.05.2009
Сообщений: 2,309
|
|||
| 13.03.2013, 16:29 [ТС] | |||
|
Не по теме: Мдя, вроде идиотский вопрос задал, а дискуссия разрослась на 3 страницы. Это радует. Значит не настолько уж и идиотский вопрос. :-) ? Просто делал по-старинке, с такими конструкциями не работал никогда. И перед file_exists не требуется if?
0
|
|||
|
356 / 280 / 22
Регистрация: 27.08.2012
Сообщений: 855
|
|
| 13.03.2013, 17:01 | |
|
Я думаю эта ссылка поможет http://www.fortress-design.com... ct-syntax/
1
|
|
|
508 / 358 / 13
Регистрация: 12.03.2012
Сообщений: 1,896
|
||
| 13.03.2013, 17:04 | ||
|
Ответы в теме - мрак.
0
|
||
|
26 / 19 / 5
Регистрация: 19.05.2009
Сообщений: 2,309
|
|
| 13.03.2013, 17:40 [ТС] | |
|
т.е. правильно ли я понимаю, что в моем случае нужно:
1. проверять переменную $_GET['page'] на предмет числового значения 2. проверять существование файла типа step.$_GET['page'].php данные шаги сделают безопасным код?
0
|
|
|
356 / 280 / 22
Регистрация: 27.08.2012
Сообщений: 855
|
|
| 13.03.2013, 17:45 | |
|
должны сделать, но не знаю как Вы там его напишите
0
|
|
|
26 / 19 / 5
Регистрация: 19.05.2009
Сообщений: 2,309
|
|
| 13.03.2013, 17:49 [ТС] | |
|
так я напишу и покажу. а вы посмотрите.
0
|
|
|
508 / 358 / 13
Регистрация: 12.03.2012
Сообщений: 1,896
|
||
| 13.03.2013, 18:23 | ||
|
0
|
||
| 13.03.2013, 19:52 | |||||||
|
входным переменным доверять нельзя. вообще. даже того, что было предложено выше, basename, вроде как, по идее, хватает. но лично я когда делаю такие вещи, думаю немного по другому: а что вообще я ожидаю увидеть в этой переменной? разве я хочу, чтобы у меня были страницы типа "%78$!!gg~<purum>" ?? нет, мне нужны только буковки, циферки, знак подчеркивания, тире. и у меня получается простая проверка:
также, следует проверить переменную по длине, на всякий случай. особенно, при пост запросе -- не будет же имя файла длиной 8 мегабайт (зависит, разумеется, от настроек php), и если длина, скажем, больше 256 символов (ну или сколько там может быть, в конкретном проекте), то какой смысл запускать эту регулярку на 8ми метровых данных? так и задосить (именно DoS, а не DDoS даже) недолго. а длина строки в zval идет в отдельном поле, т.е. примерно как в делфях, и, по идее, должна вычисляться за константное время (поле-то предусмотрено, но о криворукости разработчиков пхп ходят легенды... не уверен, что strlen всегда, на всех версиях, работает именно так, но я очень на это надеюсь благо, проверить можно). таким образом, хотябы в этом месте, вы можете заранее составить алгоритм, обрабатывающий не более чем N символов, где N задаете вы, а не хакер![]() pixel, в вашем первоначальном коде входной параметр не используется непосредственно. это один из самых надежных способов защиты, правда, это происходит в ущерб гибкости: чтобы добавить новый файл, вам недостаточно просто поместить его в каталог, вам нужно еще и добавить его в этот switch. правда, сразу что-то не заметил, в case-ах у вас int-ы, а $page всегда будет строкой или массивом строк (все $_GET параметры имеют такой тип). но это уже вопрос производительности (php "очень крут" в плане автоматического преобразования типов), для 7ми вариантов, пожалуй, не очень-то и критично, но все же правильней либо $page преобразовать в int, либо под case-ами указывать не 1, 2, 3, ..., а '1', '2', '3', ... в моем коде $page в инт уже преобразован, так что все нормально. Еще, есть замечательная статья, PHP: a Fractal of Bad Design и ее перевод. Рекомендую ее к прочтению абсолютно всем пхп-разработчикам, в первую очередь для того, чтобы узнать об особенностях этого языка. В частности, там освещены вопросы преобразования типов, хоть и не полностью. Далее, что касается file_exists('<какой-то каталог>/<еще какой-то каталог>/<...>/../../../../../<...>/file.php'). Представьте на секунду, что функция вернула бы false. Почему? потому что промежуточный каталог <какой-то каталог> не существует? В таком случае, как должна работать эта функция? Правильно, она должна делить всю строку по слешам, должна к каждому файлу применять ф-цию is_dir()... сами подумайте, разве это не долго? Ну ладно бы, просто долго. А представьте, что вы применяете полные пути к файлам: /var/www/mysite/htdocs/dir1/dir2/index.php . Думаете, при каждом таком инклуде или file_exists должны проверяться все промежуточные каталоги? Да это ж капец как долго, на самом деле! То есть получится, что использовать include_path во много раз быстрее, хотя мы указали: да вот на, не мучайся, не ищи ты этот файл! Он должен быть точно вот тут! А он начинает шариться по каталогам... ужас. разве нет? Я не эксперт в области файловых систем, но не думаю, что есть какой-то иной способ сохранять имя файла, кроме как в единственном, уникальном, каноническом виде: в виде абсолютного пути, которое должно быть уникальным. Не по теме: Разумеется, к этому всему нужно как-то приплести иноды и прочую радость внутреннего устройства ФС. Я подумал, порассуждал, но я правда не смог сходу придумать, как это реально и очень производительно реализуется. Поэтому этот аспект я не стану затрагивать, и далее рассуждения идут очень абстрактно. Но по крайней мере, это применимо ко всем ФС, которые я знаю Не по теме: Я не уверен на 100%, что так делается на низком уровне и всегда. Ведь читая входную строку, содержащую имя файла, теоретически можно двигаться и по дереву ФС, и тогда, в действительности, можно обнаружить, что какого-то промежуточного каталога нет. надо будет как-нибудь это проверить (ну долго и ооочень влом запустить блокнот и сделать fopen, это да:), но все же я пишу не про файловые системы в общем), но, по крайней мере, это справедливо для php (в тех же мануалах по lfi можно прочитать, где и как выполняется это преобразование. Хакерам все это еще лучше надо знать, чем простым разработчикам:)) Добавлено через 29 минут Не по теме: черт. раздел для начинающих. точно. блин. я думал, это скромность такая, задавать вопросы по безопасности... зря ты, Сережа, сюда, пришел, ой как зря... моск вынес всем... *pokerface* это Тернарная условная операция. или, в народе, просто, тернарный оператор. Тернарный -- от слова "тройной", т.е. три операнда. обычно их два, как a+b, или a-b, или a<<b, или a|b, ну и т.д. а тут вот их три. ну собственно, обычно, в языках программирования (по крайней мере, императивных) их не очень много, поэтому единственным тернарным оператором является эта вот хренотенька. Поэтому под словосочетанием "тернарный оператор" по дефолту понимается "условный тернарный оператор".
0
|
|||||||
| 13.03.2013, 20:01 | |
|
0
|
|
| 13.03.2013, 20:12 | |
|
Не по теме: :D забыл еще пару ссылок, ага. сеошники нервно курят в сторонке: я наконец-то придумал, как раскрутить википедию!
0
|
|
|
26 / 19 / 5
Регистрация: 19.05.2009
Сообщений: 2,309
|
|||||||||||
| 19.03.2013, 17:09 [ТС] | |||||||||||
|
вот если вместо switch сделать так:
Добавлено через 56 минут С хидером сделал, но выдает пустой экран так и должно быть?
0
|
|||||||||||
| 19.03.2013, 17:09 | |
|
Правильно ли я делаю? Правильно ли я делаю Git правильно ли я делаю Всё ли я правильно делаю ? Что я делаю не правильно ?! Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#.
Название изменил на ColorStep.
Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
|
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами:
- ВидТО (СправочникСсылка. ВидыТО);
- ВидГСМ. . .
|
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала.
Ниже прикреплён. . .
|
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F
Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU.
Опрашиваются регистры. . .
|
|
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка:
Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
|