• Закрытие бесплатного G Suite (Workspace), куда мигрировать?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    я так понимаю что в тындексе есть версия для ограниченных людей, которую он не очень афиширует, но внимательный пионэр сможет отыскать среди платных тарифов
    10 ГБ на Диске для каждого подключенного сотрудника (я так понимаю это размер почтового ящика).
    и плюс какое-то не нужное фуфло: Рассылки, Телемост, Мессенджер, Календарь, Заметки и Документы.
    всё бесплатно, то есть даром
    Ответ написан
    2 комментария
  • Почему file_put_contents() не создает файл?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    61cd1515315b8585107266.jpg

    Если функция записи в файл вызывается, но файл не создается, то РНР напишет в сообщении об ошибке "с чем это связано".
    Спрашивать об этом посторонних людей бесполезно.

    На домашнем компике ошибки обычно выводятся на экран, на боевом сервере - пишутся в лог. Если не знаете, где находится лог с ошибками, надо посмотреть в панельке управления своим сервером.
    Ответ написан
    1 комментарий
  • 10-15 join'ов в одном запросе - антипаттерн?

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

    Абстрактный вопрос "в попугаях" задавать бессмысленно.
    Сейчас он выглядит как "можно ли строить дом в 10-15 этажей?"
    Если это железобетонный дом по нормальному проекту, то нормально.
    Если это сарай у дедушки на даче, то ненормально.
    Надо либо привести конкретный запрос либо рассуждать об абстрактных материях в одиночестве.
    Ответ написан
    Комментировать
  • При записи в mysql ошибка?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Ответ написан
    Комментировать
  • Чем плох md5(md5($pass)) для пароля?

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

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

    Возможно, непонимание происходит оттого, что существует не один, а несколько векторов атаки на пароль.
    1. Поиск хэша по "радужным таблицам" (rainbow tables): огромным базам данных, где собираются заранее посчитанные хэши для любых возможных строк.
    2. Метод грубой силы (bruteforce): перебирать все комбинации символов и применять к ним хэширующую функцию до тех пор, пока она не вернёт искомый хэш.
    3. Поиск по словарю. Похож на брутфорс, но перебор не всех возможных значений, а всего нескольких тысяч самых популярных паролей, типа "123", "password" и пр.
    phpfaq.ru/tech/hashing

    И только одного элемента недостаточно, а нужны все в комплексе:
    - Хэширующая функция должна иметь большую вычислительную сложность, чтобы усложнить подбор перебором. по этой причине md5() не подходит
    - Хэш должен быть посолен уникальной солью, чтобы нельзя было, затратив 1 раз кучу вычислительных усилий, заранее построить хэши для любых комбинаций символов. По этой причине фарш без соли - деньги на ветер.
    - Пароль не должен быть слишком простым, иначе даже медленный перебор его раскроет. Этот момент тоже надо учитывать
    Ответ написан
    Комментировать
  • Как выполнить такой запрос MySQL?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Это какой-то странный говнокод, который заведомо не будет работать, с любым запросом
    Если в запросе используются параметры (:idArt) то его надо выполнять не через query|, а через prepare
    "Все комментарии" этот запрос не вытаскивает, а только их количество.
    Если у вас есть идентификатор статьи, то зачем вытаскивать по имени?
    По имени вообще никогда нельзя ничего вытаскивать. Имя может поменяться. Для идентификации статьи всегда надо использовать только id
    $sql = "SELECT *, (SELECT COUNT(id_art) FROM base_comments WHERE id_art = a.id_article) all_comments,
    FROM base_articles LEFT JOIN base_users ON base_articles.id_author = base_users.id_user 
    WHERE id_article = ?)";
    $stmt = $pdo->prepare($sql);
    $stmt->execute([$idArt]);
    $articleInfo = $stmt->fetch();


    А сами комментарии, если надо, то как уже говорилось выше, запрашивать отдельным запросом.
    Ответ написан
    2 комментария
  • Почему долгая выборка в Mysql, если в базе больше 2 000 000 записей?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Скорее всего не хватает памяти на сервере или она не используется
    Проверить innodb_buffer_pool_size
    Ответ написан
    Комментировать
  • Проблема с загрузкой css файлов в php-проетке?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Все что нужно знать про "загрузку стилей в РНР проекте" - это уметь отличать относительные пути от абсолютных
    и для для всех локальных http ресурсов использовать только абсолютные пути от корня сайта.
    phpfaq.ru/newbie/paths
    Ответ написан
    Комментировать
  • Какие знания по базам данных необходимы начинающему back-end разработчику?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Судя по совершенно дремучим вопросам, которые задают на тостере, самая большая проблема у начинающих разработчиков - это принцип работы реляционной базы данных, представление данных в нормальной форме, базовые варианты связей, атомарность данных.
    Я недавно нагуглил книгу Святослава Куликова, полистал - вроде бы то что надо.
    https://svyatoslav.biz/relational_databases_book/

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

    Ну и базовый SQL.
    Про "сейчас многие и без него обходятся" - это чушь собачья.
    "Обходятся", во-первых, только на красивых картинках, не имеющих отношения к реальной жизни.
    А во-вторых, когда "обходятся", то в голове все равно держат конечный SQL. Если не понимать, что там тебе настроит ORM, то потом будет очень больно.
    Ответ написан
    Комментировать
  • Можно ли скрыть API endpoint от ботов?

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

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    $array = json_decode(str_replace("\xEF\xBB\xBF",'',$response), true);
    Ответ написан
    1 комментарий
  • Достаточна ли защита сайта php?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Что такое "файл с защитой от sql-инъекций"? Это звучит как "я никогда не заражусь спидом, потому что когда я занимаюсь сексом, то в соседней комнате у меня специальная тумбочка с кучей презервативов". Презерватив надо использовать в процессе, а не держать в отдельной тумбочке. Только тогда он поможет.

    "хотя это можно прописать и в .htaccess" - это совсем какой-то идиотизм, причем заведомо вредный

    "Всё, начиная с php авторизации, защищено от прямого доступа" - это тоже, хотя просто бесполезный

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

    В целом, из того что описано, помимо нескольких бессмысленных телодвижений, проблемы я здесь вижу по трем пунктам
    1. Какая-то странная "защита от инъекций", которая скорее всего ни от чего не защищает, а только портит данные
    2. Большой вопрос, как именно "генерируется" код доступа.
    3. Вообще не упомянута защита от XSS. Ну и CSRF если уж на то пошло

    Плюс вероятные дыры в конкретной реализации, когда на словах вроде правильно, но в коде реализовано криво. Типа location в качестве защиты страниц от доступа. Ну и в целом надо код видеть. Может быть там какое-нибудь гениальное incude $_GET['page'];
    Ответ написан
    3 комментария
  • Как сравнить переменные?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    при любых проблемах в сравнении строк всегда выводим непечатные символы

    echo urlencode($var1),"\n";
    echo urlencode($var2),"\n";


    и смотрим глазками, где что лишнее
    Ответ написан
  • Валидация на существования юзера?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Писали уже 100500 раз, запросы должны быть подготовленные.
    Тогда и не будет возникать идиотских вопросов.
    Ответ написан
    Комментировать
  • Какова правда в работе и обучении будущего ИБшника?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    ИБ - это вайти в квадрате.
    В ИБ нельзя зайти "патамашта крута!". Надо обладать целым набором личностных качеств, которые довольно редко встречаются в популяции. В частности надо уметь мыслить логически и самостоятельно работать с информацией, буквально по крупицам выуживая её там, где на первый, второй и третий взгляд кажется что вообще никакой информации нет. Или наоборот - уметь вылавливать те же крупицы из безумного потока косвенной информации. То есть так же обладать нечеловеческой усидчивостью и внимательностью.
    Если эти качества есть, то человек вполне зайдет в ИБ, причем никого не спрашивая.
    Если их нет - как их нет очевидно у автора вопроса - то да, останется только перекладывать бумажки за малый прайс, разве что в виде бонуса должность будет называться не "младший делопроизводитель" и "специалист по ибэ!"

    Ну и в принципе перед тем как начинать смотреть на ИБ, надо сначала углубленно изучить либо программирование, либо системное администрирование. Не на уровне mysql_query в похапе и sudo apt install, а именно углублённом, чтобы понимать как работают программы и сети. После этого при желании можно будет заехать в ИБ практически самотеком.
    Ответ написан
    4 комментария
  • Какой выбрать вариант избавления от глобальных переменных в ООП PHP приложении?

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

    В первом случае выкинуть весь этот ад и делать по-человечески, передавая переменные в конструктор/методы в качестве параметров.
    Ответ написан
    Комментировать
  • MVC (PHP): правильно ли понимаю слои?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Ответ написан
    Комментировать
  • Как подключиться к Open Server DB через PHP?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    61cd1515315b8585107266.jpg

    Если не получается скопировать данные доступа к БД без ошибок, то на этот случай РНР возьмет за ручку, и расскажет, что не так. Надо только прочесть сообщение об ошибке.
    Ответ написан
    Комментировать
  • Валидация Flask?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Валидация не имеет вообще никакого отношения к безопасности. Она относится исключительно к бизнес-логике.
    Ответ написан
    Комментировать
  • Почему ошибка Warning: Undefined variable $db in?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Самый простой и правильный вариант

    function CheckDestiny ($variable, $type, $db) {
    Ответ написан
    Комментировать