• Как сделать временную ссылку не на скачивание?

    @granty
    Технически, есть 2 варианта:

    1. Отдавать скачиваемое на PHP. Для генерации временной ссылки можно использовать:

    A) класс NoDirectLinks. Временные ссылки надо складывать в БД и проверять их "валидность" и периодически чистить.

    B) делать временную ссылку вида "ID_ValidDate", которую шифровать методом обратимого шифрования. Если периодически менять ключ кодирования (и алгоритм), такую ссылку невозможно взломать и подделать.
    Внешне ссылка выглядит как хэш 56af5b4C..., но на сервере её можно декодировать обратно в "ID скачиваемой записи по БД" и "время жизни ссылки". Если время жизни истекло - контент не отдаётся. Вместо ID можно запаковывать и имя файла.

    В обоих вариантах делается файл типа get.php, который проверяет "валидность" временной ссылки и отдаёт контент.
    В вашем случае это плохо - при медленном интернете у юзера, загрузка видео/аудио будет идти долго, PHP-скрипт будет висеть и жрать ресурсы.


    2. Делать временную ссылку средствами операционной системы, например, через symlink() на PHP.
    Тогда медиа-файл будет отдаваться веб-сервером без участия PHP, что намного лучше.
    Всё-равно придется хранить эти ссылки в БД и решать вопрос их устаревания и чистки.


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

    PS: Я в своё время делал вариант 1 B) для платного скачивания документации - работало неплохо.

    PPS: Делать временную ссылку для проигрывания медиа-файлов не есть хорошо. Посмотрите как работают плееры ютуба (и другие, не показывающие реальный файл) - они бьют файл на кусочки и отдают частями. Но, даже в этом случае, стандарт HTML5 позволяет скачать файл целиком тем, кто прошарен :)
    Ответ написан
    Комментировать
  • Возможно ли сделать переадресацию на другую страницу при нажатии галочки reCAPTCHA?

    @granty
    Можно, судя по топикам на staskoverflow:
    ReCaptcha: How to autosubmit the form when the cap....
    Google ReCaptcha 2 auto submit но для reCaptcha 2 почему-то делают проксирование через свой сервер.
    Ответ написан
    Комментировать
  • Как правильно взять IP адрес пользователя?

    @granty
    Обычно, подобные вашему глюки возникают при использовании ELB (Elastic Load Balancer) хостером. Или когда сайт работает за реверс-прокси сервером (например, CloudFlare или хостеровский nginx).
    Там в $_SERVER['HTTP_X_FORWARDED_FOR'] прилетает строка из нескольких IP:
    "223.190.123.220, 66.102.6.83"
    "2402:3a80:10d3:e19f:e7e1:8c35:fb4a:b49c, 66.102.6.89"
    И, похоже, Yii::$app->request->userIP не знает как с ними поступать (в строке по сути невалидный IP, и filter_var($ip, FILTER_VALIDATE_IP) на нём обламывается).

    Как правильно определять IP посетителя в таких случаях (и какие ещё грабли вас поджидают), отлично изложено на Хабре: REMOTE_ADDR vs HTTP_X_FORWARDED_FOR.
    Вам надо узнать в какой переменной хостер присылает реальный IP посетителя, если он тупо добавляет её в $_SERVER['HTTP_X_FORWARDED_FOR'] - надо хотя бы узнать в начало или в конец. И выцеплять её оттуда.

    PS: Я с Yii не работал, но скорее всего его можно "настроить" под вашу конкретику, там наверняка это предусмотрено. Посмотрите echo '<pre>'.print_r($_SERVER, true).'</pre>'; что и под какими именами прилетает, может ваш хостер использует нестандартные заголовки для передачи реального IP посетителя.

    PPS: HTTP_X_FORWARDED_FOR в принципе нельзя использовать как IP-адрес. Если пользователь работает через свой прокси (или публичные Google-прокси, прокси Opera-mini и тп) - там бывает 3 IP-адреса и более, включая IPv6.
    Ответ написан
    Комментировать
  • Не могу запустить browserSync в gulp из-за Content Security Policy в браузере Chrome?

    @granty
    У вас где-то на сервере издаётся заголовок:
    Content-Security-Policy: default-src 'self';
    Или через PHP-шную header(), или заголовок прописан в .htaccess или в конфиге Апача/nginx/Denver тп. Технически, его могут издавать и браузерные расширения/плагины, в том числе и вредоносные.

    Или уберите этот заголовок совсем, или добавьте в него директиву script-src:
    Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline' appmakedev.xyz linkangood.com;


    Также у вас загружается 8 картинок, но у них неправильно указан src: . Когда укажите его правильно, в заголовок CSP придётся добавить директиву img-src 'self' (и возможно добавить туда домены, с которых загружаете картинки).

    Если не уберёте заголовок, потом будете добавлять в этот заголовок все сторонние хосты(домены), с которых загружаете скрипты и картинки (и CSS стили, и шрифты, и много чего ещё).


    PS: Странно, что вы катите бочку только на Chrome, в Firefox должно быть то же самое. Если, конечно, у вас Content-Security-Policy: default-src 'self'; издаётся не браузерным плагином.
    Ответ написан
    Комментировать
  • Как индексировать одну страницу, но в поиске держать другую?

    @granty
    Клоакинг - это метод обмана поисковых систем, при котором посетителю сайта показывается одно содержимое страницы, а роботам поисковых систем — другое. Карается баном в ПС.

    Классический клоакинг делается по IP (нужно собрать IP подсетей поисковых систем). На сервере проверяется $_SERVER['REMOTE_ADDR'], и в зависимости от него отдаётся различный контент.
    Но роботы Яндекса для проверки клоакинга периодически ходят с IP других провайдеров (чаще всего - Корбины). Кроме того, клоагинг спалят посетители с Яндекс-браузером (он автоматически настучит куда надо).

    Старые варианты клоакинга по UserAgent давно не работают, тк боты ПС могут прийти с любым (по ссылке ниже есть вариант клоакинга для .htaccess).
    Удачи вам в осваивании дорвейных технологий (имхо - это пустая трата времени).

    PS: Имейте в виду, что существуют легальные способы клоакинга.
    Ответ написан
    Комментировать
  • Почему на сайте нет трафика?

    @granty
    1. Подумайте, по каким запросам на ваш должны приходить посетители.

    2. Вбейте эти запросы в Яндекс, и сразу получите:
    ответ на ваш вопрос
    5e4e503fdeac0228794054.jpeg
    Поисковики сами отвечают на те вопросы, по которым "теоретически" может иметь трафик ваш сайт.

    И вторая причина(ы)
    В выдаче много сайтов, аналогичных вашему, но:
    - у них больше контента
    - на них есть есть внешние ссылки
    - они лучше оптимизированы под поисковые запросы
    - они появились десятилетием раньше:
    calc.ru, например, с 2001 года
    translatorscafe.com - с 2002
    unitjuggler.com - с 2008
    ru.wikipedia.org - вообще молчу, это витальный сайт для многих запросов, поэтому в SERP Яндекса википедий сразу 2 штуки(и может быть больше).

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

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

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

    Бизнес поигрался в эти интернет-магазинчики, и быстро понял, что без нормально работающего законодательства и доставки, всё это не работает.
    Ответ написан
  • Что должно быть в чек-листе для успешного SEO в Яндексе и Google?

    @granty
    Судя по сленгу, курсы заработка на сайтах вы прошли, но кроме этого сленга, на этих курсах ничего не преподавали.

    Ответ на ваш вопрос сильно зависит от того, что это за проект и как он будет монетизироваться.

    1. очередной кулинарный сайт не отобьётся никаким SEO

    2. блоги о моде и красоте (и тп) - они давно все перекочевали в ютуб (самипонимаетепочему), а в youtube - своё SEO и принципы раскрутки.

    3. Новостные сайты - отдельная песня, они попадают в выдачу быстроробота, там своё, специфическое SEO.

    4. Фотогалереи и прочие "картиночные" сайты -тоже отдельная песня про специфику ранжирование картинок в ПС.

    5. Тематические форумы - для их раскрутки должен быть костяк профессионалов по тематике форума. Да и там ниши все заняты.

    6. Сайты-сервисы - там качественность и востребованность сервиса важнее SEO.

    7. продающие сайты - смотря что они продают. Для них грамотный маркетинг важнее СЕО, ибо даёт выше конверсию (разные "воронки продаж" и прочее лапша, которую вам развешивают на курсах маркетинга).
    Некоторым никакого SEO не требуется, покупают трафик с Директа/Адсенса. Бижутерию, например, проще продавать в группах в соцсетях. А в некоторых высококонкуретных нишах SEO вообще себя не окупает.

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

    - собираете "продающие запросы", по которые вы хотите иметь трафик с ПС, разбиваете их на НЧ/НК, СЧ/СК и ВЧ/ВК (надеюсь, на курсах вам объяснили WTF). Это классический способ составления семантическое ядра сайта (СЯ). Есть "неклассические" способы формирования СЯ, но их в паблик не выкладывают, sorry.

    - группируете запросы и распределяете их по страницам сайта. Под каждый запрос, кроме длинных хвостов (Long tail), придётся писать отдельную страницу. Это определит структуру сайта.

    - на этапе разработки ТЗ к движке сайта, сразу применяете ваши знания "боевого карате SEO", потому, что там начинается вся магия.
    Например, правильное ЧПУ поймут и Яндекс, и Google. Неправильное ЧПУ - потеря ранжирующего фактора.
    Админка движка сайта должна дать возможность максимально задействовать внутреннее ссылочное, хорошо если будет "автоматика", ибо запаришься делать его руками.
    Важны любые мелочи, даже атрибуты alt и title у картинок.
    Ну, с тонкостями SEO вы знакомы, судя по вопросу...

    - если нужен трафик с мобильных устройств - не забудьте про мобильную версию сайта. Там свои муки выбора как сделать мобильную версию сайта, чтобы ПС признали её "мобилопригодной".
    Этот вопрос больше "технический", чем SEO, но можно запросто лишиться трафика с мобильных устройств.

    Постскриптум
    Запарился я пересказывать вам очевидные вещи, которым вас должны были научить на курсах.

    Как собирать органический трафик - есть хороший курс 2013 года Андрея Камчеса на эту тему. Поищите, он в интернетах есть бесплатно.

    Ида, про 8-й тип сайтов - MFA с монетизацией на PPC/CPA я не упомянул. Умышленно :)
    Как и про 9-й тип сайтов для заработка на фишинге и прочих мошеннических приёмах.
    Ответ написан
    1 комментарий
  • Из textarea перевести массив с новой строки и записать в mysql все?

    @granty
    $new_coupon->code = $this->request->post('new_code', 'string');
    $arr =  preg_split("|[\r\n]|s", $new_coupon->code, -1, PREG_SPLIT_NO_EMPTY); // Все и непустые

    далее в цикле строки из $arr заносить в БД.
    Ответ написан
    Комментировать
  • Как убрать символ?

    @granty
    В PHP для этого предусмотрена функция stripslashes().
    Ответ написан
    Комментировать
  • Как узнать время загрузки страницы?

    @granty
    таким образом что бы у него приходило уведомление об этом
    у него, или от него?
    Время загрузки у конкретного пользователя будет зависеть от "толщины" его Интернета и сколько закладок он одновременно открыл в браузере. И насколько загружен его комп, может он биткойны майнит параллельно.

    И определитесь, что конкретно вы имеете в виду под "временем загрузки страницы".
    В статье на Хабре как измерить время открытия страницы рассмотрены аспекты того, когда можно считать, что страница загружена.
    Ответ написан
    Комментировать
  • Действительно ли код индусов так плох?

    @granty
    1. Я не знаю, кого вы называете "индусами", но если жителей Индии, то:
    - Индия запустила в космос сразу 104 спутника, установив мировой рекорд.
    - Индия запустила спутник RISAT-2B, такую систему радиолокационной разведки имеют только США, КНР и Япония».
    И софт для своей космической отрасли "индусы" пишут сами. В итоге: Индия - полноценная космическая держава, РФ - уже нет.

    2. Почему вы решили, что пишете код лучше "индусов"? Каковы критерии сравнения? Microsoift недавно открыла код Калькулятора Windows, народ уже подсчитал в нём баги.

    PS: Пока вы начёсываете тут своё ЧСВ, "индусы" вас уделывают по всем фронтам.
    Ответ написан
    1 комментарий
  • Права пользователь?

    @granty
    1). Решение - правильное для небольшого проекта.

    2). Вы же авторизуете пользователя, и именно по таблице users. И наверняка авторизацию храните в сессии. Добавьте в сессию поле is_admin и проверяйте его на входе в админ панель.
    Надо:
    - убрать ненужные пункты меню
    - проверять is_admin в скриптах из этих убранных пунктов меню. Ибо ссылку на них можно ввести и руками.

    PS: По уму надо делать списки скриптов, и привязывать привилегии пользователей к разрешенным им скриптам. И в начале всех скриптов проверять привилегии.
    Ответ написан
    Комментировать
  • Как называется такой сервис для сайта?

    @granty
    Любите лазить по интернету, залогиненным в аккаунты соцсетей?

    Это называется Clickjacking. Сайт проверяет, что вы залогинены в соцсети, и может, например, узнать адрес вашей страницы в VK и емайл.

    Уязвимости выше закрыли под давлением общественности, но постоянно находят новые. И я вполне допускаю слив базы vk.com, тогда будет доступен и номер телефона.

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

    @granty
    Откуда был загружен iframe никак не узнать (узнать-то можно, но в вашем случае это не поможет).

    1. яваскрипт не сработает, тк политика «Одинакового источника» (Same Origin Policy) запрещает доступ из ифрейма к window.top.location.href, если они имеют разные происхождения (грубо говоря - разные домены).
    Проверить window.top != window.self браузер даёт, а доступ к фактическому url из window.top - нет.

    2. на сервере проверять переменную $_SERVER['HTTP_REFERER'] (кто запросил загрузку страницы) смысла тоже нет - если у ифрейма установлен атрибут referrerpolicy:
    <iframe referrerpolicy='no-referrer'>
    реферер не будет прислан (будет, но только в IE/Edge и Safari_IOS).


    Но сделать то, что вы хотите - можно легко. На странице надо издать HTTP-заголовок CSP с директивой frame-ancestors:
    header( "Content-Security-Policy: frame-ancestors https://ваш_сайт.ru http://ваш_сайт.ru https://www.facebook.com https://facebook.com https://www.google.com https://google.com;" );

    это разрешит открывать эту страницу в ифрейме с собственного домена ваш_сайт.ru(без поддоменов!) по http:/https:.
    И сайтам facebook.com и google.com с www или без (но только если фэйсбук/гугль загружены по https: - а их и невозможно загрузить по http:).

    PS: если ваш сайт доступен и по www - добавьте в "волшебную" строку:
    https://www.ваш_сайт.ru http://www.ваш_сайт.ru
    Ответ написан
    Комментировать
  • Как устроены сайты с поиском времени в опр.городе?

    @granty
    Была уже тема Существует ли API времени?.
    Могут добавить (сам не пользовался):
    - https://worldtimeapi.org/
    - Dater, коды есть на гитхабе

    Лучше избегать API сервисов, которые не обновляются - сейчас модно отменять переход на зимнее/летнее время. За всеми странами надо постоянно следить.

    Если нужны виджеты/информеры на сайт
    - https://yandex.ru/time/
    - https://time.is/widgets
    Ответ написан
    5 комментариев
  • Использовать ли буксы/ботов в SEO?

    @granty
    То, что поведенческие факторы работают в Яндексе, косвенно свидетельствует топик на Серче бан Яндекса на 6 месяцев за накрутку поведенческих.

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

    Есть интересная статья 2014 Как я «крутил» поведенческие факторы, там видно насколько сложно всё сделать правильно. Особенно, когда не знаешь, что надо делать - у поисковиков-то накоплена полная статистика поведения реальных пользователей.

    Ну, и пробежаться по топу - там много полезного можно найти.

    PS: Имхо, накручивать поведенческие факторы, не зная что это такое - глупо. А у молодого сайта с низкой посещаемостью - глупо в двойне (они у него просто не работают, ибо у ПС нет статистики).

    SEO-парадокс

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

    В СЕО - вообще много мифов, поскольку технически прощупать принципы ранжирования поисковых систем сейчас уже невозможно. Но всегда найдутся желающие заработать на "доверчивых верующих", а потом объяснить, почему конкретно вам не получилось выйти в ТОП.
    Ответ написан
    1 комментарий
  • Как правильно экранировать символы в SQL запросы, если нужно отправить HTML-код?

    @granty
    Никита Гуриев, сделайте
    $sql = "INSERT INTO `ваша_таблица`  data='".mysql_real_escape_string($data)."' WHERE ваше условие вставки";

    всё должно вставиться. Имя поля и имя таблицы поставьте ваши, $data из каммента Александра выше(полученные через Heredoc).

    Без Heredoc у вас не работало, потому, что вы строку брали в двойные кавычки ", и внутри неё использовали " без экранирования в:
    "src": '$NewFileDir',
    и переносы строк внутри " " могли отрабатываться неправильно.


    Есть железобетонный вариант вставить всё что угодно (если размера поля БД хватит):
    $sql = "INSERT INTO `ваша_таблица`  data='".base64_encode( gzcompress($data) )."'";

    а когда достаёте из БД - надо распаковать обратно:
    $data = gzuncompress( base64_decode( $row['data' ] ) );

    Из минусов:
    - доп нагрузка на запаковку-распаковку, но для вашей строки это ерунда. base64_encode() увеличивает размер данных примерно в 1.5 раза, но zip жмёт сильнее.

    Из плюсов:
    - SQL-инъекции отсутствуют как класс
    - ничего не надо экранировать.
    - кодировка данных - по барабану, вставится даже UTF8-данные в таблицу cp1251. Главное, потом их отдать в правильной кодировке (когда вытащите из таблицы и будете отправлять в браузер)
    Ответ написан
    Комментировать
  • Можно однозначно определить, что пользователь является владельцем организации?

    @granty
    Стандартная проверка - выписка из ЕГРЮЛ/ЕГРИП не страше 3-масяцев + копия свидетельства о регистрации юрлица.

    Если у организации есть сайт - пусть регистрируются с почты в их официальном домене.

    UPD: В Яндекс.Справочнике используется подтверждение прав владения организацией по телефону. Они требуют, чтобы официальный номер телефона был на сайте фирмы или в её группе в соцсетях.
    На код на телефон присылается голосом (на мобильные можно по СМС).

    Вопрос "уполнамачивал" ли директор конкретную персону - это уже внутренние разборки внутри фирмы и соблюдения должностных инструкций.

    При регистрации на сервисе требовать указать ФИО, ОГРН/ОГРНИП и страницу сайта(группу в соцсетях) где указаны номера телефонов фирмы. ОГРН/ОГРНИП пробиваются онлайн на сайте налоговой (что фирма не ликвидирована).

    И в договоре оферты изложить процедуру разрешения конфликтов при случаях регистрации под именем чужой фирмы.
    Ответ написан