Задать вопрос
  • Какой самый легковесный nix-дистрибутив?

    Самый лёгкий из deb-подобных собственно Debian.
    Ответ написан
    1 комментарий
  • Как работает 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 комментария
  • Почему тормозит PostgreSQL?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега PostgreSQL
    Седой и строгий
    Почему вы план смотрите не для того запроса, который тормозит? Из очевидного - отсутствие индекса на поле, используемое для сортировки.
    Ответ написан
    3 комментария
  • Как проверить есть ли str1 в str2?

    saboteur_kiev
    @saboteur_kiev Куратор тега bash
    software engineer
    в баш можно заюзать регулярку в [[ ]]
    if [[ "$str1" =~ .*$str2.* ]]; then
      echo "ok"
    else
      str2="$str1$str2"
    fi
    Ответ написан
    1 комментарий
  • Как сгруппировать каталоги и подсчитать их размер?

    xotkot
    @xotkot
    ответы это убийцы вопросов
    примерно так
    $ du -sb * |awk '{cmd="stat -c %z "$2" |cut -d\" \" -f1";cmd |getline z;close(cmd);print z" "$1}' |awk '{sum[$1]+=$2}END{for(i in sum)print i,sum[i]}' |sort |numfmt --to=iec --field 2 --padding=10
    2022-01-21        13M
    2022-11-02        17G
    2022-12-13       4,7G
    2023-01-15       388M
    2023-03-06       1,6G
    2023-04-01       1,6G
    2023-04-03       2,2G
    2023-04-04        13G
    2023-04-11       7,6G
    Ответ написан
    1 комментарий
  • Есть ли смысл делать анимацию без JS?

    neuotq
    @neuotq
    Прокрастинация
    Анимация = анимации рознь.

    Конкретный ответ со списком вы тут не увидите, это будет большая статья, со множественными "а вот тут", "но здесь" просто потому что многое зависит от контекста, задач, планирование.
    Главные рекомендации это не делать на js то, что отлично реализуется с помощью css. Этим к сожалению часто болеют многие фронтендеры, особенно из тех кто принципиально не любит вёрстку. Банальные примеры некоторые виды трансформаций объектов при булевых сменах какого параметра(условно навел/убрал наведения, вкл-выкл и тп).

    Но нужно иметь ввиду, что там где у вас выходит сложная логика, разные усложнённые сценарии, динамические параметры запуска и тп и тд. Без js естественно никуда.

    Поэтому просто зная возможности css, имея здравый смысл, вы будете видеть и знать где что использовать.
    К счастью css тоже в последнее время активно развивается давай нам всё больше возможностей.
    Поэтому - простая штука, что-то типа одноразовых анимации, простого повторения, туда сюда - подумать про css.
    Если к этому добавляются всякие реакции на сложные тайминги, старт-пауза перемотать остановить на промежутке и тп - js.
    Ну и безусловно разные сложные, многоходовки с завязкой друг на друга - однозначно js.

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

    SagePtr
    @SagePtr
    Еда - это святое
    Да, браузеры смогут оптимизировать анимацию средствами CSS и решать, с какой частотой её воспроизводить, в целях экономии ресурсов и батареи.

    При декларативном подходе (CSS) мы говорим браузеру, что именно сделать, а он уже сам решит, как именно сделать это оптимально для себя и для устройства, на котором он работает. При императивном подходе (JS) мы контролируем каждый шаг и не даём свободы, браузер вынужден делать то, что автор скрипта скажет, даже если ту же самую задачу он может решить лучше и оптимальнее него.
    Ответ написан
    Комментировать
  • Как реализовать запуск приложения через консольную команду?

    GavriKos
    @GavriKos
    Для первого - и в винде, и в линуксе для этого достаточно прописать путь к папке с исполняемым файлом в PATH - все терминалы (наверное все) именно там ищут "команды" (а точнее команда это и есть бинарь).
    Ответ написан
    1 комментарий
  • Запуститься ли сервер?

    yakovlev_13
    @yakovlev_13
    Шаманство, экзорцизм и некромантия.
    я профан в части серверов

    Вот тут надо задуматься об услугах профессионала. Вы как никак пол ляма хотите на это потратить.
    Ответ написан
    Комментировать
  • Как не переформатируя файл .docx заменить в документе строку при помощи bash из терминала в linux?

    karabanov
    @karabanov
    Системный администратор
    #!/bin/bash -e
    
    template="blanc.docx"
    student_list="ФИО.txt"
    output_dir="certificate"
    tmp_d="tmp_word"
    
    mkdir -p "$tmp_d" "$output_dir"
    
    unzip "$template" -d "$tmp_d"
    cp "$tmp_d/word/document.xml" .
    
    while read -r student_name; do
      echo -e "\n\033[0;32m${student_name}\033[0m"
      cp document.xml "$tmp_d/word/document.xml"
      sed -i "s/????/$student_name/g" "$tmp_d/word/document.xml"
      cd "$tmp_d"
      zip -r "../$output_dir/$student_name.docx" *
      cd ..
    done < "$student_list"
    
    rm -rf document.xml "$tmp_d"
    Ответ написан
    Комментировать
  • Почему в LIKE возвращает пустой результат?

    i229194964
    @i229194964
    Веб разработчик
    Данная проблема чаще всего возникает различия строк сравнения между PostgreSQL. Версия 15 может использовать другие настройки по умолчанию.
    В PostgreSQL сравнение строк зависит от настройки collation.
    Попробуйте изменить настройки collation для PostgreSQL 14, чтобы они соответствовали настройкам версии 15.
    return User::where("name", "LIKE", "%{$query}%")->collate('utf8mb4_general_ci')->get();
    Ответ написан
    2 комментария
  • Копирование одного диска на несколько, как ускорить?

    Melkij
    @Melkij
    DBA Team для вашего PostgreSQL?
    попробуйте для начала dd if=/dev/sda | tee /dev/sdb /dev/sdc /dev/sdd > /dev/sdc
    сходу проверить негде, но не вижу причин почему бы это не работало.

    можно так
    dd if=/dev/sda | tee >(dd of=/dev/sdb) >(dd of=/dev/sdc) >(dd of=/dev/sdd) > /dev/null

    чтобы был доступ к привычным опциям dd
    Ответ написан
    4 комментария
  • Как сделать так, чтобы при выполнении программа не закрывалась, а просила вводить значения дальше?

    saboteur_kiev
    @saboteur_kiev Куратор тега bash
    software engineer
    #!/bin/bash
    select choice in "Текущий пользователь" "Данные о каталоге" "Запущенные процессы" "Выход"
    do
      echo "$choice"
      case "$REPLY" in
        1) echo $(users);;
        2) ls;;
        3) ps;;
        4) break;;
      esac
    done
    Ответ написан
    Комментировать
  • Стоит ли переписывать старый проект на .NET6 (на голом энтузиазме)?

    VoidVolker
    @VoidVolker Куратор тега C#
    Dark side eye. А у нас печеньки! А у вас?
    Нет, оно того не стоит. Любая работа должна быть оплачена. Ибо сейчас напишешь за свой счет, а потом начальника скажет "о, отлично, молодец, можем теперь сэкономить на программистах и поддержке, у меня как раз знакомый ищет, ща его поставлю, а ты можешь быть свободен, заодно выпишу себе премию, во какой я молодец". Этот код решает задачи бизнеса. Если бизнес готов тратить на его поддержку и сопровождение деньги - то это проблемы этого бизнеса. Почему это наемный работник должен решать проблемы бизнеса за свой счет? Правильно сделать так: оформить все в виде какого-то документа с конкретными аргументами, цифрами, графиками и т.п. и выдать его начальству. Типа сейчас поддержка проекта стоит столько-то, приносит такие-то проблемы, переписать будет стоить столько-то, сопровождение нового будет столько-то, оно решает такие-то проблемы. И выдаете данный документ начальству. Можно даже в бумажном виде в нескольких экземплярах. А далее пусть у начальства голова болит.
    Ответ написан
    3 комментария
  • Как создать такой вывод в bash script?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    С чего начинать разбираться?

    man 7 inode -- обзор того, какие атрибуты есть у файлов
    man 1 mkdir -- создавать каталоги и назначать им разрешения
    man 1 touch -- создавать файлы и менять даты файлам и каталогам
    man 1 chmod -- менять разрешения файлам и каталогам
    man 1 ln -- создавать символьные ссылки
    Ответ написан
    7 комментариев
  • Как поставить пароль на архив tar/gzip?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Tar и gzip это очень старые утилиты. Им по 30-40 лет. И создавались они в те времена когда симметричное шифрование еще не было так развито.

    Но архивчик можно после упаковки зашифровать другими утилитами например openssl.
    openssl enc -in file.txt -out encypted_file.txt -e -aes256

    Я так делал когда шифровал бекапы oracle dbms.

    Если переписать чуть лучше скрипт - то можно объединить операции tar->gzip->openssl в один пайплайн
    без воздания промежуточных файлов.
    Ответ написан
    3 комментария
  • Как поставить пароль на архив tar/gzip?

    saboteur_kiev
    @saboteur_kiev Куратор тега Linux
    software engineer
    mysqldump -u $USER -p$PASS --ignore-table=myBase.log_chat --ignore-table=myBase.log_main --routines $DB > $BACKUP_DIR/mysql.sql
    + tar -czvf $ARCHIVE $BACKUP_DIR


    Странное применение targzip в данном случае. совершенно бессмысленное.
    Юзай просто zip, у него есть -e (encrypt) опция, но там слабенькая защита. уж проще openssl, как указали в другом ответе.

    Чтоже касается tar. Весь смысл тар и gzip в том, что они умеют работать с потоком, а не файлом. Поэтому то, что вы сперва сохраняете в файл, а потом отдельно еще в tar/gz - бессмысленная работа, которая ничего не дает. Вдобавок и сам тар там не нужен, у вас же один файл.
    Поэтому можно сделать так:
    mysqldump -u $USER -p$PASS --ignore-table=myBase.log_chat --ignore-table=myBase.log_main --routines $DB | gzip > $BACKUP_DIR/mysql.gz


    и потом шифровать файл чем угодно.
    Или сразу:
    mysqldump -u $USER -p$PASS --ignore-table=myBase.log_chat --ignore-table=myBase.log_main --routines $DB | gzip | openssl enc -aes-256-cbc -out encrypted $BACKUP_DIR/mysql.gz.encrypted

    Пароль или руками или перенаправить
    mysqldump -u $USER -p$PASS --ignore-table=myBase.log_chat --ignore-table=myBase.log_main --routines $DB | gzip | openssl enc -aes-256-cbc -out encrypted $BACKUP_DIR/mysql.gz.encrypted<<<"mysecretpassword"
    Ответ написан
    Комментировать
  • Как объединить виртуальный бридж Docker и QEMU?

    hint000
    @hint000
    у админа три руки
    По идее так должно работать:
    $ echo allow docker0 > /etc/qemu/bridge.conf
    Так qemu узнаёт, в какой бридж добавлять виртуальные интерфейсы.
    Ответ написан
    1 комментарий
  • Почему для скриптинга в шелле используется bash а не более современный язык программирования?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Вопрос одновременно дебильный и нормальный.
    Автор просто не может нормально словами написать, чего хочет.
    Для современного поколения, воспитанного ютубой, это нормально.
    Если бы вопрос можно было задать с помощью слов "гы-гы", "круто, чувак" и смайликов, то у него бы все получилось.
    А пока приходится использовать интеллект на принимающей стороне, чтобы понять, что он там мычит.

    А мычит он не про сам шелл, а про используемый в нем скриптовый язык.
    И ответ получается очень простой - для некоторых задач Bash scripting language тупо подходит лучше. Не говоря уже про интеграцию скриптового языка баш в командную оболочку баш, какой никогда не добиться с помощью "обёрток".

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

    Так что да - или легаси, или тупо адекватность задаче.

    Апд. В ходе этой дискуссии я сообразил одну очень важную вещь. Язык программирования по определению является вторичным по отношению к командной оболочке. Главное в баше - это все-таки возможность запускать команды и позволять им взаимодействовать друг с другом. А язык уже построен вокруг этой основной задачи. Если вы попытаетесь вкрячить этот функционал в какой-то из языков программирования общего назначения, вы испортите и оболочку, и язык.
    Ответ написан
    21 комментарий