• Почему рамка не надевается дальше углов?

    Ankhena
    @Ankhena Куратор тега CSS
    Нежно люблю верстку
    Почему рамка не надевается дальше углов?

    Потому что 46 это очень много для картинки 50х50. Всяко меньше половины должно быть.
    Почитайте что делает border-image-slice.
    Ответ написан
    Комментировать
  • Как безопасно скачивать и открывать файлы (например zip,txt,jpg) из интернета?

    @tifco
    Надо стараться файлы брать с проверенных источников, а не абы откуда.

    Вирус открывать не надо. Зачем? Удалить и дело с концом. Т. к. "вылечить" исполняемый файл не всегда возможно. Он может быть просто поломан в процессе: антивирус не те байты поменяет и привет.

    В виртуальной машине можно, к примеру, поизучать действие вредоноса. Любопытства ради. И, обычно, без ущерба для основной машины. Если машины, конечно, не объединены в локальную сеть (хост система <-> виртуальная система) и мы не запускаем, к примеру, некоего сетевого червя, что распространяется, как раз-таки, по сети. Используя, допустим, какие-то уязвимости, размещенных в ней (локалке), хостов. Как видно, опасность сего мероприятия зависит от функциональности, продвинутости зловреда. Так что насчет 100% абсолютности - врядли, не всегда и не со всеми. Ну а в целом, если не фанатеть этим, то интересного там не особо много. Потестил раз, два и надоест. Возникнет вопрос: нафиг оно вообще?
    Тут же жизнь со всеми ее приключениями. Кого-то не взяли айтишником, а он - талантище. Так вот и мстит обидчивый миру за несправедливость. Как умеет. Или изначально пошел по пути криминала. Это уже о мотивах и психологии данных "писателей".

    Исполняемые файлы (exe) содержат в себе исполняемый программный код. Все остальные (если грубо разделить) форматы не содержат его.
    Пример. Раньше, как-то была статья об уязвимости встроенного просмотрщика фотографий Windows. Дескать, открытие, специально сформированного, графического файла могло вызвать ошибку программы просмотра и, вроде как, допустить несанкционированный доступ к системе из вне. Вообще, софт пишут люди и в нем хватает ошибок. Сколько, в процентном отношении, таких уязвимостей и насколько реально они опасны (что в итоге может натворить программа после получения доступа (ее опасная начинка) или злоумышленник (по сети)) - еще вопрос. Тут, всеже, эксешники (exe) вне конкуренции. Их-то и надо опасаться, при прочих равных. Хотя, "вирусы" тоже эволюционировали. Понапридумано масса иных лазеек. Сейчас классические вирусы не столь актуальны, нежели трояны.
    Временами, эти истории вообще походят на байки. Про зараженные архивы, картинки и уже тем более текстовики. Если подумать логически: чего может быть опасного в простейшем текстовом файле? Ну завершит он с ошибкой Блокнот, если, к примеру, файл будет очень большой (пару мегабайт, да и на слабом ПК). Так это не вирус, а ограничения программы. Памяти не хватило.

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

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

    Если exe-файл не запускать, не выбирать команду по файлу "открыть", то он безвреден. Т. к., в данном случае, это просто набор байтов (как и все остальное компьютерное содержимое), а не некая выполняющаяся программа (код).
    Ответ написан
    2 комментария
  • Возможна ли sql инъекция?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Нет.
    Ответ написан
    1 комментарий
  • Пул соединений с БД и транзакции: с чем это кушают?

    @calculator212
    фантомное, грязное чтение и подобное

    Для решения я открывал параллельные соединения с БД

    Это не связанные друг с другом вещи. То что вы описали возникает при транзакциях, я знаю два способа пофиксить это. Первый - использовать FOR UPDATE/LOCK TABLE, в запросах, который будет ждать пока выполняется другая транзакция. Второй использовать serializable и политику ретраев.
    Использовал уровень изоляции serializable
    Он защищает от ошибок с транзакциями, и по сути просто отменяет их в случае ошибок и показывает что была попытка неправильно использовать транзакцию, исправить ошибки в транзакциях он не может.
    На форумах пишут "нужно грамотно управлять пулами соединений", но что это значит? Где про это прочитать?
    Лучше там спросить, что они имеют ввиду.
    И я убрал параллельные соединения и сделал транзакции через основное соединение с БД (то, которое при запуске открывается и больше не закрывается), и это заработало, но теперь так как соединение одно, каждый юзер вынужден ждать завершения транзакций всех остальных юзеров.
    Как бы пользователь в любом случае должен ждать пока другие транзакции завершатся, пул соединений полезен тем, что другие запросы не связанные с этой таблицей могу параллельно выполняться.
    Если вы используете транзакции, по хорошему это нужно нормально тестировать, в тесте быстро запускать 100-150 транзакций, которы едолжны выполниться без ошибок и при этом вы должны получить желаемый результат в БД после их выполнения.
    Ответ написан
    1 комментарий
  • Возможна ли sql инъекция?

    @rPman
    почти наверняка будут глюки при использовании utf8 или любой другой мультибайтовой кодировки, и формировании строки с неправильной комбинацией символов, так как mysql_escape_string не будет их считать опасными (она вообще только для однобайтовых кодировок).

    Чтобы воспользоваться уязвимостью нужно серьезно зарыться в исходники php или mysql и понимать как обрабатываются ими мультибайтовые кодировки.

    Если ты вынужден поддерживать устаревший код, поставь в самом начале кода проверки на входящие параметры, по значению. Почти наверняка можно собрать под используемый язык пользователей простую функцию валидации, а лучше сразу конвертировать в мультибайтовую кодировку и в этот момент проводить все необходимые проверки.
    Ответ написан
    9 комментариев
  • Возможна ли sql инъекция?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    Возможна.

    Почему не стоит использовать mysql_escape_string
    https://www.php.net/mysql_escape_string
    Warning
    This function was deprecated in PHP 4.3.0


    https://www.gosecure.it/blog/art/483/sec/mysql_esc...

    Не хотите SQL-инъекций используйте подготовленные выражения (prepared statements)
    https://www.php.net/manual/en/mysqli.quickstart.pr...

    а был бы с нами FanatPHP он бы ещё дал ссылку почитать https://phpfaq.ru/mysql/slashes
    Ответ написан
    1 комментарий
  • Как работают транзакции, уровни изоляции в данном случае?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    1) Что будет с запросом UPDATE, если исполнение кода ещё не дошло до этого запроса, оно получается будет ещё доступна для запросов из другого кода?

    Не понял, что имеется ввиду. Но если это про то - "будут ли видны изменения, которые сделаны до вызова этого UPDATE в транзакции", то это зависит от уровня изоляции других транзакций.
    В случае SERIALIZABLE - нет, не увидят.
    2) А если функцию sameFunc запустят много юзеров? Получается КАЖДЫЙ юзер будет ждать завершения предыдущих транзакций от всех остальных юзеров?

    Так как указана SERIALIZABLE, то да:
    - Если конфликтов не будет, т.е. никто не обновлял те же самые записи, то будут ждать
    - Если кто-то одновременно обновил одни и те же данные, то будет конфликт транзакции

    Стоит еще учесть, что если одна и та же запись обновлена одновременно разными транзакциями, то поздняя транзакция просто заблокируется и будет ждать: либо когда первая закоммит - тогда конфликт транзакции, либо первая выполнит откат и ты продолжишь выполнение
    P.S. еще есть таймаут ожидания транзакции

    3) А если все запросы в транзакции взаимодействуют только с полями конкретного юзера, то как это нужно реализовать в транзакциях? Вроде как объект транзакции один — сам node.js, который единожды подключается к БД.

    А вот тут надо разобраться. Зависит от того как ты работаешь с БД.
    Судя по названию ты используешь пул соединений (переменная pool) и каждый раз выполняешь запрос на нем. Я не знаю node.js и фреймворк для БД, который ты используешь, но что-то подсказывает, что на каждый такой .query создается отдельное подключение и выполняется запрос.
    Если да, то этот код работать не будет, т.к. ты постоянно открываешь новое соединение, начинаешь транзакцию или запрос и закрываешь соединение. В этом случае, все начавшиеся транзакции завершатся сразу, а запросы, которые должны работать в транзакции будут выполняться сразу.
    Чтобы все работало корректно - на каждом вызове этого метода открывай новое соединение и работай с ним. Тогда гонки в коде не будет. (Можно еще использовать пул соединений).

    Дополнительно я бы еще реализовал логику повторных попыток выполнения, если был обнаружен конфликт транзакций (проверяй исключение)
    Ответ написан
    6 комментариев
  • Как подождать, пока будет подключена База данных?

    Kentavr16
    @Kentavr16
    long cold winter
    можно использовать что-то вроде
    import express from "express";
    
    const app = express();
    const ip = "localhost";
    const port = 4000;
    
    app.get("/", (req, res) => {
      res.send("some response");
    });
    
    function startServer() {
      app.listen(port, ip, () => {
        console.log(`Сервер запущен на адресе ${ip} и порту ${port}`);
      });
    }
    
    async function connectToDatabase() {
      return new Promise((resolve, reject) => {
        setTimeout(() => resolve("ok"), 2000);
      });
    }
    
    connectToDatabase()
      .then(() => {
        startServer();
        console.log("Успешное подключение к базе данных.");
      })
      .catch((err) => {
        console.error("Не удалось подключиться к базе данных:", err);
      });

    где для коннекта к бд использовать промис
    export function connectToDatabase() {
        return new Promise((resolve, reject) => {
            pool.connect((err, client, release) => {
                if (err) {
                    console.error('Ошибка в запросе к БД (1)', err.stack);
                    release();
                    reject(err);
                    return;
                }
    
                client.query('SELECT NOW()', (err, result) => {
                    release();
                    if (err) {
                        console.error('Ошибка в запросе к БД (2)', err.stack);
                        reject(err);
                        return;
                    }
    
                    console.log('\x1b[34m%s\x1b[0m', `PostgreSQL is running (${result.rows[0].now})`);
                    resolve(pool);
                });
            });
        });
    }

    Ну и пул объявить не забыть. Хз, с обычным промисом который в первом примере, работает окей, почему с подключением к бд будет иначе? Для эксперимента ставить pg неохота. Вполне возможно что я что-то проглядел, поправьте, с серверами на ноде давно не имел дела.
    Ответ написан
    Комментировать
  • Как безопасно скачивать и открывать файлы (например zip,txt,jpg) из интернета?

    Adamos
    @Adamos
    Не секрет, что любой файл в сети потенциально опасен.
    Это не так. Подавляющее большинство файлов в сети совершенно безопасны, и потенциально тоже.

    Каким образом можно без боязни открыть даже вирус?
    HEX-редактором, например, можно открывать что угодно без какой-либо боязни.

    Читал, что можно это делать в виртуальной машине например. Это абсолютный способ? Или есть другие?
    Судя по формулировке, "абсолютный способ" - это тот, у которого нет "других". Стоит перейти от шаманства к конкретным формулировкам, и в них обнаружится большая часть ответа.
    Например, в виртуалке, к которой подключены диски реальной машины или доступна локальная сеть, я бы не советовал пробовать "абсолютный способ" с трояном-шифровальщиком.

    И ещё, есть ли безопасное расширение файла? Вроде как любое расширение может быть опасным
    Расширение - это часть имени файла после последней в этом имени точки. В виндах есть традиция давать файлам определенного типа определенные расширения, но она ни разу никого ни к чему не обязывает. Например, command.com никто не мешает переименовать в lame.png и попробовать куда-нибудь отправить. Впрочем, эта отправка, скорее всего, будет сопряжена с программами, которые работают не на винде и анализируют файлы не по расширению, а по содержимому.
    Ответ написан
    Комментировать
  • Как безопасно скачивать и открывать файлы (например zip,txt,jpg) из интернета?

    @alexalexes
    По поводу расширений файлов.
    Нужно понимать, на что способен софт, которым вы открываете файлы, и может ли софт открыть какой-то файл и интерпретировать его содержимое как макрос.
    Например, zip-файл можно открыть любым архиватором, и вряд ли есть способ, чтобы что-то распаковать из этого архива архиватором и запустить на исполнение, не применив дополнительную команду.
    Другое дело, у вас есть docx, xlsx, pptx файлы, которые тоже по своей природе zip-архивы, но вы эти файлы открываете уже не архиватором, как правило, а офисным приложением. Если открывать такие файлы MS Office-ом, то вполне реально помимо работы с содержимым документа получить автоматическое выполнение VB-скриптов (офис предупредит об этом, но все же), которые могут иметь доступ к окружению ОС - это уже будет реальным вектором атаки.
    На примере jpg - та же самая история. Если это действительно JPEG, то любой графический редактор откроет содержимое. Но, например, стоит туда положить содержимое не JPEG, а например, PSD c active-скриптами, то какой-нибудь Photoshop захочет по-другому открыть содержимое, и выполнить макросы, которые возможны в PSD.
    Самое печальное, что в современные ОС, в проводники встраивают функционал предварительного чтения содержимого файла и отображения миниатюр и кратких сведений о файле (не касающегося его размера и прочих параметров файловой системы). Если эта технология предварительного просмотра будет способна запустить макрос из "правильно сформированного" файла, то это не есть хорошо.
    Ответ написан
    Комментировать
  • Как изменить название &quot;Панель Управления&quot;, которое на рабочем столе?

    AshBlade
    @AshBlade
    Просто хочу быть счастливым
    Создай на Панель управления ярлык и переименуй уже его
    Ответ написан
    Комментировать
  • Почему у введенного числа в input тип данных(typeof) -string?

    Mike_Ro
    @Mike_Ro Куратор тега JavaScript
    Python, JS, WordPress, SEO, Bots, Adversting
    Почему у введенного числа в input тип данных(typeof) -string?

    Так проще, т.к. неизвестно, что именно прилетит из input, а тут по умолчанию - string, а дальше Ваши проблемы.
    Ответ написан
    4 комментария
  • Является ли создание free-to-play игры с существующими персонажами нарушением авторского права?

    coder1cv8
    @coder1cv8
    Инди-разработчик
    Главное: выкиньте вы этот дурацкий миф из головы "нет заработка - нет нарушения авторских прав"! Нарушение - это само по себе использование авторского контента, а какие уж у вас там цели, коммерческие или еще какие - к делу отношения не имеет. Ну а в остальном, все зависит от правообладателей. Некоторые лояльно относятся к "пародийному использованию" и прочим "отсылкам", некоторые - нет. Самый вероятный вариант, вашу игру просто не заметят (поэтому и существует куча трэша с использованием популярных персонажей/произведений). Но даже если заметят, речи о штрафах не будет идти, я думаю. Максимум - бан в сторах (или где вы там игру будете распространять).
    Ответ написан
    9 комментариев
  • HTTP-трафик шифруется! Но как? И как вынюхать что там?

    drygdryg
    @drygdryg
    Python-разработчик
    Можно попробовать понять, какие данные в теле ответа находится. Сохраните его в файл, а затем проверьте такими инструментами, как file, binwalk и даже Detect-it-easy.
    Ответ написан
    Комментировать
  • HTTP-трафик шифруется! Но как? И как вынюхать что там?

    mayton2019
    @mayton2019
    Bigdata Engineer
    HTTP ответы не обязаны являться текстом. Смотри в заголовки ContentType в ответах.
    Если там к примеру стоит application/octet-stream - то это просто поток байтов. Может
    быть бинарным кодом.
    Ответ написан
    4 комментария
  • Как можно перехватывать и изменять пакеты(http,ws) в приложении?

    drygdryg
    @drygdryg
    Python-разработчик
    Установите отладочный прокси-сервер (HTTP debugging proxy) вроде Mitmproxy на компьютер и настройте пропуск трафика вашего приложения через этот прокси. В его интерфейсе можно просматривать HTTP-запросы, а также сообщения WebSocket и некоторые другие протоколы. Также можно останавливать и модифицировать запросы/ответы на лету и писать скрипты для этого.
    Ещё один инструмент, который также позволяет перехватывать и модифицировать запросы/ответы на лету: https://github.com/projectdiscovery/proxify. Он вдобавок поддерживает модификацию трафика по правилам, описанным на специальном DSL (языке).
    Настроить прокси на Android можно в параметрах Wi-Fi сети (для всех соединений в системе), либо с помощью приложения ProxyDroid (только для соединений вашего приложения, но нужен root).
    Ответ написан
    3 комментария
  • Как пропустить китайские иероглифы через регулярку?

    scoffs
    @scoffs
    Frontend | C# | Student
    Возможно это поможет
    _string.replace(/[^a-zа-яё\u4E00-\u9FFF0-9 `,:-]/gim, " ")


    \u4E00 - начальный символ диапазона китайских иероглифов в кодировке Unicode.
    \u9FFF - конечный символ диапазона китайских иероглифов в кодировке Unicode.
    Ответ написан
    5 комментариев
  • Что это за квадратики тёмные в шрифте?

    @Ente
    Unity developer
    Поменяй шейдер на Distance Field SSD
    Поменяй Sharpness на 1
    Поменяй Perspective Filter на 0
    Сделай Toggle Extra Padding off (TextMeshPro - Text (UI) component -> Extra Settings)
    Ответ написан
    2 комментария
  • Что ещё проверять для безопасности?

    vabka
    @vabka
    Токсичный шарпист
    Вот эта строка ничего не делает :)
    if(message.length > 150) message.substring(0, 150)

    Конкретно в показанном коде больше никаких уязвимостей не видно.
    Так что только общие советы - открывай OWASP и проверяй всё по порядку для своего приложения.
    Ответ написан
    4 комментария
  • Может ли быть такое, чтобы фреймворк был быстрее ванили?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега JavaScript
    Внутри фреймворка, за счёт эффекта масштаба, могут быть реализованы оптимальные алгоритмы и применены какие-то оптимизации, ухудшающие читаемость кода, но ускоряющие его, которых может не быть в том ванильном коде, который напишете вы. Но, конечно, это редкий сценарий и в общем случае код без фреймворка будет работать быстрее или так же (Svelte).
    Ответ написан
    4 комментария