Ответы пользователя по тегу PHP
  • Как правильно реализовать бронь товара до оплаты в интернет магазине цифровых товаров?

    @danSamara
    Это фундаментальная проблема онлайн-магазинов не имеющая решения: либо вы реально блокируете товар при его наличии в корзине, что гарантирует пользователю покупку, но создаёт проблемы вам, либо наличие товара несёт чисто информационную функцию, что снижает лояльность пользователей из-за "к сожалению данный товар уже недоступен к покупке".

    Самый распространённый подход - блокировка товара перед непосредственным переходом к оплате на короткое время, за которое пользователь должен произвести оплату. Этот вариант хорош по двум причинам:
    1. Неограниченная по времени корзина - не надо принимать сложное решение о времени реальной блокировки товара в корзине.
    2. Короткое время реальной блокировки товара (10-30 минут) с предварительной проверкой наличия оного.
    Конечно, всё ещё остаётся вариант ботов, в этом случае можно будет вообще убрать реальную блокировку и проводить денежную транзакцию через hold/refund, что будет бесплатно с точки зрения комиссий.
    Ответ написан
    Комментировать
  • Чем плох md5(md5($pass)) для пароля?

    @danSamara
    По каким критериям оцениваем?

    1. По скорости - лучший.
    2. По криптостойкости - худший.
    3. По коллизиям - один из худших.
    4. По соли - критерий неприменим.

    1. Когда важна скорость, и не важны прочие критерии, например при подсчёте контрольных сумм - MD5, наверное, один из лучших. Хэшировать пароли тоже можно - например кратко живущие длинные токены с большой вариативностью - никто в здравом уме не будет подбирать хэш для 20 символов, срок жизни которых - 5-10 минут. Хотя я бы и для токенов использовал что-то другое - тот же sha, от греха подальше )

    2. Криптостойкость у MD5 низкая. Вложенность (md5(md5(...))) её только уменьшает, увеличивая коллизии и не сильно влияя на скорость перебора - на современных картах она уже составляет сотни гигахэшей. Может уже перешагнули за черту терра - не сильно за трендами слежу.

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

    4. Соль к хэшированию не имеет прямого отношения и применяется только для исключения возможности использования атакующим радужных таблиц. Однако перебор по словарю и перебор по словарю с вариантами (добавление символов до/после слов, склейка и т.д.) вполне возможен и соль на него не влияет никак. В случае MD5, опять же, это очень быстро.
    Ответ написан
    Комментировать
  • Как запустить 5000 потоков параллельно с GET запросами?

    @danSamara
    У вас IO-bound задача, а это значит:
    1. Вам нужно асинхронное решение, которое позволит избавится от времени ожидание IO операций в основном цикле программы.
    2. Необходимо знать максимальное время обработки ответа (назовём его response_processing_time).
    3. Необходимо знать минимальное время запроса (timeout) - время, в течении которого удалённый сервер не оборвёт связь (пусть будет request_time_out).

    Последние два параметра связаны: response_processing_time > request_time_out * количество_запросов. То есть, если вы обрабатываете ответ сервера за 1мс или, другими словами обрабатываете 1000 запросов в секунду, это значит, что для тысячи запросов время соединения не должно быть меньше секунды. Для 5000 одновременных запросов - 5 секунд соответственно.
    Это ограничение фундаментально и обойти его не получиться - можно только оптимизировать: или железом - задействовать дополнительные ядра процессора и/или программно - уменьшением времени обработки запроса.
    Очевидно, что эти расчёты верны только для постоянного потока запросов, если у вас возможны паузы между запросами, то их надо вносить как поправочные коэффициенты.

    Касательно сути вопроса - на чём лучше делать, я бы рекомендовал Go - идеальный язык для всяких сетевых штук, можно сказать, это его родная стихия. Тем более, что задача простая и её реализация не должна занять много времени даже для человека, который никогда с GoLang дела не имел.
    Ответ написан
    Комментировать
  • Как найти пересечения слов в строках и объединить в группы похожие строки (php)?

    @danSamara
    Без ошибок и без словаря, в котором будут выставлены веса для отдельных слов - никак.
    Поясню. У вас стоит задача разбить строки с упором на музыкальные группы (отталкиваюсь от вашего примера), значит для всех названий групп должен стоять приоритет группировки, иначе объединение будет происходить случайным образом - по первым попавшимся словам.
    Ответ написан
    1 комментарий