Задать вопрос
  • Какую уязвимость пытаются эксплуотировать боты?

    rotor
    @rotor Автор вопроса
    Ответ нашел неожиданно. Может быть кому-то пригодится, поэтому напишу его здесь.
    У меня на сайте есть форма Ajax загрузки фотографий — немного переделанный github.com/valums/file-uploader/. Устанавливал я его, когда он был еще в версии 0.x.
    Пишет мне мне посетитель сайта — у него не загружаются фотографии через эту форму. Выясняю, браузер Опера. Проверил — у меня все загружается. Прошу прислать фотографии. Прислал, действительно не загружается.
    Полез в логи, смотрю а там такое:
    *.*.*.* - - [28/Jan/2013:23:06:55 +0400] "яШяа\x00\x10JFIF\x00\x01\x01\x00\x00\x01\x00\x01\x00\x00яю\x00;CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), quality = 75" 400 0 "-" "-"
    

    *.*.*.* — мой IP адрес.
    Реализация отправки файла через XMLHttpRequest была реализована следующим образом:
    xhr.open("POST", queryString, true);
    xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
    xhr.setRequestHeader("X-File-Name", encodeURIComponent(name));
    xhr.setRequestHeader("Content-Type", "application/octet-stream");
    xhr.send(file);

    Здесь file — объект типа File

    До конца не разобрался, но похоже на определенных файлах Opera рвет тело запроса. И сервер воспринимает один запрос от нее как два невалидных запроса в одно открытое соединение.
    Переделал блок отправки фала. Сделал так:
    xhr.open("POST", queryString, true);
    xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
    if (typeof FormData != 'undefined') {
        var formData = new FormData();
        formData.append('imgfile', file);
        file = formData;
    } else {
        xhr.setRequestHeader("Content-Type", "application/octet-stream");
        xhr.setRequestHeader("X-File-Name", encodeURIComponent(name));
        if(typeof file.type != 'undefined' && file.type.length) {
            xhr.setRequestHeader("X-Mime-Type", file.type);
        }
        xhr.setRequestHeader("Cache-Control", "no-cache");
    }
    xhr.send(file);

    Все заработало.
    PS valums/file-uploader дорос уже до версии 3.2 (и даже переименовался), но как пишет сам разработчик, он отказался от поддержки Оперы. Так что, возможно, эта проблема актуальна и в текущей версии.
    Ответ написан
    Комментировать
  • Есть ли какое-то свойство в telegram bot api, которое отвечает за информацию о том, кто прочитал сообщения в чате?

    BasiC2k
    @BasiC2k
    .NET developer (open to job offers)
    Поиск в документации по ключевому слову read показывает, что разработчики не реализовали отслеживание факта прочтения сообщений в телеграмм ботах.
    Ответ написан
    Комментировать
  • Как получить путь до рабочего стола пользователя Ubuntu?

    xotkot
    @xotkot
    хорошо есть и хорошо весьма
    for user in /home/* #поиск домашнего каталога

    а с чего вы взяли что домашний каталог пользователя обязательно должен находится в /home ?
    $ man useradd
    ...
    -b, --base-dir BASE_DIR
    The default base directory for the system if -d HOME_DIR is not specified. BASE_DIR is concatenated with the account name to define the home directory. If the -m option is not used, BASE_DIR must exist.
    
    If this option is not specified, useradd will use the base directory specified by the HOME variable in /etc/default/useradd, or /home by default.


    то есть, при сотворении пользователя его домашний каталог находится в домашнем БАЗОВОМ каталоге для пользователей который указывается либо через переменную --base-dir либо берётся из /etc/default/useradd (где он по умолчанию /home)

    Как получить путь до рабочего стола пользователя Ubuntu?

    если нужен путь до рабочего стола текущего пользователя то проще некуда:
    systemd-path user-desktop
    если для другого(не тока текущего) пользователя то можно так:
    su - YOUR_USER -c "systemd-path user-desktop"
    или лучше так:
    runuser -l YOUR_USER -c "systemd-path user-desktop"


    если нужно узнать имена всех несистемных пользователей, то
    $ man useradd
    ...
    UID_MAX (number), UID_MIN (number)
    Range of user IDs used for the creation of regular users by useradd or newusers.
    
    The default value for UID_MIN (resp. UID_MAX) is 1000 (resp. 60000).

    но для верности можно глянуть в /etc/login.defs и оттуда узнать UID_MIN и UID_MAX
    eval $(awk '/^UID_/{print $1"="$2}' /etc/login.defs)

    ну а затем отфильтровать файл /etc/passwd по этим параметрам
    awk -v MIN=$UID_MIN -v MAX=$UID_MAX -F: '$3>MIN && $3<MAX {print $1}' /etc/passwd

    в итоге получим список несистемных пользователей на данной системе

    Есть sh скрипт который должен создать 2 desktop файла на рабочем столе и разрешить их выполнение, попробовал этот код:

    если нужно для текущего пользователя то проще простого:
    DESKTOP=$(systemd-path user-desktop)
    cp sources/update.desktop $DESKTOP && chmod ugo+rwx $DESKTOP/update.desktop
    cp sources/shutdown.desktop $DESKTOP && chmod ugo+rwx $DESKTOP/shutdown.desktop

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

    ValdikSS
    @ValdikSS
    По крайней мере, в некоторых подобных роутерах внедрены и настроены умные алгоритмы приоритизации трафика, такие как cake, которые потребляют приличное количество процессорных мощностей, зато позволяют максимально честно разделить полосу пропускания между клиентами, причём таким образом, чтобы загрузка канала не увеличивала задержки.
    Проще говоря, такие маршрутизаторы позволят вам комфортно играть в игры или общаться через VoIP, одновременно с этим качая торренты на полную.
    Ответ написан
    Комментировать
  • Почему не работает проброс порта с хоста на виртуалку?

    @q2digger
    никого не трогаю, починяю примус
    curl http://localhost/3000
    серьезно не видите?
    двоеточие между localhost и портом потерялось
    Ответ написан
    1 комментарий
  • Можно ли в Grafana собирать статистику по запросам NGINX?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Мне кажется надо собирать информацию там где она возникает. Если ошибки сыплет приложение то и оно должно генерить лог файл типа http-statuses.log:
    200
    403
    500

    и дальше графана его нормально проглотит и нарисует вам pie-chart или что там еще надо.

    А бедный nginx тут вообще не при делах. И не его задача генерить 500-тки. Это ведь ошибка аппликейшена вобщем-то.
    Ответ написан
    Комментировать
  • Использование staticmethod в Python это плохая практика?

    iggor-markin
    @iggor-markin
    Python Developer
    Вы не задаёте вопросов в этой заметке, поэтому просто прокомментирую. Зло — это когда программист делает какие-то вещи необдуманно. От балды. У вас же есть задача и вы решаете её доступным, понятным и удобным способом. Главная мысль уже описана вами же:
    существуют ситуации, когда в бизнес-логике возникает необходимость
    Ответ написан
    Комментировать
  • Bash-скрипт: как заменить данную строку в файле на переменную?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    В данном конкретном случае намного более адекватным было бы использовать include в nginx.conf отдельного конфига, который генерировать скриптом.
    Ответ написан
    Комментировать
  • Как установить пароль на папку в флеш?

    Никак. Только если засунуть всё в zip архив и поставить пароль на архив, но не знаю, сможет ли телевизор с этим работать
    Ответ написан
    Комментировать
  • Отслеживание действий подростка в соцсетях?

    @ewgenc
    Вы не сможете никак наблюдать за его кругом общения или контролировать его. Банально берётся телефон у одноклассника, и делается с него что нужно, вместо своего. Или заводятся аккаунты фейки с «правильными» друзьями для родителей. И это самое простое, что пришло на первый взгляд.
    Ответ написан
    Комментировать
  • Как предпочтительнее писать блок try except?

    Dr_Elvis
    @Dr_Elvis Куратор тега Python
    В гугле забанен
    Если у тебя должна быть одна и та же реакция на разные ошибки, другая реакция на другие ошибки, то второй вариант. Если на каждый тип ошибок своя реакция - то первый. Логично же и красиво.
    Ответ написан
    Комментировать
  • Как предпочтительнее писать блок try except?

    seven5674
    @seven5674
    Старый я уже что бы что-то в себе менять
    try:
        ...
    except JWTError:
        raise exceptions.bad_credentials
    except NoResultFound:
        raise exceptions.bad_credentials


    но с учетом того что у тебя raise одно и тоже то
    try:
        ...
    except (JWTError, NoResultFound):
        raise exceptions.bad_credentials
    Ответ написан
    Комментировать
  • Законно ли писать программу из процедур без in/out параметров, которые оперируют глобальными переменными?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Не стреляйте в пианиста - он играет как умеет.

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

    Как я понимаю, программа эта выполняется локально и монопольно, вряд ли многопоточная, и даже допускаю, что не разрешающая одновременного запуска нескольких инстансов (хотя вот это уже совсем предположение). А потому не вижу никаких противнопоказаний к нормальному рефакторингу и получению в конечном итоге приложения, сохранившего весь функционал, но написанного "по науке".

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

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

    Такие программы сплошь и рядом начинаются как маленькие приблуды, создаваемые одним работником для себя, для облегчения своей работы и снятия с себя тупой рутины. И работодатель тут вообще никаким боком - он не поручал и не заказывал, оно само родилось. И тут уж как работник смог, так и сделал. И то, что программа не просто работает, но и полезна настолько, что принято решение её развивать и это развитие оплачивать - так это работнику жирный плюс.
    Ответ написан
    2 комментария
  • Реален ли хостинг на процессорах с частотой 5ггц?

    Melkij
    @Melkij
    PostgreSQL DBA
    Уже очень давно больше не существует понятия "процессор работает на постоянной частоте". Это величина динамическая по усмотрению самого процессора. Максимум того что осталось доступным - можно попросить более или менее агрессивную политику энергосбережения. А частотой всё равно будет управлять сам процессор.

    CPU с базовой частотой в 5ггц банально не представлено серийных, а Turbo Boost или аналоги - у них нет постоянной частоты. CPU загружен? CPU сбрасывает частоту чтобы уложиться в заданное тепловыделение или чтобы избежать перегрева. CPU не загружен? Понижаем частоту до минимума вплоть до обесточивания части ядер. CPU загружен умеренно - ок, повысим частоту сверх насколько захочется самому CPU. CPU загружен короткими всплесками (то есть типичная нагрузка от веба, что бекенда, что на стороне баз данных) - да ну нафиг частоту повышать, думает процессор. И не повышает.
    Ответ написан
    1 комментарий
  • Как роботам показывать оригинал страницы, а пользователей отправлять редиректом на другой адрес?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Вы хотели сказать "чтобы весь сайт гарантированно вылетел из поиска"?
    Да, это надёжный способ
    Ответ написан
    Комментировать
  • Какую модель роутера Keenetic установить в сеть на 200 хостов?

    @AVKor
    Никакую, наверно. Это оборудование для домашнего использования.
    Ответ написан
    Комментировать
  • Гибрид Arch & Debian?

    Можно поставить систему используя debootstrap и получить реально минимальное количество нужных паектов.
    По аналогии с pacstrap в арче.
    Ответ написан
    Комментировать
  • Как оптимизировать 20 одинаковых служб с разным конфигов в 1 универсальную?

    paran0id
    @paran0id Куратор тега Linux
    Умный, но ленивый
    systemctl start unknown_software@config1

    см. template
    Ответ написан
    Комментировать
  • Как собрать сервер на устаревшем ПО?

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    Виртуализовать машину и пусть пашет себе до изнеможения.

    Как виртуализовать? Тут придется немного потрахаться. (Мне не так давно пришлось сделать примерно то же самое, только версия FreeBSD была еще более старой - установлена (мной же) в 2004 году!)
    - Снять винт и воткнуть в машину, где есть место равное двойному обьему винта
    - Сделать тупой посекторый образ винта (dd в линухе, WinDD в винде)
    - Сконвертить полученный образ в образ, годный для гипера - vdi, vmdk, vhd, смотря какой гипер будет
    - Создать машину, указать в качестве винта полученный образ, с железом не фантазировать, ставить то, что точно есть в ядре (во FreeBSD ядро монолитное, практика подгрузки модулей не особо применяется, если дров нет в ядре - скорее всего их нет вообще)
    - Забутится и проверить, что все работает/не работает. Если вдруг понадобится какая-то программа - придется качать вручную ту самую версию, которую хочет порт, класть в /usr/ports/distfiles и собирать.

    Если чувствуете уверенность в своих силах - можно не откапывать стюардессу - это замечено совершенно верно (увы, FreeBSD все больше движется ... в никуда) - а поднять линух, тот, который знаете и поставить там нужные версии софта, а сайт просто тупо перенести.
    Ответ написан
    Комментировать
  • Какой дефолтный пароль от ubuntu 20.04?

    @pfg21
    ex-турист
    как и обычно, посмотреть документацию яндекса. первый же ответ на поиск "виртуальная машина яндекс пароль"
    https://cloud.yandex.ru/docs/compute/operations/im...
    В публичных образах Linux, предоставляемых Yandex.Cloud, возможность подключения по протоколу SSH с использованием логина и пароля по умолчанию отключена.


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