• Как безопасно отправлять пользовательский текст в базу POST запросом?

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

    В-первых, POST запросом ничего добавить в базу нельзя.
    База вообще ничего не знает про пост запросы. POST запросом можно отправить текст только в РНР.
    А РНР уже будет добавлять в БД.

    Про HTML база данных тоже ничего не знает. Поэтому "htmlspecialchars" к базе данных не имеет никакого отношения. И делать это для добавления в БД не нужно. Это функцию надо применять при выводе данных в браузер, а не при сохранении в базу данных.

    Вот теперь, когда мы разобрались что у нас где, можно наконец ответить на твой вопрос

    Для безопасного добавления данных в БД из РНР, надо отправлять их отдельно от самого запроса. Это непреложное правило, которое надо соблюдать всегда.
    И не важно - пользовательский у тебя текст, или какой-то другой, POST у тебя запрос, или вообще никакого запроса не было - все эти вещи к работе с БД из РНР не имеют никакого отношения. Важно только то, что данные всегда отправляются в БД отдельно от запроса.
    Для этого надо
    • Заменить все переменные в запросе на специальные маркеры, которые называются плейсхолдеры или параметры, а по сути - просто знаки вопроса
    • Подготовить запрос к исполнению с помощью функции prepare(). Эта функция принимает строку запроса и возвращает экземпляр специального класса stmt, с которым в дальнейшем и производятся все манипуляции
    • Привязать переменные к запросу.
    • Выполнить подготовленный ранее запрос с помощью с помощью execute()

    В mysqli это будет так
    $sql = "INSERT INTO  table (name, text, message, date, rating) VALUES (?,?,?,?)";
    $stmt = $link->prepare($sql);
    $stmt->bind_param("sssss", $name, $text, $message, $date);
    $stmt->execute();

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

    Но по-хорошему для работы с БД в РНР лучше использовать PDO, Тем более что там колупаться с bind_param не нужно, а можно сразу отправить все данные в execute
    $sql = "INSERT INTO  table (name, text, message, date, rating) VALUES (?,?,?,?)";
    $stmt = $link->prepare($sql);
    $stmt->execute([$name, $text, $message, $date]);

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

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

    UPD: Посмотрел комменты. Если уж хотите взять чужой модуль и скрыть что-то из него, то тут не нужно использовать наследование.
    Ответ написан
    Комментировать
  • Стоит ли использовать Node.js на сервере оплаты?

    dkrylov
    @dkrylov
    Node.js - хотел бы, но останавливает то, что при неотловленном исключении, сервер падает целиком.


    1) Так сделайте так, чтобы исключение отловилось
    2) Так сделайте очередь в бд с транзакциями, и чтобы нода их постепенно оттуда обрабатывала, и записывала статус обработки.
    3) Так повесте логгирование на какое нибудь событие (транзакция не обработана, сервер перезапущен), чтобы в случае проблем, быть вовремя уведомленным

    P.S. Что PHP, что NodeJS, что Java, успешно справиться с Вашим заданием, если всё корректно задизайнить.
    Ответ написан
    Комментировать
  • Как методы вроде foreEach передают аргумент в callback функцию?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Комментировать
  • Как методы вроде foreEach передают аргумент в callback функцию?

    Stalker_RED
    @Stalker_RED
    arr.forEach(foo);

    Метод forEach не "читает аргумент из функции", а вызывает функцию foo, которую вы передали, и передает в нее аргументы в том порядке, как описано в документации forEach

    При этом, методу совершенно не важно, какие имена вы дали параметрам в функции foo. Можно им вообще имен не давать.
    Ответ написан
    Комментировать
  • Как ускорить сайт на Битрикс для pagespeed?

    но эти стили и скрипты нужны для нормальной работы сайта, часть из них часть из них стили и скрипты шаблона сайта, другие это системные JS скрипты которые загружает сам Битрикс.

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

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

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

    Для ускорения загрузки страницы pagespeed предлагает использовать атрибут link rel=preload при подключении CSS.

    Вообще-то шрифтов.

    Пробовал следовать рекомендации pagespeed и подключать CSS стили такой конструкцией

    Вы не правильно распарсили рекомендацию.
    Если вы хотите добавить предзагрузку стилей вы должны добавить метатег прелойда:
    <link rel="preload" href="/local/templates/.default/css/style.min.css">

    А не заменить им загрузку стилей.

    Eliminate render-blocking resources - здесь сервис рекомендует убрать блокирующие рендеринг страницы ресурсы, в моем случае он почему то таким ресурсом результирующий CSS файл сайта, куда Битрикс объединил CSS файл стилей шаблона сайта, CSS файлы шаблонов компонентов и системные файлы

    Что значит "почему-то"? Потому что это блокирующий ресурс. Вынесете стили страницы и хедера в отдельный файл который вставляйте инлайном в html для пользователей заходящих на сайт впервые в head, и подключайте в конце страницы два файла css - этот (да стили будут дважды загружены) и общий.
    А для пользователей заходящих повторно, подключайте только файлы, но уже в начале страницы.

    Remove unused CSS - здесь сервис указывает системные CSS и стили шаблона сайта как неиспользуемые, почему так происходит, ведь эти файлы используются в проекте?

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

    ThunderCat
    @ThunderCat Куратор тега MySQL
    {PHP, MySql, HTML, JS, CSS} developer
    1) драйвер mysql_ уже не используется. Деприкэйтед с 5.х и окончательно выпилен в 7.х, используйте mysqli_ или PDO.
    2)
    давно мучаюсь с этим кодом
    Просто не надо мучиться, надо читать документацию, в ней все есть, смотрите ORDER BY выражения.
    3) Так писать запросы не желательно, у вас (скорее всего) невалидированые строки напрямую попадают в запрос, это прямой путь к инъекции. Используйте подготовленные выражения.
    Ответ написан
    1 комментарий
  • Зачем во Vue запросы выносят в services?

    Kozack
    @Kozack Куратор тега Vue.js
    Thinking about a11y
    1. Для упрощения кода. Скажем, чтобы не писать каждый раз всю конструкцию аля
      axios.get(ENDPOINT + '/api/' + API_METHOD, {
        params: {
          id
        }
      })
      .catch
      ...

      Делается обёртка, условная функция getUser(id). В неё выносится вся логика по работе с запросом, определение маршрутов АПИ, обработка ошибки и так далее. Наружу торчит только одна функция и параметр.
    2. При работе с TS это проще типизировать. Намного легче описать типы принимаемых параметров и возвращаемый тип для нескольких функций, чем описывать универсальную конструкцию для доступа к любым методам апи.
    3. Ну и наконец: сервис можно вызывать прямо в компонентах. Вызывать методы АПи не обязательно внутри Vuex. Доже чаще это должно выполняться внутри отдельных компонентов, каждый из которых работает с одним-двумя апи, а не со всем набором.
    Ответ написан
    4 комментария
  • Внедрение js-инъекции, это как? Я правильно понял?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Нет
    Ответ написан
    Комментировать
  • Как сделать фильтр товаров на сайте?

    Stalker_RED
    @Stalker_RED
    Это называется фасетный поиск или фасетный фильтр.
    Теперь, обладая знанием о том, как такая штука называется, ты легко найдешь и туториалы и готовые реализации.
    Ответ написан
    Комментировать
  • Как делать поиск по бд mysql на php?

    @andreyzvd
    Backend Developer
    Функция mysqli_real_escape_string() должна вызываться с двумя параметрами

    PS.: ваш php стар как г..но мамонта
    Ответ написан
    Комментировать
  • Профит смены ОЗУ 4х8 на 2х16?

    @d-sem
    Вроде как в спецификации 450 пишется, что в режиме 3200 4 плашки не работают, а частота падает до 2666 или ниже. Уточнить этот момент для своей карты и посчитать профит

    Также в режиме 3200 вообще обычно работают только 2 слота памяти из 4.

    Т.е. надо смотреть бенчи вроде https://ru.gecid.com/prtart.php?id=49680 Или вообще найти нужный бенч. Явно вопрос рассмотрен.

    По факту - врят ли заметите

    Плюс еще ссылка https://community.amd.com/t5/processors/problem-wi... В конце ТС написал что обновил БИОС и запустил память в 2933
    Ответ написан
    Комментировать
  • Ноутбук на AMD или intel?

    @cheeroque
    Ryzen 5 4600H. Ноутбуки на третьей серии стоят плюс-минус столько же, но ощутимо медленнее. Так что не нужны.
    Ответ написан
    1 комментарий
  • Зачем нужен hash?

    iiiBird
    @iiiBird
    Пока ты спишь - твой конкурент совершенствуется
    это защита от Cross-Site Request Forgery https://cheatsheetseries.owasp.org/cheatsheets/Cro...
    данный hash формируется на сессию. вот он и проверяется при клике, что клик сделан именно с сайта вк, а не подделан с другого сайта
    Ответ написан
    Комментировать
  • Как снизить зависимость от разработчиков?

    Xuxicheta
    @Xuxicheta
    инженер
    1. Требуйте хорошего покрытия тестами. Вы получите инструмент для проверки работоспособности, более надежный код и более понятный. Потому что хорошо написанный код проще тестировать, и разработчикам придется писать внятно.
    2. Наймите хотя бы одного хорошего профессионала, чтобы он следил за всеми. Дешевые разработчики, если дать им волю, справляются с задачей, но пишут неподдерживаемый код.

    Из этих пунктов следует один вывод. Хорошо это всегда дорого, по другому не бывает.

    CMS или фреймворк без разницы, при глубокой кастомизации CMS будет использована как фреймворк так же. И лучше бы это была хорошо спроектированная CMS.
    Ответ написан
    2 комментария
  • Слетит ли гарантия, если поставлю Пингвина с Окнами?

    smorman
    @smorman
    When In Rome do as The Romans do...
    Об этом писалось уже мульён раз.
    Было разъяснение от Межрегионального центра защиты прав потребителей.
    Есть куча прецедентов, когда в судах с лёгкостью выигрывали у продавцов и производителей кейсы на эту тему.
    Установка любого, другого софта в девайсы в период его гарантийного срока не является причиной отказа в гарантийном обслуживании!!!

    Загуглите и всё увидите сами.
    Ответ написан
    Комментировать
  • Как быстро заливать на сервер (Debian) большие объемы данных?

    @Tabletko
    никого не трогаю, починяю примус
    Проверьте канал между вашим сервером и домашним компом при помощи iperf. Если покажет числа приблизительно похожие на заявленные провайдером, ищите узкое место дальше. Возможно диски не успевают быстрее читать или писать. Возможно на принимающей стороне есть какая-либо посторонняя нагрузка, которая не позволяет быстрее записывать. Так же убедитесь, что с обоих сторон гарантированная полоса, иначе все эти тесты можно будет поделить на 10, т.к. сейчас у прова нет нагрузки и скорость по тарифу, а через десять минут пров перегружен и вы делите внешний канал со всеми клиентами провайдера.
    Ответ написан
    Комментировать
  • Как реализовать активацию пользователя через email на React и Nginx?

    @dmtrrr
    Backend developer
    Зачем react приложению ловить эту ссылку? Backend должен обработать этот запрос и редиректнуть пользователя на нужный url
    Ответ написан
    1 комментарий
  • Как увеличить обьем используемой видео памяти?

    @antonwx
    Во-первых встройка использует под свои нужды часть оперативки. Если вдруг ей будет не хватать, она дополнительно себе по ходу довыделит нужное количество памяти.
    Во-вторых a6 это настолько помойный проц (с ещё более помойной встройкой), что память его не спасёт. Его ничто не спасёт. Кроме утилизации и замены на что-то адекватное.
    Ответ написан
    1 комментарий