Задать вопрос
  • Как работает 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 комментария
  • Первое предложение о работе, как поступить?

    Steel_Balls
    @Steel_Balls
    Считай, что тебе сильно повезло. Джуна да ещё и на такой бэкграунд...
    Будешь дураком, если откажешься
    Ответ написан
    Комментировать
  • Первое предложение о работе, как поступить?

    Судя по обозначенным минусам - вы уже для себя всё решили.

    Я бы посоветовал, тк это первый опыт, всётаки сходить на испытательный, а если все беспокойства оправдаются - со спокойной душой уйти


    Зарплата - 500 долларов до испыта, 700 - после.

    Есть неиллюзорный шанс, что:
    1. К долларам это ни разу не привязано
    2. После испытательного так и останется 500.


    Дело в том, что позвали меня на позицию Full-stack(junior). Если бы это был фулстек веб(нода+реакт), допустим, скорее всего я бы согласился.

    Но тут надо разбираться с любыми технологиями, которые нужны заказчику(компания аутсорс). Мне сразу сказали, что надо будет и с мобилками работать и уметь деплоить и с кубернетисом работать.


    Всему можно научиться. Уточняй какой стек и думай, хочешь ли ты в этом развиваться.


    Так же из-за специфики работы, пм будет общаться с заказчиком, но будут очень частые случаи, когда надо будет созваниваться с заказчикам, уточнять какие-то моменты + презентовать продукт по результатам работы.

    Это норма для небольших компаний.


    3.Знакомые опытные ребята говорят, что фулстек джунов не существет и это вообще треш.

    Фулстек сеньоров тоже)
    Если хочешь жёстко по хардам прокачиваться, то надо более узко специализироваться.
    Ответ написан
    Комментировать
  • Первое предложение о работе, как поступить?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Джуны и в лучшие времена были не нужны, а теперь тем более. Поэтому хвататься надо за любую возможность, а потом сжав зубы получать свой первый год непрерывного опыта, с которым будет проще потом устраиваться.
    Ответ написан
    1 комментарий
  • Как правильно просить повышения зарплаты?

    @WaterSmith
    Android-разработчик. Java, Kotlin
    Вообще, вполне можно прямо вот так всё и рассказать начальству, как вы здесь написали.
    1. На настоящий момент я закрываю почти все таски на .Net
    2. Приставленный к моему проекту PM уже почти не участвует в моём проекте, я справляюсь сам.
    3. С момента трудоустройства вопрос о повышении зарплаты не поднимался, кажется пришло время, обычно зарплата пересматривается два раза в год.

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

    Нет желания блефовать увольнением и жирным оффером из другой компании, так как текущая меня более чем устраивает, да и на данный момент опасно угрожать уходом начальству, так как it пузырь уже сдулся

    Ну так а вы не блефуйте, а действительно получите оффер и говорите по существу. Разумеется уважающий себя разработчик не будет махать выдуманным оффером - он реально его получит и будет открыто говорить с текущим работодателем. При этом разумно скинуть какой-то процент от зарплаты в оффере, ну мол "я готов получать тут чуть меньше, т.к. я тоже не хочу менять сейчас работу". Вот и вся история. Либо признайтесь себе, что у вас и так всё неплохо и вам платят подходящие деньги. Перейдите от теории к действию.
    Ответ написан
    Комментировать
  • Как обновить сайт?

    GavriKos
    @GavriKos
    но наш сайт не поддерживает его

    сделать так, чтобы поддерживал.
    Ответ написан
    Комментировать
  • Как редактировать отдельные страницы в многостраничном сайте?

    Adamos
    @Adamos
    В реальных проектах человек, не разбирающийся в сайтостроении, использует CMS.
    WordPress, например, весьма популярен, и материалов насчет "как" по нему достаточно.
    Ответ написан
    Комментировать
  • Объясните мне index.php в Symfony?

    @tukreb
    А погуглить вообще никак? Ответы уже есть в интернете
    https://stackoverflow.com/questions/75511390/the-e...
    Ответ написан
    1 комментарий
  • Как работать с переводом типов в PHP?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега PHP
    Я для этих целей использую расширение Decimal:
    (new Decimal\Decimal('153.17'))->mul(100)->toInt(); // 15317


    Но можно использовать и функцию bcmul:
    (int)bcmul('153.17', '100'); // 15317
    Ответ написан
    1 комментарий
  • Как лучше хранить константы в классе?

    REZ1DENT3
    @REZ1DENT3
    web-developer
    Первый вариант. Во втором случае большая вероятность допустить ошибку в имени ключа без стат.анализа (psalm,phpstan).
    Ответ написан
    Комментировать
  • Как вызвать код php на всех страницах?

    Из соседеней ветки. Автор - @PavelMerk
    Вы можете использовать директиву auto_prepend_file в файле php.ini, чтобы указать файл PHP, который будет автоматически добавлен в начало каждого запрашиваемого файла. Это позволит вам добавить один и тот же файл s.php на каждую страницу вашего сайта.
    https://stackoverflow.com/questions/5521817/prepen...
    Ответ написан
    4 комментария
  • Стоит ли использовать phpdoc для описания методов, если я использую тайпхинт и указываю возвращаемые значения?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    IMHO, там где понятно по тайпхинтам, смысла в phpdoc нету. А вот там где непонятно
    /**
     * @return array{uid: string, name: string, isAdmin: bool}
     * @throws AuthenticationException on authentication error
     */
    private static function authenticate(string $login, string $password): array
    {
    }
    Ответ написан
    Комментировать
  • Можно ли без особых знаний php доработать phpgeo под работу с запросами?

    "Если долго мучиться, что-нибудь получится"
    А, если долго мучиться не хотите, то вам сюда https://freelance.habr.com/
    Ответ написан
    Комментировать
  • PHP как получить порядковый номер дня?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    date_default_timezone_set('Europe/Moscow');
    $start = new DateTimeImmutable('10.11.2022');
    $target = new DateTimeImmutable('05.04.2023');
    $interval = $target->diff($start, true);
    print $interval->days + 1;
    // 147
    Ответ написан
    Комментировать
  • Как в PHP пройтись по диапазону дат?

    rozhnev
    @rozhnev Куратор тега PHP
    Fullstack programmer, DBA, медленно, дорого
    <?php
    $from = DateTime::createFromFormat("m.Y", "1.2023");
    $to = DateTimeImmutable::createFromFormat("m.Y", "12.2024");
    $interval = DateInterval::createFromDateString('1 month');
    
    while ($from < $to) {
        echo $from->format('m.Y') . PHP_EOL;
        $from = $from->add($interval);
    }
    echo $to->format('m.Y') . PHP_EOL;


    https://phpize.online/sql/mysql57/undefined/php/ph...
    Ответ написан
    3 комментария
  • Есть гитлаб и какой то настроенный CI/CD, я правильно понимаю что всю разработку нужно вести на стороннем портале?

    webinar
    @webinar Куратор тега PHP
    Учим yii: https://youtu.be/-WRMlGHLgRg
    хрен пойми что вы называете "сторонний портал". Но обычно вы ведете разработку локально в какойто ветке, потом делаете пуш на gitlab/github/bitbucket там делаете например merge (никто не знает что там настроено, но чаще делают так ) и это тригерит CI/CD, котории заливает на сервер измемения и занимается другой магией (миграции, смена прав и тд)
    Ответ написан
    5 комментариев
  • Как удалить фон в фото есть такой возможность на php?

    @humoured
    Вы всё на свете найдёте в коробке с карандашами
    Если коротко, то для такого сложного фона эту задачу вызовом одной функции не решить.
    Можно поискать подходящее платное API и пользоваться готовыми реализациями. Например — https://www.remove.bg/

    Если же решение вопроса нужно собственным кодом, то начните отсюда: https://github.com/topics/background-removal — подобная задача решается через нейронки и не в рамках PHP.
    Ответ написан
    Комментировать
  • Присвоение задом наперёд в PHP?

    Это сокращённый вариант конструкции list(), которая присваивает элементы массива расположенного справа от знака равенства, среди переменных в кавычках.
    Ответ написан
    Комментировать
  • Curl возвращает 204 No Content?

    maxya-zp
    @maxya-zp Автор вопроса
    Потомственный лесоруб
    Решилось всё добавлением хедера user-agent
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.127 Safari/537.36");


    Спасибо Виталий Артемьев

    Сделал запрос на webhook.site из консоли и php и увидел что консоль отдаёт заголовок user-agent curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.87.0 OpenSSL/1.0.1e-fips zlib/1.2.3, а php нет.
    Ответ написан
    Комментировать