Web Мастерская
PHP: Как разделить строку в массив
В PHP строки можно разделить на элементы массива различными методами. Рассмотрим самые распространенные способы разделения строк:
Функция explode() используется для разделения строки на части по заданному разделителю:
Результат:
Регулярное выражение может использоваться для более сложных случаев разделения:
Результат:
Эта функция полезна для CSV-подобных строк, разделенных запятыми или табуляциями:
Результат:
...
Функция explode()
Функция explode() используется для разделения строки на части по заданному разделителю:
$string = "apple,banana,cherry";
$array = explode(",", $string);
print_r($array);Результат:
Array(
[0] => apple
[1] => banana
[2] => cherry
)Функция preg_split()
Регулярное выражение может использоваться для более сложных случаев разделения:
$string = "apple-banana-cherry";
$array = preg_split("/-/", $string);
print_r($array);Результат:
Array(
[0] => apple
[1] => banana
[2] => cherry
)Функция str_getcsv()
Эта функция полезна для CSV-подобных строк, разделенных запятыми или табуляциями:
$string = "apple,banana,\"green, grape\",cherry";
$array = str_getcsv($string);
print_r($array);Результат:
Array(
[0] => apple
[1] => banana
[2] => green, grape
- Жалоба
Content-Security-Policy "img-src 'self'"
Директива
Однако такая политика может помешать правильной работе механизма перенаправления изображений на скрипт, поскольку прямое обращение к изображению становится невозможным.
Варианты решения
Content-Security-Policy с img-src 'self', ограничивает источники, откуда браузер может загружать изображения. Она разрешает загрузку изображений только с текущего домена и запрещает использование любых сторонних ресурсов.Однако такая политика может помешать правильной работе механизма перенаправления изображений на скрипт, поскольку прямое обращение к изображению становится невозможным.
Варианты решения
- Разрешить загрузку изображений с собственного домена и динамически генерируемых страниц:
Вместо строгого ограничения 'self', можно разрешить загрузку изображений с конкретного маршрута, где расположен твой скрипт.add_header Content-Security-Policy "img-src 'self' data: blob:";
Илиadd_header Content-Security-Policy "img-src 'self' http://yourdomain.com"; - Использовать CSP уровня "unsafe-inline":
Если ты доверяешь своему контенту и источникам, можно временно ослабить политику:add_header Content-Security-Policy "img-src *";
Но это снижает безопасность,
Запрет размещения своих картинок на сторонних сайтах (Hotlinking)
Hotlinking (хотлинкинг) — это практика, при которой внешние сайты напрямую ссылаются на изображения или другие медиа-ресурсы, расположенные на другом сайте, без загрузки этих ресурсов на собственный сервер. Таким образом, владелец исходного ресурса вынужден тратить дополнительные ресурсы своего сервера (пропускную способность и вычислительные мощности) на обслуживание чужих сайтов.
Использование заголовка Referer
Самый распространённый метод заключается в проверке заголовка Referer, отправляемого браузером. Если запрос поступает с другого домена, сервер отклоняет этот запрос.
Пример конфигурации для Nginx:
...
Проблема хотлинкинга
- Увеличенная нагрузка на сервер владельца оригинального ресурса.
- Нарушение авторских прав и интеллектуальной собственности.
- Потеря контроля над контентом, включая качество и внешний вид изображений.
Способы борьбы с хотлинком
Использование заголовка Referer
Самый распространённый метод заключается в проверке заголовка Referer, отправляемого браузером. Если запрос поступает с другого домена, сервер отклоняет этот запрос.
Пример конфигурации для Nginx:
location ~* \.(jpg|jpeg|gif|png|bmp|ico|webp)$ {
valid_referers none blocked server_names ~\.google\. ~\.yandex\.;
ifNginx: Strict-Transport-Security
Заголовок
Когда браузер получает заголовок HSTS от сервера, он запоминает, что этот сайт должен всегда открываться через HTTPS. В течение указанного времени (например, 1 год) браузер будет автоматически перенаправлять все запросы к этому сайту на HTTPS, даже если пользователь вводит HTTP-адрес.
Формат заголовка HSTS:
Strict-Transport-Security (HSTS) — это механизм безопасности, который позволяет веб-сайтам объявить браузерам, что они должны взаимодействовать только через HTTPS. Это помогает предотвратить атаки, такие как downgrade-атаки, когда злоумышленник пытается заставить пользователя использовать небезопасное HTTP-соединение.Как работает HSTS
Когда браузер получает заголовок HSTS от сервера, он запоминает, что этот сайт должен всегда открываться через HTTPS. В течение указанного времени (например, 1 год) браузер будет автоматически перенаправлять все запросы к этому сайту на HTTPS, даже если пользователь вводит HTTP-адрес.
Формат заголовка HSTS:
Strict-Transport-Security: max-age=<seconds>; includeSubDomains; preload;max-age: Указывает, как долго браузер должен помнить, что сайт доступен только по HTTPS (в секундах).includeSubDomains: Указывает, что HSTS применяется ко всем поддоменам сайта.preload: Указывает, что сайт участвует в программе preload HSTS, что позволяет
Nginx: Играет ли роль место блока location в конфигурации?
Да, расположение блока
Пример конфигурации:
...
location в конфигурационном файле Nginx играет важную роль. Блоки location обрабатываются в определенном порядке, и их порядок может влиять на то, как Nginx обрабатывает запросы.Порядок обработки блоков location
- Префиксные блоки: Сначала обрабатываются блоки location с префиксами (например,
location /file/). Nginx выбирает блок с самым длинным совпадающим префиксом. - Регулярные выражения: Если ни один префиксный блок не подходит, Nginx проверяет блоки с регулярными выражениями (например,
location ~* \.php$). Эти блоки проверяются в порядке их появления в конфигурационном файле. - Блок
location /: Если ни один из предыдущих блоков не подходит, используется блокlocation /, который является "универсальным" блоком для всех запросов.
Пример конфигурации:
server {
server_name example.com;
root /var/www/html;
location /file/ {
rewrite ^/file/(.*)$ /access.php?file=$1 last;
}
location ~* \.php$ {
include