Задать вопрос
  • Ошибка Content Security Policy?

    @granty
    У вас на тестовом сервере издаётся HTTP-заголовок или метатег Content-Security-Policy (CSP) с директивой script-src 'self' 'unsafe-eval'.
    Она разрешает загрузку скриптов только с собственного домена сайта ('self') и разрешает eval-выражения: eva(), Function(), setTimeout("string", 2000), и тп.

    Вам надо добавить хост-источник `https://az416426.vo.msecnd.net` в script-src:
    script-src 'self' 'unsafe-eval' https://az416426.vo.msecnd.net;
    , это разрешит загрузку скриптов из него.

    Если пока нет желания возиться с CSP - отключите её. Скорее всего это "проделки" Helmet 4. там она отключается просто:
    helmet({
        contentSecurityPolicy: false,
      })

    при этом остальные заголовки безопасности от Helmet продолжат работать.
    Ответ написан
  • Ошибка при запросе, как решить?

    @granty
    Вы посылаете HTTP-заголовок Content-Security-Policy: default-src 'self' или выводите в HTML-коде метатег
    <meta http-equiv="Content-Security-Policy" content="default-src 'self'">
    Поэтому CSP(Content Security Policy) разрешает вставку на страницу ресурсов (картинок/скриптов/стилей/шрифтов/аякс-запросов/видео/аудио) только с собственного домена сайта (localhost в вашем случае). Контролем этого и занимается CSP.

    Если вы не знаете что такое CSP - найдите и уберите это заголовок/метатег. Если знаете и "оно вам нужно" - добавьте в директиву default-src источник https://www.supremenewyork.com:
    default-src 'self' https://www.supremenewyork.com;

    А если делать по-уму, то ваша CSP должна выглядеть так:
    default-src 'self'; connect-src https://www.supremenewyork.com;
    Ответ написан
    Комментировать
  • Почему я получаю CORS ошибку при работе с Newsapi?

    @granty
    решить эту ошибку, учитывая, то, что я работаю только с фронтом?

    Если бы это можно было сделать на фронтенде - тогда весь CORS коту под хвост.
    не нужно описывать, что такое cors и как это работает, меня интересуют именно варианты решения проблемы.

    Раз вы знаете "как это работает" - вы знаете варианты решения проблемы кросс-доменных запросов.
    Ответ написан
    Комментировать
  • Как поменять права на X-Frame-Options?

    @granty
    Оставлю ответ для потомков, поскольку топикстартер его не дождался.
    1. SAMEORIGIN означает те же схема/хост/номер_порта. То есть на странице http://site.ru с заголовком X-Frame-Options SAMEORIGIN ифрейм по https:// загружать не разрешено. с http://www.site.ru - тоже не разрешено.

    2. В rfc7034 на заголовок X-Frame-Options была допущена неоднозначность, поэтому в случае множественной вложенности ифреймов, некоторые браузеры проверяют на SAMEORIGIN только top-level документ, другие - всю цепочку вложенности ифреймов.

    Поэтому "собака могла порыться" как в п1, так и в п2.

    Если HTTP-заголовок издан в файле .htaccess, издавать его в конфигах worpdess смысла нет, поскольку .htaccess имеет приоритет и перезапишет заголовок из PHP header().

    100% вариант разрешить ифреймы с SAMEORIGIN - указать разрешённые для ифрейминга домены в директиве frame-ancestors, которая отменяет X-Frame-Options.
    Ответ написан
    Комментировать
  • Установить cookie с другим domain?

    @granty
    В чём там проблема? Открывай ифрейм 1х1px с src= этого сервера. Скрипт сервера в ответ пусть высылает куку со своим доменом и установит в ней флаг httpOnly.
    Ответ написан
    Комментировать
  • 100% uptime c CloudFlare?

    @granty
    1. 100% нет. На бесплатном тарифе сайты бывают недоступны, при этом сам сайт отлично работает (для проверки этого я делал технический поддомен, который не проксировался через СА).

    -SLL-сертификат от CF - кастрированный, старым Хром/WinXP зайти на сайты невозможно - несовместимый протокол шифрования.
    Ставишь сертификат от letsencrypt - всё отлично и совместимо.

    В остальном - CF работает как часы.

    2. Если IP Cloudflare заблочен РКН - пишешь им, объясняешь, что это блочили не вас, и они меняют IP. Также можно создать новый аккаунт - он будет привязан к другому IP.
    Ответ написан
    Комментировать
  • Зараженное вирусом видео?

    @granty
    Как ни парадоксально на первый взгляд, но может. Не в самом видео, но загружается через видео.
    Ответ написан
    Комментировать
  • Content-Security-Policy: host-source VS 'self': в чем разница?

    @granty
    Мы заранее не знаем, с какого сайта может загружаться контент?
    Знаем, но не всегда. У сайта может быть множество поддоменов, в том числе и динамических.

    host-source VS 'self'
    Вместо 'self' браузер подставляет протокол, хост(домен) и номер порта от источника происхождения (текущего URL) страницы.
    Если у вас сайт доступен как: http://domain.com, https://domain.com, http://www.domain.com, https://www.domain.com, http://www.domain.com:8081 - 'self' всё это покроет:
    зайдёте на http://www.domain.com:8080/page.html - 'self' будет равен http://www.domain.com:8080, и тп.

    Иначе вместо 'self' вам придётся перечислять все варианты имён хостов(включая поддомены) со схемами/протоколами и номерами портов.

    почему ни host-source, ни 'self' в качестве источника не включают «подмножество» 'unsafe-inline', т.е. контент, встроенный в загружаемую страницу?
    Потому, что такой встроенный скрипт может появиться на странице без ведома вебмастера. Его может вставить вредоносный браузерный плагин, другой скрипт (например, виджет погоды), его может вставить интернет-провайдер. Такой инлайн-скрипт может появиться на странице в результате XSS-уязвимости.

    Content Security Policy от этого и защищает.
    Ответ написан
    3 комментария
  • Плагин для локализации сайта?

    @granty
    Детекция языка по IP работает не полноценно, ибо IP больше определяет местоположение посетителя (страну), чем его языковые предпочтения.
    Например, в Израиле живёт 20% русскоговорящего населения, а по IP вы им покажете сайт на иврите.
    Детекция по IP пригодна для показа регионо-ориентированной рекламы (тоже косячит на VPN-ах).

    Предпочитаемый язык(и) пользователя браузер передаёт в HTTP-заголовке Accept-Language, поскольку каждый выбирает в настройках локали браузера свой предпочитаемый язык. На Хабре на эту тему есть статья Грамотное определение языка пользователя с примером кода на PHP.
    Остальное можно нагуглить.
    Ответ написан
    Комментировать
  • Как определить положение телефона?

    @granty
    Сначала RTFM:
    Sensor APIs Concepts and Usage
    Orientation Sensor
    Generic Sensor API
    Gyroscope

    А потом залезть мобильником и посмотреть как youtube реализовал VR 360 видео - поперемещайте телефон вправо-влево и насладитесь сферическим видео (мне это понравилось).
    Но имейте ввиду, что не все мобильники имеют встроенный гироскоп (мой Samsung Galaxy J7(2016) его не имеет, а A30 - имеет).
    Ответ написан
    Комментировать
  • Как сделать отображение сайта поисковиком?

    @granty
    Яндексу не важно что под капотом движка вашего сайта. Главное - что теги <title>, <meta description> и контент страницы не создаются динамически яваскриптом (ajax-сайты Яндекс не индексирует).
    Поисковики анализируют и индексируют присланный сервером html-код страницы, а каким образом сервер её создал - никто никогда не узнает.

    "Небольшая навигация снизу" - в Яндексе это называется быстрые ссылки - там описаны условия их формирования.
    Ответ написан
    2 комментария
  • Как правильно выполнить редирект посредством HTML?

    @granty
    Исправить ошибку в URL=https:/mysyte/services - добавить второй слеш / в https://
    URL=https://mysyte/services
    Ответ написан
    7 комментариев
  • Есть ли сейчас работающие бесплатные решения для блокировки Яндекс Советника?

    @granty
    Да. Установить на сайте заголовки Content Security Policy. Ей можно заблокировать любые браузерные расширения, вмешивающиеся в контент сайта (включая Яндекс Советника).
    Ответ написан
  • Регистратор просит имена серверов DNS. но не просит IP. Откуда он узнает про IP?

    @granty
    Бруто, там всё просто.

    1. когда вы регистрируете домен, никакие NS-сервера сообщать не надо. Статус домена будет: REGISTERED, NOT DELEGATED.

    2. NS-сервер нужен если вы поднимаете на домене какой-нибудь сервис (сайт, почту и тп), то вам нужно ДЕЛЕГИРОВАТЬ его на хостинг(на IP-адрес).
    - если вы используете сторонний DNS-сервер, просто указываете его имя в панели регистратора. Никакой IP-адрес этого DNS-сервера не нужен, он просто определяется по nslookup или dig.
    - если вы используете свой DNS-сервер в том же домене, который делегируете, то нужно указать и имя DNS-сервера и его IP-адрес. Потому, что одновременно делегируется и домен, и DNS-сервер, поэтому IP-адрес DNS-сервера узнать неоткуда.

    То есть, при делегировании домена bbb.com и DNS-сервере ns.bbb.com (он находится в самом делегируемом домене) надо указать и имя и IP.

    А при делегировании домена bbb.com и DNS-сервере Cloudflare amanda.cloudflare.com достаточно указать только имя DNS-сервера. IP-адрес, где будет хоститься домен, прописывается уже на этом сервере amanda.cloudflare.com.

    PS: Количество DNS серверов при делегации домена (и должны ли они находиться в разных подсетях класса C) определяется регламентом на зону. Он разный для ru/com/org и тп.
    Ответ написан
    1 комментарий
  • Как обойти блокировку автовоспроизведения?

    @granty
    vimeo и youtube знают волшебное слово "Feature Policy".

    1. Если посмотрите API vimeo - увидите там параметр autoplay. Потом сравните вызов API c параметром autoplay и без такового. И увидите, что добавляется ?autoplay=1 в <iframe src=>, чтобы их скрипт показа видео автоматически запустил его воспроизведение (кликнул по кнопке Start).
    Но, как вы заметили, браузеры могут блокировать автоматическое воспроизведение медиаконтента. Поэтому см п 2 ниже:

    2. Обратите внимание на атрибут allow="autoplay; fullscreen" у ифрейма, присылаемого в API п. 1. Это и есть "Feature Policy" (Политика возможностей), установленная через атрибут тега (её ещё можно издавать через HTTP-заголовок).
    autoplay; означает autoplay *; - то есть, браузеры, поддерживающие Feature Policy, разрешат автовопроизведение видео с любых (*) чужих доменов.
    Укажете там autoplay https://player.vimeo.com; - автовоспроизведение будет разрешено только для плеера vimeo.
    Ответ написан
    Комментировать
  • Насколько безопасно использование сессий в php?

    @granty
    Сессия - это Кука с именем PHPSESSID (по умолчанию, его можно изменить) и значением вида 8jae35cosacp2f5qv6g2uqe6i7. Все данные сессии (массив $_SESSION) хранятся на стороне сервера в файле с именем 8jae35cosacp2f5qv6g2uqe6i7 в формате JSON (можно хранить и в БД).
    То есть, вам надо не дописывать 1, а угадывать это имя, что нереально.

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

    Куку можно перехватить во время передачи по сети, для защиты от этого есть механизмы:

    - установить заголовок HSTS, это заставит браузер работать только по HTTPS, те Кука будет зашифрована при передаче по сети.

    - в самой сессии можно хранить IP адрес(привязка сессии к IP). Тогда даже с правильной Кукой не залогиниться, поскольку не совпадет IP (который хранится в $_SESSION на стороне сервера). Неудобно если провайдер меняет IP при каждом переподключении.

    - можно в сессии хранить User Agent (все равно Кука - она только для этого браузера). Но при автоматическим апдейте браузера придётся авторизоваться заново, и у кого хватило ума перехватить Куку - перехватит и имя User Agent-а.

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

    - при каждой авторизации по Куке, и через каждые ## секунд можно(и нужно) делать session_regenerate_id (меняется 8jae35cosacp2f5qv6g2uqe6i7 на другое), там по ссылке есть пример как это сделать прямо внутри сессии. То есть, угнанная Кука быстро перестаёт работать.

    - можно делать "сессионную" Куку (не указывать её время жизни). Такая Кука живёт до закрытия браузера, но после закрытия браузера придётся заново вводить логин/пароль

    Можно добавить своей безопасности - например отправлять email пользователю при каждой авторизации по Куке, если не было активности Пользователя более 12 часов.

    PS: Если пользоваться сессиями правильно - они достаточно безопасны, практически вся авторизация в интернетах построена на них.
    Ответ написан
    Комментировать
  • Как перенаправить пользователя на страницу 404 с помощью header?

    @granty
    В вашем файле post.php на входе вы имеете два параметра: $_GET['id'] и $_GET['language']
    По $_GET['id'] вы лезете в БД и формируете статью для показа. Вам надо в верхней части post.php дополнительно сформировать ЧПУ-шную часть URL этой статьи (для этого и используется ваша seo_replace()), и сравнить его с $_GET['language']. Если они совпадают - отдаёте статью, если нет - делаете одно из 2-х:
    a) Redirect 301 на правильный $URL, вы его уже сгенерили для сверки с $_GET['language']:
    header($_SERVER["SERVER_PROTOCOL"].' 301 Moved Permanently');
    header("Location: $URL");
    exit;

    или

    б) Отдаёте 404 страницу:
    header($_SERVER["SERVER_PROTOCOL"].' 404 Not Found'); exit;


    Что лучше сделать - решайте сами, ибо такое псевдо-ЧПУ это всегда гемор.
    - Недруги могут ставить на ваш сайт ссылки вида /post/4/erotika_bez_sms и по id=4 страница будет показываться. При редиректе такие ссылки приклеятся на статью, а по 404 - нет.
    - при простановке внешних ссылок может обрезаться часть ссылки, но по Redirect 301 вы её подберёте, если сохранилась часть /post/4/.

    в догонку

    У вас в функции seo_replace() ошибка - используется непроинициированная переменная $finalna_nazwa (там должна стоять $final_name).
    Кстати, странное название $finalna_nazwa. Пани разумеет по-польску?
    Ответ написан
    Комментировать
  • Как и где в ЕС можно открыть виртуальную карточку?

    @granty
    Revolut есть виртуалки. Нужен физический адрес в Европе.
    Ответ написан
  • Как сделать смену стилей CSS в зависимости от времени суток с помощью JS?

    @granty
    Менять CSS сайта по времени суток не имеет никакой практической пользы, эта устаревшая мулька использовалась 12 лет назад.
    Сейчас можно делать смену CSS по датчику внешнего освещения смартфона (Ambient light sensor), чтобы при низкой освещённости давать более светлый дизайн (или, наоборот, более тёмный, чтобы не слепил глаза).

    Но если так хочется менять CSS по времени суток - этот запрос в Яндексе полностью даст ответ на ваш вопрос.
    Ответ написан
    Комментировать
  • Как определяют номер телефона у посетителей сайта?

    @granty
    Куки исключены, браузер не сохраняет их и не хранит историю.

    1. Про evercookie слышали? А про Web Fingerprint?
    На хакере перечислена масса способов хранить ID на вашем компе без использования Куков и кэша, а технология Web Fingerprint позволяет хранить цифровой отпечаток компа, браузера на сервере банка: Фингерпринтинг конкретного ПК с точностью 99,24%, не спасает даже смена браузера.

    Если вы - клиент банка и заходили в его интернет-банкинг, он легко может вас опознать при использовании того же браузера и того же компа.
    А если у вас на мобиле установлено приложение интернет-банкинга - вы вообще под колпаком :)

    2. Если вы лазите по инету залогиненым в Вконтакте/Яндексе, то через backdoors в их API можно определить ваш профиль и все ваши данные.
    Сайт Соцфишинг работает на этом принципе.
    Сам банк тоже может использовать соцфишинг и ставить невидимый ифрейм на своё меню, и при клике вы автоматически авторизуетесь через аккаунт, например, Вконтакте. Зная ваш ID на Вконтакте, ваш телефон легко узнаётся, их базы регулярно сливаются и продаются

    PS: Узнать как конкретно вас "слил" и каким образом - невозможно без исследования конкретной ситуации.

    факультатив

    Всё вышеперечисленное - детский лепет по сравнению с тем, какие возможности имеет Google (и, частично, Яндекс с Apple).
    У всех дома стоит точка WiFi, к которой коннектится ваш комп и мобильник с Андроид. Через мобильник Гугл знает все номера телефонов, которые подключаются к этой точке доступа (и все аккаунты соцсетей в которые вы логинились с мобильника). Поэтому когда вы лезете Хромом с компа через эту же точку доступа - Гугль уже знает, что это вы (или один из ваших домочадцев). По GPS на мобильнике он знает даже адрес вашего проживания с точностью до подъезда.
    Так что мы все давно уже добровольно "чипованы", чего удивляться что о нас всё известно.
    Ответ написан
    Комментировать