<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Неофициальный форум DLNA Home Media Server &mdash; Cloudflare WAF (Web Application Firewall) и возможность из php пройти]]></title>
		<link>https://hms.lostcut.net/viewtopic.php?id=907</link>
		<atom:link href="https://hms.lostcut.net/extern.php?action=feed&amp;tid=907&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «Cloudflare WAF (Web Application Firewall) и возможность из php пройти».]]></description>
		<lastBuildDate>Fri, 02 Oct 2026 10:04:48 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Cloudflare WAF (Web Application Firewall) и возможность из php пройти]]></title>
			<link>https://hms.lostcut.net/viewtopic.php?pid=18525#p18525</link>
			<description><![CDATA[<p>Как работает WAF&nbsp; Cloudflare ?&nbsp; WAF проверяет TLS-отпечаток на этапе рукопожатия. Стандартный cURL в PHP имеет отпечаток, который не совпадает ни с одним браузером. Поэтому сервер, даже не посмотрев на ваши заголовки и cookie, отбрасывает соединение с ошибкой 403 Forbidden.&nbsp; TLS-отпечаток (так называемый JA3 fingerprint). Браузер и cURL устанавливают TLS-соединение по-разному (разный набор шифров, расширений, версия TLS). Защита видит, что «отпечаток» не совпадает с заявленным User-Agent, и блокирует запрос. Кстати mail.ru теперь тоже так работает.</p><p>Решить проблему можно за деньги = Proxy-провайдеры: Некоторые сервисы (например, NikaProxy) продают &quot;TLS-Pro&quot; тарифы, где они подменяют ваш TLS-отпечаток на браузерный, чтобы запросы не блокировались .<br />Инструменты проверки: Существуют утилиты (например, ja3-fingerprint-checker), которые показывают, как ваш HTTP-клиент выглядит со стороны защитных систем .</p><p>Решить можно бесплатно, обновлением софта на своем сервере.<br />1. Использование curl-impersonate. Это специальная модификация cURL, которая может полностью имитировать рукопожатие Chrome, Firefox, Edge и Safari. Нужно&nbsp; установить curl-impersonate на сервер или использовать альтернативную библиотеку для PHP.</p><p>Скачать сборку curl-impersonate можно <a href="https://github.com/lexiforest/curl-impersonate/releases">https://github.com/lexiforest/curl-impersonate/releases</a> Например для windows ищем curl-impersonate-v2.2.3.x86_64-win32.tar.gz В этом архиве curl-impersonate.exe и куча батников, которые дадут разные, реальные браузеры например curl_chrome120.bat или curl_chrome146.bat . Все это размещаем в папке C:\curl-impersonate\ <br />Далее ставим&nbsp; &nbsp;Composer (нужен для установки PHP-обёртки). Скачайте Composer-Setup.exe с официального сайта getcomposer.org. Запустите установщик, она найдет сам php. После установки проверить composer -V, должна отобразиться версия Composer и путь к PHP. Обёртка kelvinzer0/curl-impersonate-php — это простая библиотека, которая запускает скачанный .exe через exec() и возвращает ответ . Когда все настроено, используйте обёртку для чтения сайта например такой функцией<br /></p><div class="codebox"><pre><code>use CurlImpersonate\CurlImpersonate;

function fetch_embed_via_impersonate($url, $referer, $cookies = &#039;&#039;) {
    $curl = new CurlImpersonate();

    $curl-&gt;setopt(CurlImpersonate::OPT_ENGINE, &#039;C:\\curl-impersonate\\curl_chrome116.exe&#039;);
    $curl-&gt;setopt(CurlImpersonate::OPT_URL, $url);
    $curl-&gt;setopt(CurlImpersonate::OPT_METHOD, &#039;GET&#039;);
    $curl-&gt;setopt(CurlImpersonate::OPT_TIMEOUT, 25);

    // Заголовки — как в вашем текущем коде
    $headers = [
        &#039;accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8&#039;,
        &#039;accept-language: ru,ru-RU;q=0.9,en-US;q=0.8,en;q=0.7&#039;,
        &#039;referer: &#039; . $referer,
        &#039;sec-ch-ua: &quot;Chromium&quot;;v=&quot;116&quot;, &quot;Not A(Brand&quot;;v=&quot;99&quot;&#039;,
        &#039;sec-ch-ua-mobile: ?0&#039;,
        &#039;sec-ch-ua-platform: &quot;Windows&quot;&#039;,
        &#039;sec-fetch-dest: iframe&#039;,
        &#039;sec-fetch-mode: navigate&#039;,
        &#039;sec-fetch-site: cross-site&#039;,
        &#039;upgrade-insecure-requests: 1&#039;,
        &#039;user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36&#039;,
    ];

    foreach ($headers as $h) {
        $curl-&gt;setopt(CurlImpersonate::OPT_HEADER, $h); // или через массив, см. документацию
    }

    $html = $curl-&gt;execStandard();

    // Извлеките cookie из ответа, если нужно, или используйте опцию COOKIEJAR
    return $html;
}</code></pre></div><p>.&nbsp; <br />обёртка не ведёт cookie-jar автоматически.&nbsp; Вам нужно либо передавать cookie вручную (как заголовок Cookie:), либо использовать опции OPT_COOKIEJAR/OPT_COOKIEFILE, если они поддерживаются версией обёртки </p><p>Есть более современная обёртка farhaanaliii/curl-cffi, которая использует PHP FFI и загружает libcurl-impersonate.dll напрямую, без запуска .exe . Она требует PHP 8.1+ и включённого расширения ffi. Этот пакет распространяется через Composer, как и любой другой PHP-пакет. На странице Packagist указаны его требования и версия <a href="https://packagist.org/packages/farhaanaliii/curl-cffi">https://packagist.org/packages/farhaanaliii/curl-cffi</a> В папке вашего проекта выполните команду:bash<br />composer require farhaanaliii/curl-cffi</p><p>Следует ожидать, что в очередной версии php этот механизм будет встроен и защита сайтов WAF&nbsp; полностью потеряет актуальность.</p>]]></description>
			<author><![CDATA[null@example.com (smsbox3)]]></author>
			<pubDate>Fri, 02 Oct 2026 10:04:48 +0000</pubDate>
			<guid>https://hms.lostcut.net/viewtopic.php?pid=18525#p18525</guid>
		</item>
	</channel>
</rss>
