• Как работает htmlspecialchars()?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Ну уж для такой-то простой функции должно быть достаточно написанного на странице документации.
    И, в частности, про ENT_QUOTES ;)

    Эта функция заменяет спецсимволы, которые являются управляющими в контексте HTML, на безобидные HTML-сущности. Вот и всё.
    Чисто визуально управляющие символы будут выглядеть так же, как и должны, но в коде не будут представлять ни малейшей опасности.

    Для XSS важно, будут ли экранироваться одинарные кавычки или нет, если одинарные кавычки используются для ограничения атрибута.
    Пример

    <?php $name = "' onclick='alert(\"pwned!\")"; ?>
    <input value="<?=htmlspecialchars($name) ?>"> Не важно. Весь текст так и заключен в двойные кавычки
    <input value='<?=htmlspecialchars($name) ?>'> Важно. Закрыли одинарную, вписываем, что хотим

    Во втором случае этот код отрендерится, как
    <input value='' onclick='alert(&quot;pwned!&quot;)'>
    (но при этом &quot; отрендерятся в двойные кавычки, и в onclick будет уже валидный яваскрипт
    alert("pwned!")

    А с взведенным флагом ENT_QUOTES мы получим
    <input value='&#039; onclick=&#039;alert(&quot;pwned!&quot;)'>

    И хотя значение внутри атрибута отрендерится, как ' onclick='alert("pwned!"), но оно все целиком будет внутри атрибута value.

    Разумеется, лучше всего сделать применение функции универсальным, чтобы не проверять кавычки каждый раз, и не обливаться холодным потом, если кавычки вдруг поменяются. И использовать ENT_QUOTES всегда.

    К счастью, РНР уже позаботился о вас и ваших друзьях. Начиная с версии 8.1, флаг ENT_QUOTES ставится по умолчанию. И приведенный выше пример будет работать только на устаревших версиях. Так что ручное добавление уже уходит в область легаси-практик.

    Чтобы не ломать пальцы, каждый раз набирая всё это htmlspecialchars ENT_QUOTES, толковые джуны всегда пишут пользовательскую функцию-макрос, типа
    function esc($var) {
        return htmlspecialchars($var, ENT_QUOTES);
    }

    Правда, надолго с этой функцией не задерживаются, потому что она годится только при обучении. А любой проект сложнее, чем домашняя страничка про любимого котика, в обязательном порядке уже должен для вывода использовать специальный шаблонизатор, например Twig. Где весь вывод идет с помощью специального оператора, который уже по умолчанию экранирует HTML
    <input value="{{$name}}"> Не важно. Все уже проэкранировано до нас

    Важно помнить, что это экранирование работает только в контексте HTML.
    Если выводим данные внутри кода яваскрипт, то htmlspecialchars поможет как мертвому припарки. И в этом случае надо использовать json_encode.

    Ну и разумеется, надо не забывать комбинировать все варианты экранирования.
    Например, код яваскрипт, который пишется в атрибут HTML тега, надо весь целиком экранировать c с помощью htmlspecialchars. А данные для этого кода - c с помощью json_encode:
    <button onclick="<?= htmlspecialchars("window.open(".json_encode($name).")", ENT_QUOTES) ?>">
    Ответ написан
    3 комментария
  • Что такое MVC и как его использовать?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    На мелких одноразовых задачах вида "сделать форму, которая бы сохраняла что-то в таблицу и забыть про нее" понять преимущества MVC невозможно.

    MVC - это не про сделать, а про поддерживать и развивать.

    Представим, что вместо обычной формы мы решим сделать ajax. Если у нас будет обычный винегрет из SQL, PHP и html, то придется переписывать его весь.
    Если же у нас нормальная структура, то просто заменим во View вызов шаблонизатора на json кодирование. то есть поменяем одну строчку кода.

    Допустим, в дополнение к форме нам нужно будет сделать консольную команду, которая берет данные из файла.

    Если используется обычный говнокод-подход, то придется все писать заново.
    При использовании MVC, надо будет в этой утилите написать только чтение из файла, а дальше просто вызвать метод модели, который у нас уже есть.
    Ответ написан
    Комментировать
  • Где разработчику найти живое общение, если он работает удаленно?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Джунам - крайне вредна удалёнка.
    Гуру - изредка общаются в реале только по ключевым вопросам: юридические, финансовые, условия труда, шашлык.
    Ответ написан
    2 комментария
  • Как редактировать плагин WordPress, чтоб при его обновлении изменения сохранились?

    OtshelnikFm
    @OtshelnikFm Куратор тега WordPress
    Обо мне расскажет yawncato.com
    Не слушайте, они не в теме))

    Можно, но при условии ваших знаний и возможностей плагина. Важно усвоить - ядро (файлы) плагина править нельзя. Но у себя воздействовать - можно.

    Итак:

    Смотря что вы подразумеваете под редактированием:

    1. Если css файлы - их редактировать нельзя. Только переопределять. т.е. если есть класс .some в плагине - то вы у себя в подвале подключайте свой css файл, а стиль для .some переносите и пишите там.

    2. если вы говорите о правке перевода, а у автора плагина строки переведены через __() функции - то воспользуйтесь плагинами интернационализации (переводов), или ВП фильтром gettext

    3. Если php файлы, то поинтересуйтесь у автора - есть ли в том месте, где вы хотите поменять, фильтр. apply_filters в коде плагина, а вы воздействуете на него через add_filters (Есть еще экшены (действия) - но они не позволяют изменять. Это триггеры, когда событие произошло).
    Если фильтра в этом месте нет - попросите автора добавить его. Обычно автор заинтересован в том, что его плагином пользуются и внедряет. Но если вам фильтр нужен только для смены текста - то вам вариант номер два, выше. У плагина может быть 500 строк и на каждую строку текста лепить фильтр - маразм.

    4. Автор плагина может ввести и поддерживать функционал шаблонов. Темплейты - например карточка товара, профиль пользователя, одиночная запись и т.д. Такой функционал имеют многие плагины. bbPress, woocommerce. Суть их такова - что вы переносите файл шаблона (например cart.php) в свою тему или внутри папки wp-uploads (каждый плаг по своему реализует) и плагин вначале проверяет наличие такого файла вне своей папки, а потом, если не нашел там, подключает из своей папки. Так вы можете всю нужную верстку и внешний вид под себя переделать.

    5. Много функций внутри плагина висит на хуках (add_action) - например так:
    add_action('some_action', 'some_function', 20);
    где 20 - приоритет выполнения. Так вы можете всю функцию дерегистрировать через remove_action. Например так:
    remove_action('some_action', 'some_function', 20); (приоритет 20 обязательно такой как и при регистрации)
    и потом всю функцию из плагина копируйте к себе (переименуйте) и вешайте на этот же хук и приоритет. Внутри функции уже делайте как вам надо - изменяйте.
    Но этот способ самый зависимый - т.к. вам нужно следить - вдруг в обновлении автор в этой функции внес изменения или устранил уязвимость. Следите через svn или гит.

    Так что варианты есть. А если их еще в плагине нет - попросите автора плагина добавить такую возможность. Если автор плагина не пойдет на встречу - не юзайте такой плагин. Там нет будущего. Большинство программистов понимает что ситуаций много и помогают и внедряют и подсказывают если есть еще способы влияния на нужный участок.
    Ответ написан
    Комментировать
  • Стилизация QR-кода и вставка логотипа?

    arxont
    @arxont
    C# программист
    Ответ написан
    Комментировать
  • Стоит ли идти в веб-разработку?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Web-разработка - это не только сайты для малого и среднего бизнеса. И HTML+CSS+JS - это лишь малая часть web-разработки. Самый главный минус в том, что на входе огромная конкуренция. Но если прорваться через это барьер, то тут не хуже, чем в любых других направлениях ИТ.
    Ответ написан
    9 комментариев
  • Как кто пробился на фриланс-биржах?

    Тяжелый, каждодневный труд. Борьба за каждый проект и заказчика.
    Придумывать различные бонусы.
    Зарабатывать трудом отзывы, повышать свою квалификацию.
    Делать красивое и большое портфолио.
    Секретов нет, есть труд и пахота каждодневная.

    P.S.
    30 ставок делается спокойно за один месяц.
    30 отзывов чуть больше.

    Фриланс не для всех.
    Ответ написан
    Комментировать
  • Как кто пробился на фриланс-биржах?

    kumaxim
    @kumaxim
    Web-программист
    Лично я вижу проблему самой большой рыбы в маленьком пруду.
    Я думаю, что до этого ты работал в офисе, возможно, джуном. По какой-то причине ты ушел из команды и ты решил зайти на фриланс, например, на upwork и споткнулся.

    Что ж, поздравляю тебя с выходом в океан. Здесь все абсолютно по другому. Теперь ты не наемный сотрудник, а предприниматель. Сейчас тебе необходимо овладеть навыком создания ценностей.

    Ценность - это некий товар или услуга, которая помогает другому человеку решать его задачу. Ты написал, что

    Специализируюсь на верстке адаптивных сайтов - bootstrap, flexbox, контент-менеджменте.


    Однако, это не ценность, а твоё умение, которое ты хочешь монетизировать. Ценностью для твоего клиента будет целевой покупатель, которого он закроет через свой сайт. Сайт - это один из элементов его воронки продаж. Он - это один из источников его покупателей. Следовательно, когда ты говоришь техническим языком, ты цепляешь только тех.специалистов на бирже и отсекаешь всех остальных людей, которые в этом не разбираются.

    ОК, давай сменим твой оффер, с "Специализируюсь на верстке адаптивных сайтов - bootstrap, flexbox, контент-менеджменте." на "Создание продающих веб-сайтов, адаптированных под ПК, планшеты и смартфоны".

    Теперь, делаешь свой сайт, который будет адаптирован под ПК, планшеты и смартфоны, а также не будет вырвиглазным. На сайте должно быть описание того, как ты работаешь, т.е. рисуешь ты макет, берешь ли ты готовый шаблон, кто покупает фотки со стоков и т.д.

    Затем, начинаешь откликаться на проекты. В первом этапе твоя задача взять 10 работ, причем все равно с каким прайсом, пусть хоть $10. Сейчас, ты нарабатываешь фидбек от других пользователей. На любой бирже есть два типа людей: те, кому надо подешевле и те, кому надо. Сначала, ты работаешь на 1-ю категорию. На 2-ю ты переключишься попозже.

    Закрыв 10 проектов у тебя появляется опыт и понимание того, какие вообще люди обитают на Upwork и каковы их потребности. Ты поймешь, сколько вообще одна работа у тебя занимает времени, какие могут быть задержки во время исполнения, что вообще надо клиентам и т.п. У тебя появится понимание общей картины происходящих событий. После 1-го этапа люди увидят, что ты не просто можешь языком молоть, но и действительно умеешь делать то, о чем заявляешь.

    Далее ты либо работаешь с оффером(увеличивать цену, сделать какие-то доп.ценности) либо меняешь нишу и повторяешь сначала.
    Ответ написан
    5 комментариев
  • Что быстрее массив или объект?

    saboteur_kiev
    @saboteur_kiev
    software engineer
    Почему вы считаете, что обращение по ключу - не поиск?

    Ключ это прямой адрес в памяти?
    Нет, а значит наверное надо выполнить поиск по всем объектам, чтобы найти нужный по ключу?
    Нужно смотреть реализацию геттера, чтобы понять насколько там все сложно.
    Ответ написан
    1 комментарий
  • Стоит ли переезжать с Wordpress на статичные сайты (Gatsby, Jekyll, Hugo) и сколько это будет стоить?

    OtshelnikFm
    @OtshelnikFm Куратор тега WordPress
    Обо мне расскажет yawncato.com
    Сайт на вордпресс с мембершипом просто летает. Зачем съезжать на статику - причин не вижу.

    не место красит человека - можно перефразировать - дело не в движках...
    Ответ написан
    Комментировать
  • Какова ситуация с фриланс биржами?

    1. Да, стало хуже с 2014 года.
    2. Найти хорошего заказчика всё также реально. Как и всего хорошего - этого мало и чтобы найти, необходимо приложить качественные и количественные усилия.
    3. Чем больше усилий, тем больше шанс найти заказчика.
    4. Площадок для рекламы много, необходимо изучать, тестировать, распространять себя, придумывать новые стратегии продвижения.
    Ответ написан
    Комментировать
  • Перерыв на Upwork?

    @Stalinko Куратор тега Фриланс
    PHP'шник и фрилансер до мозга костей
    Новые правила они ведь не про паузы в работе, а про то, что чем больше заработаешь, тем больше веса будет иметь отзыв заказчика.

    С паузами на Upwork никаких проблем. Никто не мешает иметь кучу незакрытых контрактов без активности (я годами не закрываю контракты). Никто не запрещает делать перерыв в работе. Только рекомендую в настройках профиля выставить "Availability: Not available".
    Ответ написан
  • Почему PHP теряет популярность?

    anton_reut
    @anton_reut
    Начинающий веб-разработчик
    Никогда не ведитесь на уговоры разрабатывать какой то веб проект на каком то экзотичном языке, например Питоне или Яве, в результате вы получите костыльный долгострой и дефицит программистов которые будут готовы над ним работать.
    Это как в моде - есть всякое эпатажное дерьмо для показов на подиуме, а есть повседневные джинсы с рубашкой, все любят обсуждать эпатаж но носят джинсы.
    Ответ написан
    26 комментариев
  • Почему PHP теряет популярность?

    AleksandrB
    @AleksandrB
    Совсем недавно вывел "Hello world"
    PHP не мода, php - классика, а классика никогда не умирает. Если умрет php, то умрут все остальные языки backend разработки потому что появится что-то такое, что сможет в разы превзойти пхп в простоте, скорости и удобстве, на данный момент что джава, что питон, что руби +- одинаковые, каждый подходит для своих целей. Тот же питон выбирают из-за простоты интеграции нейронных сетей, но если говорить не о узких, а о главных параметрах (функционал, скорость и тд) все популярные бэк языки более или менее одинаковые смотрите те же сухие графики.
    А о уменьшении вакансий - глупость несусветная. трын тут приведена статистика за 2018 год и обоих графиках по вакансиям лидирует в сравнении с java/python PHP, при том на первых двух пишут как бэкэнд, так и миллион других штук. А на втором графике и вовсе пхп опережает js (единственный язык в самой популярной сфере разработки).

    А вот если речь идет о реально крупных компаниях (amazon, google...) там как раз предпочитают python из-за выше упомянутой простоты интеграции нейросетей, а java из-за стабильной поддержки сверх высоких нагрузок.

    Меньше слушайте диванных экспертов, пхп предрекают смерть с 00-х годов, что то он слишком долго дергается для мертвеца.
    Ответ написан
    1 комментарий
  • В какой фриланс-бирже можно начать работать?

    Zoominger
    @Zoominger
    System Integrator
    так заказчик все-равно выбирает самого первого исполнителя, у которого 1000 отзывов и работ)

    Лол, а как вы хотели?
    Добро пожаловать на швабодный фриланс, где не работаешь на дядю (где вообще не работаешь).
    Он немного не такой, как в статеечках на Хаброчке, правда?

    По теме: сидите на фрилансе, делайте работы бесплатно, набивайте портфолио, чтобы тоже было 1000 отзывов и вперёд, рубить миллионы.
    Ответ написан
    3 комментария
  • Какие плагины вы считаете стандартными для работы в WordPress?

    tuxfighter
    @tuxfighter
    троль
    Нет и не может быть ни каких "стандартных" плагинов.
    Все зависит от назначения сайта и ваших сугубо личных предпочтений
    Ответ написан
    2 комментария
  • Как не одичать фрилансеру?

    @Programmir
    А я считаю, что дома продуктивнее работать. Ты не тратишь часы времени на поездку, что уже огромный плюс. А дорога ещё изматывает. Я интроверт, мне с людьми не комфортно, а вот дома я чувствую себя хорошо)
    Ответ написан
    Комментировать
  • Как не одичать фрилансеру?

    alex-1917
    @alex-1917
    Если ответ помог, отметь решением
    как научится работать самостоятельно?

    пяток лет хотя бы пофрилансь, навыки сами придут, а то прям сразу после школьной скамьи собрался горы сворачивать...
    Ответ написан
    Комментировать