Тут проблема на самом деле глубже, чем "менять сами обращения к базе". А в кривой архитектуре. У вас SQL торчит в контроллерах. Только вместо нормальных запросов вы туда высунули огрызки, типа "taskid = $id". Это такой очень наивный детский подход, "я в домике!".
Причём даже его можно было сделать нормально, в виде $ctx->taskDataDao->makeLookup('type', 'taskid', $id);. И хотя это всё равно нарушение границ - в контроллере надо знать название таблицы БД, такой код по крайней мере легко сделать безопасным. Но по-хорошему в контроллере длолжен вызываться метод модели/сервиса, который сам знает детали реализации - в какой таблице и по какому полю искать.
В том-то и дело, что вы не понимаете главного. Для вас защита принципиально сводится к латанию дыр. "Ну я сейчас поищу", "ну я заменю регулярку". Для того чтобы отбояриться от зануды на Хабре это может и сойдёт (нет). Но к реальной защите это не имеет никакого отношения.
Защита работает только тогда, когда она применяется системно. Переменные попадают в SQL запрос всегда с защитой. А не в надежде, что где-то другом месте кода кто-то не забудет провалидировать. Данные выводятся в HTML всегда с защитой, а не только там где "я поискал".
Причем такой подход помимо прочего ещё и упрощает код. Из него пропадают растущие там и сям бородавки типа "/[\'\;]/". Валидация - это хорошо и правильно. Но она не должна заменять защиту. Это две совершенно разные области, которые пересекаются только в головах у новичков.
С одной стороны не хочется брюзжать, поскольку дело, в целом, благое, да и пост не про код. С другой - на что ещё смотреть в хабе про РНР, кроме как на код? А он, к сожалению, довольно грустный. Выглядит так, будто писался глубоко в позапрошлом десятилетии.
Объект-бог, который содержит в себе весь код приложения целиком. Но при этом всё равно передаётся через global.
Защита от SQL инъекций фактически отсутствует, и заменяется забором из костылей. Где-то это проверка на числовое значение, где-то кромсание наивной регуляркой типа "/[\'\;]/",(заведомо дырявой причём), где-то проверка через функцию validUrlParam(?!). Я больше чем уверен, что автор и сам путается, где что применять. Про несчастных пользователей я уж и не говорю. И хотя я не нашёл готовую инъекцию, по поговорке "У семи нянек дитя без глазу", она где-то да вылезет. Просто потому что защита не обеспечивается там где должна - в слое для работы с БД.
Защиты от XSS не нашёл вообще, но допускаю что она есть, в каком-нибудь совершенно неожиданном месте.
Валидациия входящих данных в зачаточном состоянии
Зависимость от апача прибита гвоздями.
Вместо исправления динамических пропертей к каждому классу старательно подставлен костыль
Ну и так далее, тут можно долго удивляться.
Я понимаю, что проект разрабатывался давно, и ресурсов на переделку особо нет. Но в таком случае я бы на вашем месте ограничился хабами про вайти образование et al., а код скромно задвинул подальше за шкаф.
Идея конечно интересная, но не очень понятно, почему невозможность получить данные одного субреддита (ну или погоды, если на то пошло) оставляет без распечатки целиком. Я бы всё-таки при возникновении проблем печатал спецсимвол "нишмагла" ¯\_(ツ)_/¯и продолжал выполнение дальше.
Вы совершенно правы - ваши аналогии тут ни к селу ни к городу. А у меня никаких аналогий, а только суровая реальность. Когда родители подсовывают детям планшет, чтобы не ныли, там совсем не Хабр с комментариями.
Слова "дюжий" и "дюжина" не имеют ничего общего. А в данном контексте означают диаметрально противоположные понятия. Несуществующее слово "недюжий" может означать "недужный", "слабосильный", "заурядный". А автор, видимо, имел в виду слово "недюжинный", которое означает "выдающийся", "неординарный". Но не сдюжил.
С одной стороны, статья на интересную тему, и в неё явно вложено немало труда. С другой - такое ощущение, что она написана как бы с акцентом. Вроде бы по-русски, но глаз всё время спотыкается о корявые обороты (типа "узкой задачи"), тавтологии ("эстетический внешний вид"), несогласованные предложения, фактические не точности и кривые ссылки. Все эти огрехи легко мог бы исправить редактор средней руки.
Но против такого пафосного спича мне возразить нечего. Со своим пещерным, я бы сказал - потребительским отношением к ютубочке я тут оказываюсь белой вороной. Разумеется, нормальному человеку без лайков, подписок и комментариев любой видеосервис будет не в радость.
Ну то есть вы согласны с мыслью, что ютуб - это сервис для комментирования, и без возможности оставлять комментарии становится бесполезным. Тут мне возразить нечего. Продолжайте комментировать, сидеть ради этого под своим акком через впн, и надеяться, что пронесёт.
Ютуб - это видеосервис. А вы сейчас говорите про главную страницу. И это действительно ад, подборка видео для имбецилов. Но вас никто не заставляет на неё заходить. Открываете любое нормальное видео, и вам показывают сходные. Ну правда туфта всё равно лезет, но для регов её точно так же подпихивают.
Впрочем, допускаю, что без возможности оставить свой комментарий, чтобы он затерялся среди тысяч других, для кого-то видеосервис вполне может потерять всю свою привлекательность.
Открою маленький секретик: ютуба прекрасно помнит тебя и твои интересы и без регистрации.
Именно поэтому, чтобы вылезти из пузыря, в который ютуб тебя запихивает, я периодически смотрю в приватном режиме. И понравившиеся там видео переношу в основное окно браузера, чтобы они добавились в пузырь.
Зависит от провайдера. Я вот сейчас перехожу от одного впс провайдера с копроблогом на хабре, который внезапно поднял цены в два раза, к другому, который как раз только что поставил стоечку в забугре. У обоих IP незашкваренные, ютуб показывает без регистрации и СМС. Причем у второго и вовсе айпи определяется как российский. А вот у первого - как голландский. Впрочем, вероятно именно за это они деньги и дерут, но мне без надобности.
А вот в процессе поиска альтернатив - действительно, нашел впску за 10$ в год, но там да, без регистрации не показывают. А у меня её и нет, как и желания заводить.
Действительно, посмотрев одно видео, надо всенепременно посмотреть все похожие. Иначе мир перевернётся пополам. И рекомендации надо чтобы обязательно дергали за штаны, всплывая в телефоне. Ну и такая приверженность лайкам вызывает уважение. "Лучше потеряю целиком аккаунт, чем возможность ставить лайки!". Респект.
А при чем здесь канал-то? Речь про просмотры. Ну законсервируйте канал до лучших времён. Это лучше, чем потерять его целиком. Выйдите из аккаунта, смотрите видео без регистрации.
И лайки же! Как можно забыть лайки? Ну и действительно, как пользоваться видеосервисом без рекомендаций. Это же самому придётся думать, что ты хочешь посмотреть.
Ваше невежество начинает начинает уже немного напрягать.
Тут проблема на самом деле глубже, чем "менять сами обращения к базе". А в кривой архитектуре. У вас SQL торчит в контроллерах. Только вместо нормальных запросов вы туда высунули огрызки, типа
"taskid = $id"
. Это такой очень наивный детский подход, "я в домике!".Причём даже его можно было сделать нормально, в виде
$ctx->taskDataDao->makeLookup('type', 'taskid', $id);
. И хотя это всё равно нарушение границ - в контроллере надо знать название таблицы БД, такой код по крайней мере легко сделать безопасным. Но по-хорошему в контроллере длолжен вызываться метод модели/сервиса, который сам знает детали реализации - в какой таблице и по какому полю искать.В том-то и дело, что вы не понимаете главного. Для вас защита принципиально сводится к латанию дыр. "Ну я сейчас поищу", "ну я заменю регулярку". Для того чтобы отбояриться от зануды на Хабре это может и сойдёт (нет). Но к реальной защите это не имеет никакого отношения.
Защита работает только тогда, когда она применяется системно. Переменные попадают в SQL запрос всегда с защитой. А не в надежде, что где-то другом месте кода кто-то не забудет провалидировать. Данные выводятся в HTML всегда с защитой, а не только там где "я поискал".
Причем такой подход помимо прочего ещё и упрощает код. Из него пропадают растущие там и сям бородавки типа
"/[\'\;]/"
. Валидация - это хорошо и правильно. Но она не должна заменять защиту. Это две совершенно разные области, которые пересекаются только в головах у новичков.С одной стороны не хочется брюзжать, поскольку дело, в целом, благое, да и пост не про код. С другой - на что ещё смотреть в хабе про РНР, кроме как на код? А он, к сожалению, довольно грустный. Выглядит так, будто писался глубоко в позапрошлом десятилетии.
Объект-бог, который содержит в себе весь код приложения целиком. Но при этом всё равно передаётся через global.
Защита от SQL инъекций фактически отсутствует, и заменяется забором из костылей. Где-то это проверка на числовое значение, где-то кромсание наивной регуляркой типа
"/[\'\;]/",
(заведомо дырявой причём), где-то проверка через функциюvalidUrlParam
(?!). Я больше чем уверен, что автор и сам путается, где что применять. Про несчастных пользователей я уж и не говорю. И хотя я не нашёл готовую инъекцию, по поговорке "У семи нянек дитя без глазу", она где-то да вылезет. Просто потому что защита не обеспечивается там где должна - в слое для работы с БД.Защиты от XSS не нашёл вообще, но допускаю что она есть, в каком-нибудь совершенно неожиданном месте.
Валидациия входящих данных в зачаточном состоянии
Зависимость от апача прибита гвоздями.
Вместо исправления динамических пропертей к каждому классу старательно подставлен костыль
Ну и так далее, тут можно долго удивляться.
Я понимаю, что проект разрабатывался давно, и ресурсов на переделку особо нет. Но в таком случае я бы на вашем месте ограничился хабами про вайти образование et al., а код скромно задвинул подальше за шкаф.
Идея конечно интересная, но не очень понятно, почему невозможность получить данные одного субреддита (ну или погоды, если на то пошло) оставляет без распечатки целиком. Я бы всё-таки при возникновении проблем печатал спецсимвол "нишмагла"
¯\_(ツ)_/¯
и продолжал выполнение дальше.del
Вы совершенно правы - ваши аналогии тут ни к селу ни к городу. А у меня никаких аналогий, а только суровая реальность. Когда родители подсовывают детям планшет, чтобы не ныли, там совсем не Хабр с комментариями.
Слова "дюжий" и "дюжина" не имеют ничего общего. А в данном контексте означают диаметрально противоположные понятия. Несуществующее слово "недюжий" может означать "недужный", "слабосильный", "заурядный". А автор, видимо, имел в виду слово "недюжинный", которое означает "выдающийся", "неординарный". Но не сдюжил.
С одной стороны, статья на интересную тему, и в неё явно вложено немало труда. С другой - такое ощущение, что она написана как бы с акцентом. Вроде бы по-русски, но глаз всё время спотыкается о корявые обороты (типа "узкой задачи"), тавтологии ("эстетический внешний вид"), несогласованные предложения, фактические не точности и кривые ссылки. Все эти огрехи легко мог бы исправить редактор средней руки.
Сорри, протупил сначала.
А вот это уже интересная информация.
Ютуб даёт рекомендации и без регистрации :)
Но против такого пафосного спича мне возразить нечего. Со своим пещерным, я бы сказал - потребительским отношением к ютубочке я тут оказываюсь белой вороной. Разумеется, нормальному человеку без лайков, подписок и комментариев любой видеосервис будет не в радость.
Ну то есть вы согласны с мыслью, что ютуб - это сервис для комментирования, и без возможности оставлять комментарии становится бесполезным. Тут мне возразить нечего. Продолжайте комментировать, сидеть ради этого под своим акком через впн, и надеяться, что пронесёт.
Ютуб - это видеосервис. А вы сейчас говорите про главную страницу. И это действительно ад, подборка видео для имбецилов. Но вас никто не заставляет на неё заходить. Открываете любое нормальное видео, и вам показывают сходные. Ну правда туфта всё равно лезет, но для регов её точно так же подпихивают.
Вам канал сохранить, или лайки ставить?
Впрочем, допускаю, что без возможности оставить свой комментарий, чтобы он затерялся среди тысяч других, для кого-то видеосервис вполне может потерять всю свою привлекательность.
Открою маленький секретик: ютуба прекрасно помнит тебя и твои интересы и без регистрации.
Именно поэтому, чтобы вылезти из пузыря, в который ютуб тебя запихивает, я периодически смотрю в приватном режиме. И понравившиеся там видео переношу в основное окно браузера, чтобы они добавились в пузырь.
Теневой бан бывает разным. В общем случае это любая блокировка, которая не говорит об этом прямо, "ваш аккаунт заблокирован".
А можно например не залипать на ютуб, а найти себе какое-то другое занятие для разнообразия.
Но это я ёрничаю. Разумеется, поколению, которому видеосервис заменил родителей, такие идеи покажутся святотатством.
Зависит от провайдера. Я вот сейчас перехожу от одного впс провайдера с копроблогом на хабре, который внезапно поднял цены в два раза, к другому, который как раз только что поставил стоечку в забугре. У обоих IP незашкваренные, ютуб показывает без регистрации и СМС. Причем у второго и вовсе айпи определяется как российский. А вот у первого - как голландский. Впрочем, вероятно именно за это они деньги и дерут, но мне без надобности.
А вот в процессе поиска альтернатив - действительно, нашел впску за 10$ в год, но там да, без регистрации не показывают. А у меня её и нет, как и желания заводить.
Действительно, посмотрев одно видео, надо всенепременно посмотреть все похожие. Иначе мир перевернётся пополам. И рекомендации надо чтобы обязательно дергали за штаны, всплывая в телефоне. Ну и такая приверженность лайкам вызывает уважение. "Лучше потеряю целиком аккаунт, чем возможность ставить лайки!". Респект.
А при чем здесь канал-то? Речь про просмотры. Ну законсервируйте канал до лучших времён. Это лучше, чем потерять его целиком. Выйдите из аккаунта, смотрите видео без регистрации.
И лайки же! Как можно забыть лайки? Ну и действительно, как пользоваться видеосервисом без рекомендаций. Это же самому придётся думать, что ты хочешь посмотреть.