- 1
- 2
- 3
- 4
- 5
<?php
$url = $_GET['url'];
$url = str_replace('http://', '', $url);
echo '<a href="http://$url">123</a>';
?>
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+155
<?php
$url = $_GET['url'];
$url = str_replace('http://', '', $url);
echo '<a href="http://$url">123</a>';
?>
Lure Of Chaos 03.09.2010 19:12 # −1
странная, конечно, логика - убирать протокол, а потом вставлять... Наверное, это, типа что бы он обязательно был, но один раз.
а к тому же не учтено, что протокол может оказаться не только вначале (хотя, если правильно, то должен быть проэскейпен)
про echo, наверное, скажет кто-нибудь другой, но больше меня насмешило хардкод название 123.
Lure Of Chaos 03.09.2010 19:13 # +1
telnet 03.09.2010 19:24 # +1
Lure Of Chaos 03.09.2010 19:30 # −2
дело в том, что в книжках для начинающих об этом ни гугу. Я тоже, помнится, узнал о проблеме безопасности, считаю, поздновато. Нет, ничего не сломали, но, помнится, зафиксировал попытку ввода "странных" данных - скобки, кавычки и пр. Тогда даже не понял, зачем...
1_and_0 03.09.2010 19:39 # +2
Lure Of Chaos 03.09.2010 19:50 # −2
даа что говорить! если вот в школах деток учат математике, физике, химии, биологии, а межличностным и межполовым отношениям - нет. Напротив, были когда-то предметы в школе "этика", "религия" - так ведь тоже отменили, мол, за ненадобностью! То есть, ребенок тригонометрию среди ночи тебе отчеканит, а как решать повседневные проблемы и конфликты - он либо не знает, либо "просвещается" там и так, как точно только во вред...
telnet 03.09.2010 20:45 # −1
Lure Of Chaos 03.09.2010 22:04 # −3
telnet 04.09.2010 05:37 # +3
hybroid 03.09.2010 22:02 # 0
Lure Of Chaos 03.09.2010 22:05 # 0
gEKA6PbCKuu_nemyx 22.12.2021 12:23 # 0
Lure Of Chaos 03.09.2010 19:40 # −2
1_and_0 03.09.2010 19:58 # 0
Lure Of Chaos 03.09.2010 20:01 # −2
1_and_0 03.09.2010 20:35 # 0
Lure Of Chaos 03.09.2010 20:39 # −2
1_and_0 03.09.2010 20:42 # 0
Больно конечно, кому будет приятно, если сайт работал работал, а на него, к примеру повесили инклудом брут хешированных паролей от левого сайта, хрена, мощности серваку не занимать, но все же ресурсов будет жечь немерено.
Lure Of Chaos 03.09.2010 21:05 # −1
1_and_0 03.09.2010 19:58 # 0
Lure Of Chaos 03.09.2010 20:04 # −2
telnet 03.09.2010 20:42 # +1
Тонкий намёк на Rumba CMS? У неё ещё автор с таким пафосным ником ходит - Maestro - и удаляет неугодные комменты X))
1_and_0 03.09.2010 20:51 # 0
вот где профи..., эх..., дорасти бы...
telnet 03.09.2010 20:48 # 0
Lure Of Chaos 03.09.2010 21:07 # −2
telnet 03.09.2010 21:20 # 0
> анализ безопасности требует не только опыта, но и внимательных и тщательных проверок (недосмотрел с недосыпу - и полезли в дыру
...а составление запросов привёл лишь как пример того, что в ряде случаев ручную заботу о безопасности возможно эффективно заменить автоматикой. До обезьянок это, кстати, частенько не доходит. Собственно, почему запросы-то вспомнились: мне известны случаи, когда последователи тупых авторов тупой литературы по PHP писали несколько сот килобайт кода с использованием ручного приведения типов и экранирования. Сляпать примитивнейший квери билдер хотя бы для INSERT'ов соображалки недоставало. Вопрос поиска дырок в их поделках сводился лишь к внимательному чтению кода.
Lure Of Chaos 03.09.2010 21:49 # −3
вот в пример громкий провал мелкомягких: http://habrahabr.ru/company/eset/blog/102549/
telnet 03.09.2010 21:53 # 0
> не всегда все так просто
Так я и говорю,
> в ряде случаев
.
Lure Of Chaos 03.09.2010 21:56 # −4
а хабрахабр рекомендуется в закладки для ежедневного просмотра. Потому как очень мало столь интересных ИТ-ресурсов
Мартин 05.09.2010 08:35 # −2
1_and_0 03.09.2010 22:03 # 0
Lure Of Chaos 03.09.2010 22:16 # −2
при прохождении "потока" данных по слоям приложения где и как нужно эти данные фильтровать?
эмпирически потыкав и набив шишек пришел к выводу:
фильтровать данные каждый слой должен в своей манере.
то есть, когда приходят данные
1. Request проверяет правильность формата данных, то есть, если ожидается число, то он должен гарантированно вернуть число или сигнал о нештатной ситуации
2. DAO должен эскейпить входящие данные, как минимум через mysql_real_escape_string
3. View должен проэкскейпить все данные, к примеру, на htmlentities
При этом, например, Request НЕ должен эскейпить данные "сразу" для View'а - иначе рискуем получить кашу и в логике и в представлении
1_and_0 03.09.2010 22:24 # 0
Lure Of Chaos 03.09.2010 22:29 # −2
или вас не уведомили
1_and_0 03.09.2010 22:32 # 0
Lure Of Chaos 03.09.2010 22:37 # −1
это я не вас пытаюсь уязвить, такой сценарий возможен у каждого, и вполне возможно, что происходил у меня....
Lure Of Chaos 03.09.2010 22:35 # −2
это как понимать? типа rich client application?
Анонимус 04.09.2010 00:25 # +3
Внутри приложения, между подсистемами должны ходить девственно-наивные данные. Если там есть строка '2' < "3" -- то так там и должно быть.
Вью должен превращать < в энтити. DAO должен экранировать ".
Нет ничего тупее ситуации, когда в базе хранят заэскейпленные десять раз кавычки и замененные на энтити значки "меньше".
А все почему?
Потому что ХТМЛ -- нифига не единственный вью. И SQL не единственный DAO.
Чем больше прогер об этом помнит -- тем лучше получается приложение.
Напиши консольный UI к Вашему приложению. Заставьте его хранить данные в LDAPе. И сразу станет понятно -- где оно красивое, а где -- говно)
Lure Of Chaos 04.09.2010 00:29 # −1
Анонимус 04.09.2010 00:31 # 0
полезно заюзать какой-нить dependency injection, склеить им пяток подсистем, и покрыть каждую юнит-тестами.
Сразу мозг становится на место)
Lure Of Chaos 04.09.2010 00:38 # −1
а вот мозги проветрить - оно самое. лучше, чем продакшн потом обвалится
Анонимус 04.09.2010 00:40 # 0
но ОЧЕНЬ помогает. Если у Вас каша из логики, вью и дао -- то хрен Вы это оттестируете.
Именно желание тестировать логику заставило многих писать нормальный код)))
Lure Of Chaos 04.09.2010 00:50 # −1
по старинке, дебагом принтами ))))
а так все верно - для тестов нужна модульность и точки входа и выхода.
> Именно желание тестировать логику заставило многих писать нормальный код)))
и сюда еще вспомните test-driven development
Анонимус 04.09.2010 00:54 # +1
А вот что бы не было пагубного желания дебагов и принтов надо настроить continues integration на чем нибудь типа cruise control или teamcity.
Что бы безжалостный робот, не понимающий принтов и дебагов запускал ВСЕ юнит тесты после каждого коммита, и слал письма если тесты упали.
Lure Of Chaos 04.09.2010 00:58 # −1
а необходимость дебага - напротив, внештатная ситуация (а мы-то были уверены, что все хорошо!)
Анонимус 04.09.2010 01:00 # 0
Lure Of Chaos 04.09.2010 01:01 # −1
Lure Of Chaos 04.09.2010 01:00 # 0
Анонимус 04.09.2010 01:01 # 0
Lure Of Chaos 04.09.2010 01:03 # −1
Анонимус 04.09.2010 02:15 # 0
И там его (как и полагается) учат борланд сям. Тем самым, с IDE на тубробвижине под дос, как меня в 98м:)
Парень писал какую-то игрушку на псевдографике (типа змейки), и запутался в ней. И папаша говорит ему: "сделай принт переменной и посмотри".
Я возмутился, и показал как у борланда ставить брекпоинт.
А потом оказалось что пхпшник пишет в эдитплюсе, и ищет баги с помощью echo, хотя он не глупый совершенно.
Lure Of Chaos 04.09.2010 18:09 # 0
мне как-то "свезло" работать в одной шарашке, там писали в эдитплюсах, дебажили принтами, разрабатываемую версию клали на тестовый сервак через фтп, и постоянно бегали спрашивали, кто с какими файлами работает, что бы не потерять результаты чужой работы = )
натурально, что мои предложения каждому поставить у себя локальный хампп и эклипс, и начать пользоваться свн'ом не были поняты.
тогда я поработал немного и сбег оттуда - до того, как надо будет раслебывать какой нить тотальный пиздец
Анонимус 03.09.2010 21:31 # +1
telnet 03.09.2010 21:40 # +4
mr.The 03.09.2010 20:59 # 0
bugmenot 03.09.2010 21:29 # +1
Lure Of Chaos 03.09.2010 23:39 # −6
сюда можно целую хтмл страницу вместо $url вляпать -это и будет code injecting, и как частный случай, xss - смотря что туда вляпывать. Например, тот же дефейс произвести - это не xss будет
Uchkuma 03.09.2010 23:44 # +5
Так-то.
Lure Of Chaos 03.09.2010 23:48 # −1
спасибо за тыкание носом
Мартин 05.09.2010 08:44 # 0
Lure Of Chaos 05.09.2010 10:25 # −1
Uchkuma 03.09.2010 23:40 # +2
Весь интерес в том, чтобы автор этого говна с "чистой" совестью мог сказать: "Но ведь работает же!" ))
Lure Of Chaos 03.09.2010 23:49 # −2
Мартин 05.09.2010 08:46 # 0
Не знал. На будущее учту. Думал что оригинальный код автора будет интереснее, чем работающий после моей подсказки (сказал, чтобы заменил на echo '<a href="'.http://$url.'">123</a>';
Uchkuma 05.09.2010 10:28 # +1
Uchkuma 03.09.2010 23:47 # +6
Кавычки одинарные!
Lure Of Chaos 03.09.2010 23:50 # 0
и это правильно
cheef 06.09.2010 13:03 # −1