• Как защитить Rest API от использования третьими лицами?

    Предлагаю использовать Google Cloud Messaging (GCM).

    Устройство регистрируется в GCM, получает registrationId – токен, – сохраняет его у себя локально и передает вашему серверу. Далее пуш-сервер использует этот registrationId для отправки сообщений вашему приложению на этом устройстве. В сообщении передайте сгенерированную на сервере строку. Эту строку приложение должно вернуть серверу. И только после совпадения строк разрешаете для этого устройства доступ к API.

    Таким образом доступ к API будет только у вашего приложения. Даже, если кто-то расковыряет приложение, или создаст его клон, то оно не пройдёт валидацию и не сможет получать ваши push'и. Ни менять API, ни шифровать запросы/ответы, ни переходить на https и т.п. вам в таком решении не потребуется.
    Ответ написан
    Комментировать
  • Как заставить работать 2 параллельных запроса одновременно в nginx?

    @BorisKorobkov Куратор тега PHP
    Web developer
    Вангую: это не Nginx, а в PHP открываете сессию и долго работаете, не закрывая ее. Поэтому второй запрос ждет, пока текущая сессия освободится (фактически, пока первый запрос закончится). Надо сессию закрывать сразу же.
    Ответ написан
    Комментировать
  • Чем заменить fetchAll()?

    Sanasol
    @Sanasol Куратор тега PHP
    нельзя просто так взять и загуглить ошибку
    Если у вас 10 полей из 10 таблиц не влезают в память, то никак вы их не достанете без увеличения памяти для php.

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

    Чтобы не значило ваше "передать" в данном случае.
    Ответ написан
    Комментировать
  • Как восстановить Mac OS раздел на диске, не определяется файловая система?

    Zettabyte
    @Zettabyte
    Проф. восстановление данных ▪ Вопрос? См. профиль
    Я думаю, что прямо восстановить в смысле "вернуть как было" получится вряд ли.

    Если есть такая возможность, подключите ССД к машине с Виндоус и посмотрите что вам скажет R.saver: https://rlab.ru/tools/rsaver.html
    Программа бесплатная и полного функционала для восстановления с HFS и HFS+ не содержит, но в полном объёме поддерживает чтение с неповрежденных файловых систем, используемых в Мак ОС.

    Если Р.сэйвер раздел не прочитает, то вам потребуются платные утилиты (бесплатных я что-то даже не припомню), с помощью которых надо будет просканировать раздел с нужными данными.
    Начать можете с Raise Data Recovery или UFS Explorer редакции Standard: https://rlab.ru/tools/commercial/

    Триальные версии полностью функциональны и позволяют сохранить файлы маленького размера, т.е. вы можете опробовать программу перед покупкой лицензии. У этих программ уже есть версии и под Mac OS.

    советуют все ...
    Performing fsck_hfs

    Я очень мало работаю с Маками и не могу утверждать, что мои сведения о работе fsck_hfs на 100% актуальны, но касательно Линуксового FSCK (как и CHKDSK под Windows) я могу сказать лишь то, что если вам нужны данные, бегите от них, как от огня!
    Увидеть раздел они может быть вам и помогут, но это будет сделано ценой кромсания ваших файлов на рандомные куски. А я сомневаюсь, что ваша конечная цель - просто увидеть раздел, в т.ч. и пустой.
    Ответ написан
    2 комментария
  • Обработка естественного языка на коленке, как научится выдергивать из текста город, улицу, район?

    DanilBaibak
    @DanilBaibak
    Machine Learning engineer
    Ваша задача называется Named-entity recognition. Существует ряд библиотек, которые решают эту задачу (spacy, NLTK). Большинство решений приведены для английского языка. Но, я думаю, есть примеры и для русского.
    Ответ написан
    Комментировать
  • Обработка естественного языка на коленке, как научится выдергивать из текста город, улицу, район?

    @BorisKorobkov
    Web developer
    Проще воспользоваться уже готовыми сервисами типа https://dadata.ru/

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

    kawabanga
    @kawabanga
    1) Нужно иметь представление, как загружаются и работают сайты. Тут необходимо иметь представление и о том, что полезный контент может появится на сайте и после загрузки через определенное время.

    2) Нужно иметь представление, как работает самый обычный способ получения контента - Curl. Попробуйте скопировать что то, поработать, представить в xml документ и тд. Тут вы определитесь с принципом работы парсера.
    - парсер получает вводую информацию -> с учетом программы и вводных данных, парсер запрашивает определенные данные -> парсер обрабатывает данные для пользователя -> при необходимости, парсер повторяет запрос (инициированный пользователем или рекурсий) -> конец

    3) Далее вы дойдете до механизмов защиты от парсинга:
    - ограничение запросов на 1 ip, на один клиент и тд
    - подгузка информации после загрузки контента
    - дополнительный запрос на подгрузку контента с CSRF и другими способами
    - блокирование ip
    Это откроет вам парсеры типа PhantomJs, Научит пользоваться прокси, мимикрировать под популярные браузеры и тд.
    Так же вы дойдете до многопоточности работы парсера, и подумаете о переходе на C и подобный язык программирования. Общаясь с сайтом уже посредством api.

    А дальше, сталкиваяь с новыми проблемами, будете их решать.
    Ответ написан
    1 комментарий
  • PHP7. Двухуровневое кеширование + форк?

    AlekseyArh
    @AlekseyArh
    Кибер существо
    Примерно такая схема:
    1) Пользователь заходит -> кэша нет -> пользователь ждёт пока данные генерируются -> данные отдаются пользователю -> данные пишутся в кэш
    2) Пользователь заходит -> кэш есть -> пользователь получает данные
    3) Пользователь заходит -> кэш устарел -> пользователь получает устаревший кэш -> в кэш ставится флаг что началось обновление кэша -> кэш обновляется
    4) Пользователь заходит -> кэш устарел -> пользователь получает устаревший кэш -> стоит флаг что кэш сейчас обновляется, соответственно ничего не делаем

    То есть если не сильно важно на сколько свежие данные получит пользователь, то не заставлять его ждать их обновления, а отдавать те что есть сразу, а потом запускать обновление.
    Ответ написан
    5 комментариев
  • Каковы Возрастные ограничения в программировании?

    @freeg0r
    .. some dude ..
    приехал в другую страну в 36 лет из России, без опыта программирования, был только политех за плечами, и то "инженер радиотехник" (хотя во время моей учебы программирование давали на нашем курсе по полной: Ada, Pascal, Fortran, Basic, C, C++ .. до ассемблера), но ввиду минимальных зарплат по тому времени, совсем не работал по специальности. Как переехал, стал усиленно заниматься, взял учебу по DBA, освоил Objective C, поработал полтора годика в стартапе... ну в общем сейчас 46, пока пенсионером не чувствую себя.. а Вы в 27 переживаете :)
    Ответ написан
    2 комментария
  • Как вывести миллион маркеров на карте в мобильном приложении?

    Moskus
    @Moskus
    Изучайте методы, которые давно отработаны для показа данных в различных картографических фреймворках для web.
    Подходов несколько. Например, разбивать запрашиваемые данные на фрагменты одинакового (в проекции окна приложения) размера. Это позволяет не запрашивать те, которые у вас уже загружены. Можно запрашивать область больше вашего viewport-а (и комбинировать это с предыдущим методом). И делать новые запросы только тогда, когда величина scroll-а от точки предыдущего запроса превышает какое-то значение. Например, пользователь открыл карту, приложение запросило данные на покрытие viewport-а плюс 50% его ширины с каждой стороны. Пока пользователь не сдвинет карту дальше 25% ширины viewport-а от начальной точки, новых запросов не делать. Также можно озаботиться тем, чтобы сервер не пересчитывал всё каждый раз, а именно - сделать prerender для разных масштабных слоев. И использовать кэширование на стороне сервера. Или вообще превратить ваши маркеры в статичный (или закэшированный, условно статичный) растровый слой, а с сервером общаться только когда пользователь в маркер ткнёт, чтобы о нем информацию получить.
    Ответ написан
    2 комментария
  • PHP. Как получить определенный div с внешней страницы по div id или classname?

    php10
    @php10
    Разработчик на PHP
    Очень просто:
    simplehtmldom.sourceforge.net
    Ответ написан
    Комментировать
  • Как настроить ЧПУ на wordpress apache+nginx?

    HeadOnFire
    @HeadOnFire
    PHP, Laravel & WordPress Evangelist
    1. Зачем вам Apache? Используйте Nginx + PHP-FPM, тогда для ЧПУ надо всего лишь одну строчку в конфиге Nginx.
    2. Если все-таки Apache нужен, настраивайте ЧПУ в .htaccess. Nginx в данной связке всего лишь форвардит (проксирует) запросы на Apache, а их обработку производит последний.
    Ответ написан
    Комментировать
  • Как защитить Rest API от использования третьими лицами?

    devalone
    @devalone
    ̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻̻
    Если кратко, - никак, т.к. любую защиту можно обойти, а реверсить андроид приложения очень просто.
    А так, часто используют подпись запросов, в идеале алгоритм подписи должен быть написан на компилируемом языке вроде C++. Ещё к запросу нужно добавлять timestamp, чтоб нельзя было просто отправлять запросы тупо скопировав пакет снифером. Также можно обфусцировать API, чуть усложняя его использование. Но что не делай - обойти это всё можно.
    Ответ написан
    Комментировать
  • Как защитить Rest API от использования третьими лицами?

    deksden
    @deksden
    Enterpreneur
    Давайте рассмотрим вопрос чуть поструктурнее.

    Несанкционированное использование неофициальным клиентом - значит пытаемся защитить клиента.

    Https с ключом к API защитит только от тривиального перехвата трафика сниффером (mitm).

    Если расковыряют приложение и достанут идентификационный ключ для подписания запросов - будет проблема. Тут уже включаем защиту от «расковыривания». Имхо, лучший вариант - плановый выпуск обновления приложения с заменой ключа, и, возможно, внесением определенных изменений в хранение этого ключа (чтобы взлом клиента требовал определенного времени). Когда то народу надоест ломать.

    Если ломать не надоело - то следует задуматься над причинами: почему кому то так хочется иметь неофициальный клиент к вашему api. Тут будет проще договорится - или продолжить играть в мечи и щиты.
    Ответ написан
    1 комментарий
  • Как защитить Rest API от использования третьими лицами?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Здесь подробно всё описано.

    Данное API работает без авторизации пользователя.
    В качестве "прозрачной" (для пользователя) авторизации приложения (на серверном API), на клиенте - используем два параметра для формирования запрашивающего токена авторизации: идентифицирующую устройство информацию и публичный серверный ключ.

    Токен: ID-устройства (или любую идентифицирующую информацию мобильного устройства) мы шифруем открытым/публичным ключом сервера, хранящимся в приложении.

    На сервере API - логируем все ошибки авторизации.
    При их появлении - выпускаем новый клиент с новым открытым/публичным серверным ключом и новой логикой формирования токена.
    Ответ написан
    Комментировать
  • Как развить навык проектирования приложения или как стать Senior?

    @OldCrazyCoder
    Писать код. Читать код. Например, популярные опенсорсные проекты на гитхабе. Если очень уж книгу хочется, то вот минимальный джентельменский набор:
    1. Совершенный код. С. Макконнелл
    2. Чистый код: создание, анализ и рефакторинг. Роберт Мартин
    3. Приёмы объектно-ориентированного проектирования. Паттерны проектирования. Банда четырех))
    4. PHP. Объекты, шаблоны и методики программирования. Мэт Зандстра
    5. Рефакторинг: улучшение существующего кода. Мартин Фаулер
    И т.д. Книг крайне много. И статей много. И простое их чтение мало что даст. Практика, много практики. Критичное отношение к своему коду, однако без перегибов - не стоит упираться в перфекционизм.
    Ответ написан
    Комментировать
  • На чем лучше и быстрее написать парсер (PHP)?

    glebovgin
    @glebovgin
    Full Stack Web Developer
    За годы парсинга данных я пришел к простому набору:

    Curl + tidy + DOMXpath
    Ответ написан
    Комментировать
  • Как подключить SSL в NodeJS v4.2.1 без использования Express.js?

    k12th
    @k12th
    console.log(`You're pulling my leg, right?`);
    Что за нелюбовь к официальной документации? https://nodejs.org/api/https.html#https_https_crea..., прекрасно все без express работает.
    Ответ написан
    Комментировать
  • Как подключить SSL в NodeJS v4.2.1 без использования Express.js?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    А в доки ноды точно заглядывали?
    Первый же экзампл: https://nodejs.org/api/https.html#https_https_crea...
    Ответ написан
    1 комментарий
  • NGINX - как предоставить нескольким пользователем доступ по SSH к /home/domain/www на один домен?

    @ldvldv
    /home/static/www/dirone
    владелец: userone
    группа: www-data
    права: rwxr-s---

    /home/static/www/dirtwo
    владелец: usertwo
    группа: www-data
    права: rwxr-s---
    Ответ написан
    Комментировать