Задать вопрос
Ответы пользователя по тегу PHP
  • Безопасность при использовании сессии?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    1. Привяжите идентификатор сессии через fingerprint ("отпечаток" клиента) к клиенту (браузеру), захешируйте (никакого шифрования!) через серверную "соль" и сохраните на клиенте в куках.
    2. Затем, проверяйте этот идентификатор при смене IP-адреса внутри этой сессии, запросив реальный "отпечаток" и его хеш из куков, и проверьте то, что сохранено в сессии на стороне сервера: несовпадение - это чужой! ;)

    Итог: Если кто-то подменит куки, он никак не узнает реального "отпечатка" клиента и ничего не сможет сделать с украденными куками с чужим аккаунтом.
    Ответ написан
    6 комментариев
  • Ajax или websocket для отправки сообщений?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    А куда Вы дели идентификатор соединения клиента?! :))
    Ответ написан
    4 комментария
  • Как обьеденить php скрипты?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Исключить путь в .htaccess.
    Ответ написан
  • Как рассчитывать зарплату(может быть задана разными формулами, подробности внутри)?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    1. Унифицировать все параметры формулы для всех сотрудников.
    2. Задать каждый параметр для каждого сотрудника.
    3. Задать итоговую формулу для каждого сотрудника.
    Ответ написан
    Комментировать
  • Как создать хэш из строки типа md5 с минимальным набором символов a-zA-Z (без цифр) и с минимальными коллизиями?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Два варианта:
    1. Посмотрите здесь.
    2. Создайте таблицу-связку: [имя css-класса] -> [ID] -> [сочетание на множестве по ID: короткое имя класса]
    Ответ написан
  • Как проверять входные данные, чтобы нельзя было выполнить произвольный код?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    На все входные данные - regex-фильтр: свой на каждый тип или переменную!
    preg_match()
    Ответ написан
    Комментировать
  • Как распараллелить парсинг и загрузку в БД на php?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Если делать в один поток:
    (Сначала, работаем БЕЗ базы)
    1. Берём CSV и расставляем (формируя два новых файла рядом!) через консольный скрипт/программу в нём ID-шники согласно "таблице-связке" (которая тоже в файле хранится, её изначально надо будет сделать однократно): [ID в CSV] -> [ID в нашей базе]. Это может быть как артикул, так и название (или любой другой уникальный параметр для одной уникальной записи, включая хэширование).
    Получаем CSV2-update (связанные записи) и CSV2-new (записи, которых нет в нашей БД).

    (сортировка - по желанию, но она не нужна)

    (Начинаем работать с базой)
    2. Обновляем сначала те, что есть: CSV2-update
    3. Затем, добавляем в БД новые позиции: CSV2-new.

    4. После добавления - обновляем файл "таблицы-связок".

    Итог:
    1. Мы все "тяжёлые" операции делаем ВНЕ базы.
    2. Мы ничего не ищем по базе, а сразу берём нужную запись по ID ("ключу").

    Захотите сделать сразу всё и мультипоточно на PHP: pthreads в помощь!
    Ответ написан
    Комментировать
  • Сильные и слабые стороны PHP 7?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Сильные: быстрая обработка текста и текстовых запросов, интеграция с любыми веб-серверами, простое освоение, открытый код, большое комъюнити, много проектов с открытым кодом, много недорогих разработчиков.
    Все остальные - слабые.
    Ответ написан
    Комментировать
  • Как лучше зашифровать на клиенте и расшифровать на сервере?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    То, что написано в гугл и википедии - смысла повторять нет.

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

    Порядок действий:
    1. Получаем с сервера публичный ключ и формулу (на JS) для мутации исходных данных одним из N-способов (это могут видеть все).
    2. Выбираем случайным образом N из предложенного сервером диапазона и мутируем данные по формуле.
    3. Шифруем мутированные данные публичным ключом.

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

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

    Пример: если ключей всего 1000 [1..1000], а N всего 5 [1..5], то это 1000*5=5000 комбинаций к проверке.
    При том, что сервер, используя свой приватный ключ, подбирает лишь только N, за время, меньше секунды.
    Ответ написан
    21 комментарий
  • Как авторизоваться в Instagram без API?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Может это поможет...
    Ответ написан
    Комментировать
  • Блокировщик ботов по IP, не получается корректно вписать исключение по User Agent, как сделать правильно?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Нужно проверять подстроку, а не строку ($agent) сравнивать с элементами массива "белого" списка целиком.

    Альтернативный вариант блокировки ботов: здесь.
    Ответ написан
  • Как поменять статус если прошло 24 часа?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Используйте event в БД.
    Пример.
    Ответ написан
    Комментировать
  • Как перебрать большой массив на 60000 строк?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Никак!
    Превратите массив в "дерево" и ищите от "корня" до "листа".

    Чтобы ещё больше сократить время: у каждого узла (отдельной буквы) - указывайте максимальную глубину, чтобы сразу анализировать перспективу дальнейшего поиска (спуска) по данной "ветке дерева".
    Ответ написан
    Комментировать
  • Редактирование сайта с сохранением на js и html?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    DmitrijP, ответ на Ваш вопрос - прост:
    нужно знать JS, AJAX, PHP и архитектуру построения веб-приложений.

    Если хотите, то можете использовать любой wysiwyg-редактор и встраивать его функционал в свои страницы (+писать свои плагины для любых задач).

    Но без знаний (или стороннего разработчика) - Вы ничего не сможете сделать самостоятельно или нужно всё учить около 2-3мес в идеальном случае.
    Ответ написан
    Комментировать
  • Как ограничить в ресурсах выполнение отдельного файла PHP?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Приоритет в очереди
    Одна очередь - один (или несколько потоков).
    Как в очередь (или в менеджер потоков) поступает задача - на основе типа клиента задаче выставляется приоритет и она ставится или в конец общей очереди (для обычных), или в конец приоритетной очереди (для платных).
    Очередь выглядит так: [исполнение задачи/exec] <- [платные] <- [бесплатные]

    При желании, можно сделать в платной очереди, что каждый N-ый (N>2) клиент - бесплатный. (чтобы как-то уравновесить распределение времени CPU)
    Ответ написан
    5 комментариев
  • Какую библиотеку использовать для words to number?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    1. Тут (там только поправить слова с английского на русский в массиве)
    2. Вот ещё - там чуть по-другому реализация.
    Ответ написан
    Комментировать
  • Как получить данные из массива в другом классе?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Предложу свой "кривой" вариант (нормальный - с передачей аргументов в разные методы: проксирование нужно писать в функции __callStatic):
    class UrlParse
    {
        private $uri;
    
        function __construct()
        {
            $this->uri = $_SERVER['REQUEST_URI'];
        }
        
        public static function __callStatic($name, $arguments)
        {
        	switch ($name) {
            	case 'urlSelect':
            		$a = explode('/', parse_url($this->uri, PHP_URL_PATH));
            		$url = array(
                		'app' => $a[1],
                		'action' => $a[2]
            		);
            		return $url;
            		break;
            		
            	default: throw new Exception('Error: '.$name.'-method not found!');
        	}
        }
        
    }
    
    //Вызов метода (и создание экземпляра класса) - выполняется одной строкой
    echo UrlParse::urlSelect()['app'];
    Ответ написан
    2 комментария
  • Как защитить php сессию?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Варианта 2 (можно использовать как по-отдельности, так и все сразу):
    1. Самый простой (и лучше не забывать!) вариант:
    Всегда ставить флаги HttpOnly и Secure в http-заголовки, когда устанавливаете данные, которые не должны быть доступны из JS-скриптов.
    Ссылки:
    1. https://www.php.net/manual/en/session.configuratio...
    2. https://www.owasp.org/index.php/HttpOnly

    2. Обмен токена (перевыписка) делается цепочкой:
    1. Вы зарегились на сайте. Запрос на выписку НОВОГО токена генерирует JS-код браузера, обменивая хэш валидации, зависящий от IP и ClientID (User-Agent и ещё какие-то параметры) сервером на рабочий токен (лучше - обменивать ещё и временный токен, который приходит в письме по электронной почте сразу после регистрации). Т.е., браузер НЕ ПЕРЕДАЁТ IP и ClientID в чистом виде на сервер.
    2. Вы работаете и вдруг у Вас меняется IP-адрес (сессия - та же): посылается команда обмена старого токена на новый сервером на клиент (или переаутентификация/перевыписка токена в "прозрачном" режиме). До окончания успеха этой операции - все запросы от текущего клиента будут невалидны!
    3. Клиент посылает в ответ HASH: CliendID, текущий (устаревший) токен и предыдущий IP-адрес, и подписывает всё какой-либо частью устаревшего токена.
    4. После получения хеша от клиента, сервер анализирует хеши: если клиентский и серверный хеши верны, то сервер одобряет перевыписку (обмен устаревшего токена на новый) и возвращает новый токен. Иначе - генерирует процедуру ручной аутентификации.

    Вы не испытываете неудобств, т.к. для пользователя это всё проходит незаметно, не отвлекая его от работы.
    Ответ написан
    Комментировать
  • Как уловить ошибку о которой умалчивает PHP интерпритатор?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    1. В начале каждого PHP-скрипта (глобально - не работает!): declare(strict_types=1);
    2. Читаем тут и ставим свою перегрузку:
    public function __get(string $var) : ?string {
        if (property_exists($this, $var)) {
            return $this->$var;
        }
        
        throw new Exception('property doesn’t exist');
      }
    
      public function __set(string $var, string $value) {
        if (property_exists($this, $var)) {
            $this->$var = $value;
            return;
        }
        
        throw new Exception('property ' . $var . ' doesn’t exist');
      }

    3. В php.ini добавить (дополнить):
    display_errors = On
    error_reporting = E_ALL | E_STRICT

    4. В начало PHP-скрипта добавить:
    error_reporting(E_ALL | E_STRICT);
    error_reporting(-1);
    ini_set('error_reporting', E_ALL | E_STRICT);

    5.В .htaccess:
    php_flag display_startup_errors on
    php_flag display_errors on

    6. "Контрольный в голову": https://xdebug.org/docs/basic

    7. PHPStan - проверка PHP-кода на ошибки без запуска.

    PS: ещё есть также prepend/append скриптов в php.ini для установки любых значений (исполняется php-код внутри них) до/после загрузки любых скриптов, соответственно.
    Ответ написан