Приветствую, kochetkov.vladimir, вы писали:
k> k>> А еще я понял, почему он всех призывает тотально изучать администрирование. Он даже в разработке использует те технологии, в которых, не обладая навыками админа, можно отхватить такие грабли, что поневоле админить начинаешь k> S>Это которые? Просто интересно. k> Там в сообщении аж два смайлика на этот счет стоит (третий).
Ну я придерживаючь правила "в каждой шутке есть доля шутки..."
Итак, что тебя заставило так сказать?
Здравствуйте, Sheridan, Вы писали:
S>Ну я придерживаючь правила "в каждой шутке есть доля шутки..." S>Итак, что тебя заставило так сказать?
Это были размышления вслух о причинах существования твоего мнении о том, что программеры должны владеть навыками администрирования. Как одна из возможных причин, предподнесенная в виде не очень удачной шутки.
Приветствую, kochetkov.vladimir, вы писали:
k> Не, это уже пройденный этап. Недавно случилось страшное и Шеридана потянуло в веб-технологии. Теперь он всем объясняет
Приветствую, kochetkov.vladimir, вы писали:
k> Угу. Тебе уязвимости (XSS, доступ к исходникам скриптов, возможно LFI, возможно HTTP Response splitting) — сюда кидать или в личку?
Я в курсе, ибо никаких защит не делал
Давай сюда, и я поумнею, и другим интересно будет.
Здравствуйте, kochetkov.vladimir, Вы писали:
k> Угу. Тебе уязвимости (XSS, доступ к исходникам скриптов, возможно LFI, возможно HTTP Response splitting) — сюда кидать или в личку?
Здравствуйте, Anton Batenev, Вы писали:
AB>Здравствуйте, kochetkov.vladimir, Вы писали:
k>> Угу. Тебе уязвимости (XSS, доступ к исходникам скриптов, возможно LFI, возможно HTTP Response splitting) — сюда кидать или в личку?
AB>Чем прогоняешь?
Когда вот так вот — навскидку, то руками. Ну + FF, обвязанный правильными расширениями (не сканерами). Когда по серьезному, то руками + основные юзкейсы сайта через ratproxy + с оглядкой на фон, где accunetix сканит на предмет xss, а xspider на все остальное. Последний — только если на работе и наши собственные сайты ибо ограничение лицензии.
Это если мы говорим исключительно о веб-приложениях и их пентестах.
Здравствуйте, Sheridan, Вы писали:
S>Приветствую, kochetkov.vladimir, вы писали:
k>> Угу. Тебе уязвимости (XSS, доступ к исходникам скриптов, возможно LFI, возможно HTTP Response splitting) — сюда кидать или в личку?
S>Я в курсе, ибо никаких защит не делал S>Давай сюда, и я поумнею, и другим интересно будет.
Ну, как знаешь...
XSS — на самом деле, можно взять любой параметр GET-запроса, который попадает на выход
Доступ к исходникам — нужно либо делать все, что содержит код, с расширением .php, либо запрещать доступ к этим файлам или размещать их выше корня хоста.
Расщепление HTTP-заголовка — появится, как только отключишь warning'и. Из варнингов также понятно, что id передается в file_get_contents file_put_contents проходя только экранирование magic_quotes'ами (либо чем-то аналогичным). Только благодаря тому, что там к этой строке еще добавляется '/names' у тебя сейчас нет LFI (local file include) и доступа к произвольному файлу ФС с правами веб-сервера.
Еще обратил внимание (но не проверял) на недостаточный контроль данных из кук (style). Скорее всего, там тот же самый набор уязвимостей.
Приветствую, kochetkov.vladimir, вы писали:
k> XSS — на самом деле, можно взять любой параметр GET-запроса, который попадает на выход
fixed
k> Доступ к исходникам — нужно либо делать все, что содержит код, с расширением .php, либо запрещать доступ к этим файлам или размещать их выше корня хоста.
fixed
k> Расщепление HTTP-заголовка — появится, как только отключишь warning'и. Из варнингов также понятно, что id передается в file_get_contents file_put_contents проходя только экранирование magic_quotes'ами (либо чем-то аналогичным). Только благодаря тому, что там к этой строке еще добавляется '/names' у тебя сейчас нет LFI (local file include) и доступа к произвольному файлу ФС с правами веб-сервера.
походу тоже fixed
k> Еще обратил внимание (но не проверял) на недостаточный контроль данных из кук (style). Скорее всего, там тот же самый набор уязвимостей.
Жду
Приветствую, kochetkov.vladimir, вы писали:
k> Из варнингов также понятно, что id передается в file_get_contents file_put_contents проходя только экранирование magic_quotes'ами (либо чем-то аналогичным).
0_0 — это директория 0 с поддиректорией 0, 0_12 соответственно o/12/
list($a,$b) = split('/_/', $id);
$dir = "$server_root/games/a/b/";
Здравствуйте, elmal, Вы писали:
E>Ну дык это ... хочешь в языках с динамической типизацией уверенности что все хорошо — пиши тесты со 100 процентным покрытием .
Чем в данном случае помогло бы 100%-е покрытие?
Если нам не помогут, то мы тоже никого не пощадим.
Здравствуйте, kochetkov.vladimir, Вы писали:
k> Когда вот так вот — навскидку, то руками. Ну + FF, обвязанный правильными расширениями (не сканерами).
И что, на такой простой странице можно было допустить столько ошибок? Или они лишь потенциальные и реально ими воспользоваться еще очень постараться придется?
Здравствуйте, Anton Batenev, Вы писали:
AB> И что, на такой простой странице можно было допустить столько ошибок? Или они лишь потенциальные и реально ими воспользоваться еще очень постараться придется?
У... вижу. Мне бы такого security officer на opensvn...
Здравствуйте, Sheridan, Вы писали:
k>> Доступ к исходникам — нужно либо делать все, что содержит код, с расширением .php, либо запрещать доступ к этим файлам или размещать их выше корня хоста. S>fixed
А как же опенсорс?
Здравствуйте, Sheridan, Вы писали:
k>> Еще обратил внимание (но не проверял) на недостаточный контроль данных из кук (style). Скорее всего, там тот же самый набор уязвимостей. S>Жду
Здравствуйте, Anton Batenev, Вы писали:
AB>Здравствуйте, Anton Batenev, Вы писали:
AB>> И что, на такой простой странице можно было допустить столько ошибок? Или они лишь потенциальные и реально ими воспользоваться еще очень постараться придется?
AB>У... вижу. Мне бы такого security officer на opensvn...
Для Avalon'а? Так я его и так тестировать буду (security@rsdn чуть подзабросил из-за нехватки времени, каюсь. Но планирую вернутся к нему в апреле, если что). Или ты про другие проекты? Пиши в личку или сюда, если что — не вижу причин не помочь, по мере возможности, интересному открытому проекту
Notice: Use of undefined constant variable2 - assumed 'variable2' in D:\work\EasyPHP5.3.0\www\monopoly\www.php on line 8
Notice: Use of undefined constant variable1 - assumed 'variable1' in D:\work\EasyPHP5.3.0\www\monopoly\www.php on line 11
Notice: Undefined variable: variable2 in D:\work\EasyPHP5.3.0\www\monopoly\www.php on line 11
variable1 10
И читайте доки. PHP устойчив к "идиотским ошибкам", идиотские ошибки в нем не рушат работу всей системы
А вот правильность и чистота написания кода зависит от вас + пользуйтесь проверкой синтаксиса, например NetBeans выдаст предупреждение о том, что переменная не инициализирована.
Поддержка таких Notice очень полезна для работы группы разных разработчиков за маленькие деньги. Если разные модули пишут разные люди, то выход из строя одного модуля не рушит всю систему целиком. Не нужно тратить время на написание обработки ошибок.
Здравствуйте, Anton Batenev, Вы писали:
AB>Здравствуйте, neFormal, Вы писали:
F>> AB>Если код предполагается под нагрузку, то будет тормозить. F>> сильно?.
AB>Преждевременная оптимизация зло — что-то я "в пылу сражения" ляпнул не подумав.
AB>Я так понимаю, что ты пытаешься сделать некоторое подобие ORM и дальше начнешь генерить в рантайме SQL запросы? Вот в этом месте я бы написал пару-тройку тестов на производительность — PHP с MySQL требует некоторой осторожности. А так, если просто reflection и ничего с ним не делать, то он достаточно быстр — т.е. вызов функции дешев.
на обычном железе арифметические операции, операции поиска в тексте, конкатенция и т.д. занимает 0.00x секунд на всю страницу при работе с mysql 0.0x если есть сортировка и временные таблицы, так же нужно учесть количество записей и бредовость запросов
Пример с одного сайта. Там косяк с индексами, но не хватает квалификации для их перепеси.
Порт с loomilы, которая дохла после 1000 записей в основной базе и работала дольше 30 секунд.
Сейчас там явно больше 12000 фильмов, я не говорю о количестве записей в таблице и о том, что машина на Linuxe уже 3 раза умерала (железо) + 1 раз был уронен блок питания на процессор Сейчас стоит на каком то страшном железе где порядка 30 сайтов + система диагностики сети (база более 300Гб уже, логи).
Время выполнения: 1.8658950328827 секунд (25 запросов, 1.8423883914948 сек)
select count(*) from jos_jmovies where published=1; (0.0031259059906006) sec
select c.id,c.title,c.alias from jos_categories as c, jos_jmovies_categories as mc where mc.catid=c.id and c.section='com_jmovies' and c.published=1 group by c.id order by c.title; (0.011789083480835) sec
select m.id,m.titolo as name, CONCAT(SUBSTR(m.descrizione,1,200),'...') as descr, m.urlweblocal, m.video, m.urltrailer as dcurl, m.urlweb from jos_jmovies as m where published=1 order by rand() limit 1; (0.39255499839783) sec
select m.id,m.titolo as name,m.titolo2 as name_e, CONCAT(SUBSTR(m.descrizione,1,300),'...') as descr, m.nazione as country, m.regista as rejisser, m.anno as year, m.filename, m.video, m.audio, m.urlweblocal, m.counter, m.votes, m.votesum, m.attorealtri as actors, m.published, m.urltrailer as dcurl, m.urlweb as ftpurl from jos_jmovies as m left join jos_jmovies_categories as mc on m.id=mc.jmoviesid where (m.published=1) and publish_up<=NOW() group by m.id order by m.publish_up desc limit 0,20; (0.72129893302917) sec
select DISTINCT(c.title) from jos_jmovies_categories as mc, jos_categories as c where c.id=mc.catid and mc.jmoviesid=43661; (0.67020106315613) sec
select DISTINCT(c.title) from jos_jmovies_categories as mc, jos_categories as c where c.id=mc.catid and mc.jmoviesid=43677; (0.00031805038452148) sec
select DISTINCT(c.title) from jos_jmovies_categories as mc, jos_categories as c where c.id=mc.catid and mc.jmoviesid=43676; (0.0002589225769043) sec
select DISTINCT(c.title) from jos_jmovies_categories as mc, jos_categories as c where c.id=mc.catid and mc.jmoviesid=1344; (0.00026106834411621) sec
select DISTINCT(c.title) from jos_jmovies_categories as mc, jos_categories as c where c.id=mc.catid and mc.jmoviesid=41597; (0.00028705596923828) sec
select DISTINCT(c.title) from jos_jmovies_categories as mc, jos_categories as c where c.id=mc.catid and mc.jmoviesid=43334; (0.00028800964355469) sec
select DISTINCT(c.title) from jos_jmovies_categories as mc, jos_categories as c where c.id=mc.catid and mc.jmoviesid=43258; (0.00029087066650391) sec
select DISTINCT(c.title) from jos_jmovies_categories as mc, jos_categories as c where c.id=mc.catid and mc.jmoviesid=43225; (0.00026798248291016) sec
select DISTINCT(c.title) from jos_jmovies_categories as mc, jos_categories as c where c.id=mc.catid and mc.jmoviesid=43335; (0.0003058910369873) sec
select DISTINCT(c.title) from jos_jmovies_categories as mc, jos_categories as c where c.id=mc.catid and mc.jmoviesid=43675; (0.00027894973754883) sec
select DISTINCT(c.title) from jos_jmovies_categories as mc, jos_categories as c where c.id=mc.catid and mc.jmoviesid=43674; (0.00027298927307129) sec
select DISTINCT(c.title) from jos_jmovies_categories as mc, jos_categories as c where c.id=mc.catid and mc.jmoviesid=43673; (0.00026297569274902) sec
select DISTINCT(c.title) from jos_jmovies_categories as mc, jos_categories as c where c.id=mc.catid and mc.jmoviesid=43672; (0.00031495094299316) sec
select DISTINCT(c.title) from jos_jmovies_categories as mc, jos_categories as c where c.id=mc.catid and mc.jmoviesid=43671; (0.00027894973754883) sec
select DISTINCT(c.title) from jos_jmovies_categories as mc, jos_categories as c where c.id=mc.catid and mc.jmoviesid=43670; (0.0003058910369873) sec
select DISTINCT(c.title) from jos_jmovies_categories as mc, jos_categories as c where c.id=mc.catid and mc.jmoviesid=43669; (0.00028014183044434) sec
select DISTINCT(c.title) from jos_jmovies_categories as mc, jos_categories as c where c.id=mc.catid and mc.jmoviesid=43594; (0.00026988983154297) sec
select DISTINCT(c.title) from jos_jmovies_categories as mc, jos_categories as c where c.id=mc.catid and mc.jmoviesid=43606; (0.00025391578674316) sec
select DISTINCT(c.title) from jos_jmovies_categories as mc, jos_categories as c where c.id=mc.catid and mc.jmoviesid=43668; (0.00027799606323242) sec
select DISTINCT(c.title) from jos_jmovies_categories as mc, jos_categories as c where c.id=mc.catid and mc.jmoviesid=43349; (0.00025486946105957) sec
select count(*) from jos_jmovies as m left join jos_jmovies_categories as mc on m.id=mc.jmoviesid where m.published=1 group by m.id; (0.038089036941528) sec