Профиль пользователя заблокирован сроком с 10 апреля 2022 г. и навсегда по причине: систематические нарушения правил сервиса
  • Нормально ли в PHP определять переменную при вызове функции в списке аргументов?

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

    Но по возможности такого подхода следует избегать.

    И чисто технически это не определение переменной при вызове, а передача переменной по ссылке.
    Ответ написан
    5 комментариев
  • Как правильно создать таблицу в которой будет храниться инфо о посте?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Гугл поступает совершенно правильно. Потому что делать такую белиберду никому просто и в голову не придёт.

    Во-первых, отдельная таблица тут не нужна, это просто две колонки в той же таблице
    Во-вторых, если и делать отдельную таблицу, то пустые строки про запас в БД никогда не создают. База данных - не бумажный дневник с двойками, разлинованный на целый год. Она устроена по-другому.
    Ответ написан
    Комментировать
  • Закрытие бесплатного G Suite (Workspace), куда мигрировать?

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

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

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

    На домашнем компике ошибки обычно выводятся на экран, на боевом сервере - пишутся в лог. Если не знаете, где находится лог с ошибками, надо посмотреть в панельке управления своим сервером.
    Ответ написан
    Комментировать
  • Чем плох 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
    Ответ написан
    1 комментарий
  • Какие знания по базам данных необходимы начинающему back-end разработчику?

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

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

    Ну и базовый SQL.
    Про "сейчас многие и без него обходятся" - это чушь собачья.
    "Обходятся", во-первых, только на красивых картинках, не имеющих отношения к реальной жизни.
    А во-вторых, когда "обходятся", то в голове все равно держат конечный SQL. Если не понимать, что там тебе настроит ORM, то потом будет очень больно.
    Ответ написан
    Комментировать
  • Как раскодировать 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
    Чебуратор тега РНР
    Валидация не имеет вообще никакого отношения к безопасности. Она относится исключительно к бизнес-логике.
    Ответ написан
    Комментировать