• Как заблокировать все сайты кроме нескольких нужных для работы windows 10?

    @granty
    Dmitry Tallmange, для меня, например, неожиданность - в наличии exceptions list. Блокировка по чёрным спискам в hosts неудобна, поскольку весь интернет туда не запихать.
  • Насколько оправдано хранить информацию о файлах в базе данных?

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

    FanatPHP поднял лёгкий холливар на тему бритвы Оккама - стоит ли городить избыточное решение без явной необходимости. Поэтому вопрос из практической плоскости перетёк в теоретическую.

    Поскольку страницы генерируются динамически, какая-то привязка картинок к БД - должна быть.
  • Насколько оправдано хранить информацию о файлах в базе данных?

    @granty
    Вячеслав Шевченко, да, вопрос хранения в БД самих файлов "зацепили" попутно, и копнули тему чуть глубже.

    Мы пытаемся аргументировать все "за" и "против", чтобы вы всё взвесили и приняли решение с учётом вашей конкретики. Однозначного ответа на ваш вопрос - нет, дьявол - он всегда скрывается в деталях.
  • Как обойти контент-фильтр?

    @granty
    В интернетах пишут, что в образовательные учреждения периодически приходят "тетёньки" из прокуратуры и вводят в поиск всякие запрещённые слова для проверки этого контент-фильтра. Смотрят историю браузера, и тп.
    По результатам выписывают протоколы и предписания.

    Если вы не вмешивались в работу "чёрной коробочки", претензии будут не к вам, а к Ростелекому.
    Это гарантирует, что вы не исчезнете из нашего сообщества на 5-6 лет. И будет вдвойне неприятно осознавать, что мы своими "советами" косвенно могли поспособствовать этому.
  • Насколько оправдано хранить информацию о файлах в базе данных?

    @granty
    Я пока в описании проблемы не увидел ни одной причины хранить инфу о файлах в БД.
    Любое действие должно вызываться насущной необходимостью, а не абстрактными рассуждениями.

    Жестко, но "совершенно в дырочку".
    - файловая система это по сути та же БД, и работает быстрее, и запросы кэширует. Проблемы с дублями имён решаемы.
    - нет проблем с рассинхронизацией (когда файла нет, а запись в БД есть, и наоборот)

    В 99% случаев файлы лучше, т.к. к ним есть прямой и очевидный доступ без всяких баз, а база в любом случае прослойка. Единственное преимущество хранения файлов в БД - это конкурентный доступ (одновременный доступ на изменение к одной и той же записи).

    spoiler
    Как вариант: при загрузке файла сразу же делается его превьюшки с преффиксами prv_ID_ИМЯ.jpg, 800х600_ID_ИМЯ.jpg и тп. ID записи в БД является частью имени файла, поэтому легко найти все файлы к записи.

    На одном проекте я так храню все картинки, XLS/DOC/PDF-файлы, иллюстрационные JS-скрипты, вообще пофиг что, главное чтобы ID записи в БД "светился" в имени файла. А в админке сразу видно все файлы, имеющие отношение к этой записи, и можно вставить на редактируемую страницу. Админка сам по расширению понимает картинка это, скрипт или файл для скачивания, и делает соответствующий тег (< img>, < a href> или < pre>).

    На фотогалерее пришлось кое-какую инфу о файлах хранить в БД, чтобы ловить дубли фото по их реальным именам на фотоаппарате. И гео-координаты/страны/города/теги привязывать к фоткам.


    Главное - не наплодить миллион файлов в одной папке - их потом стирать можно неделю :)

    spoiler
    А хранить сами файлы в БД - это вообще моветон! Их отдавать приходится скриптом на php, который висит и занимает кучу процессорного времени.
    Для любителей похолливарить на Хабре есть тема Стоит ли хранить файлы в БД MySQL?, там в камментах перетёрли все + и -.
  • Какие есть ресурсы по выполнению тестовых заданий на поиск уязвимостей?

    @granty
    Задачки по взлому: https://www.hackthebox.eu/ Что бы зарегистрироваться, тоже нужно хакнуть регистрацию ;)
    Креативно! Сразу вспомнилось объявление:
    На высокооплачиваемую работу требуется телепат. Куда обращаться - сами знаете.

    papercut15, для поиска уязвимостей есть серьёзные задачки:
    - Mozilla набирает волонтеров для поиска уязвимостей...
    - Вознаграждаем за уязвимости четвёртый год подряд
    - Project Zero от Google начинает свой собственный к... (осторожно - английский!)
    Там и вознаграждение выплачивается нехилое.

    Вы же не скрипт-кидди, чтобы ломать по готовым рецептам то, что уже 1000 раз взломано до вас .
  • Как сделать редирект с данными через header?

    @granty
    Да, логика извращённая. Возможно автор топика хочет вставить промежуточную обработку данных формы, не сильно ломая архитектуру движка сайта. А, может - ищет пути перенаправления данных с чужого 1.php на свой скрипт 2.php.

    Я тут недавно обнаружил, что кроме 301/302 редиректа, есть ещё редиректы с кодом 307 и 308. Они перенаправляет все присланные данные с гарантированным сохранением метода и тела запроса. Может, ТС это надо...
  • При отправлении комента ч/з header("Location: я бы хотел оказатся не на начале страницы, а в месте где я отправлял этот коммент. Как это сделать?

    @granty
    ВладиМИР (о__О), так и сделайте
    header("Location: /det.php#{$idfilm}");
    exit;

    Страница пререзагрузится, и браузер по хэшу #якорь прокрутит её на элемент с id="якорь". textarea с id=$idfilm у вас там уже есть:
    < textarea type="text" id="'.$idfilm.'" class="mess_fil7" name="mess_name" placeholder="Ваш комментарий">

    А по header("Location: /det.php#{$id}"); страница должна прокрутиться на комментарий с id=$id, если на ней есть HTML-элемент с таким id.
    $id, как я понимаю из структуры вашей БД, это id конкретного комментария.

    В Location лучше использовать абсолютный url, вот ссылка на RFC 7231, как раз с якорем - можете посмотреть как прокручивается страница на элемент с id='section-7.1.2' по хэшу #section-7.1.2 в url.
    А вот перевод этой секции RFC:
    spoiler
    Спецификация HTTP/1.1 требует указывать абсолютный URI в качестве аргумента » Location:, включающий схему, имя хоста и абсолютный путь, хотя некоторые клиенты способны принимать и относительные URI.
  • Как скрыть формат страницы в url, а в php нет?

    @granty
    rinaz22,
    RewriteCond %{REQUEST_URI} !^(/upload/|/images/|/Pics/)
    это такая же директива mod rewrite, как ваша RewriteCond %{REQUEST_FILENAME} !-f, но с регулярным выражением. ! = отрицание, ^ - начало строки, через | идёт перечисление по или.
    То есть REQUEST_URI не должен начинаться с /upload/ или /images/ или /Pics/ - таким образом исключаются папки с картинками.

    В
    RewriteCond %{REQUEST_URI} !\.(ico|gif|jpg|jpeg|png|svg)$ [NC]
    $ означает конец строки, а \. - через \ надо экранировать . (она в регулярках имеет спецзначение).
    То есть, REQUEST_URI не должен заканчиваться на .ico или .jpeg, и тд.
    [NC] - NoCase, то есть сравнивать без учёта регистра.
  • Как скрыть формат страницы в url, а в php нет?

    @granty
    rinaz22, это ваш
    RewriteRule .* index.php
    только записанный в явном виде:
    ^(.*)$ - запомнить url от начала до конца строки; оно запомнится в $1
    index.php/$1 - передать "запомненное" в $1 в index.php
    [QSA] - добавить query-string типа ?page=3 если она есть.

    Ваш RewriteRule .* index.php работает точно так же, по крайней мере на моём веб-сервере.

    а вот про htaccess не знал. Вы не знаете какую-нибудь документацию про htaccess?
    Как это не знали, вы же сами прописали в нём:
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule .* index.php

    и смогли вставить RedirectMatch 404 ^/page/.* так, что оно правильно работает и не конфликтует с другими правилами.

    надо читать не совсем про .htaccess, а про mod rewrite, который может быть включен в .htaccess. Лучшая документация про него - на Хабре. И как он хитро работает, и как включить отладочный режим, чтобы посмотреть что он делает.

    И почитать регулярные выражения (что значит абракадабра типа ^(.*)$ и $1), без них вообще никуда.
  • Не удается отправить в БД введенные на сайт данные. Как исправить?

    @granty
    kirzzzz, надеюсь, таблицу clients вы предварительно создали?

    Для вашего случая надо сделать запрос:
    $query = "CREATE TABLE IF NOT EXISTS clients ("
      ."  ID	INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY"
      .", Name	VARCHAR(16)"
      .", Surename	VARCHAR(32)"
      .", tel	VARCHAR(15) UNIQUE"  // Номер телефона - уникален
      .", email	VARCHAR(32) UNIQUE"  // Емайл - уникален
      ." )"
      ." COLLATE='utf8_general_ci'"
      ." ENGINE=MyISAM DEFAULT CHARSET=utf8";
    mysql_query($query);

    который создаст таблицу в БД, если её ещё нет;

    А потом - включаете вывод отладочной информации - вставляете в rec.php:
    echo '<pre>'.print_r($_REQUEST, true).'</pre>'; выведет в браузер все присланные поля из формы;

    echo mysql_error(); покажет ошибки запроса, если они есть.
  • Не удается отправить в БД введенные на сайт данные. Как исправить?

    @granty
    kirzzzz, обязательно почитайте про sql-инъекции.

    Надо экранировать спецсимволы:
    $_client_name = mysql_real_escape_string($client_name);
    и только потом использовать переменную в запросе:
    $insert_sql = "INSERT INTO clients (Name) VALUES('{$_client_name}')";

    или
    $insert_sql = "INSERT INTO clients Name='{$_client_name}'";

    иначе взломают ваш сайт через sql-инъекцию.
  • Как обойти контент-фильтр?

    @granty
    kardens,
    Отмечу еще, что это фильтр для образовательных учреждений (школ). Знаю, что к нему устанавливали какие-то сертификаты, а основной кабель выходит из установленного ящика с большим свичем и прочими бесперебойниками.

    так это не блокировка РКН (это я тут тупанул), а контент-фильтр Ростелекома. В 2015 году он работал на базе WebFilter Entensys.

    А свои сертификаты они ставят, чтобы мониторить https-трафик через MItM-атаку с подменой ssl-сертификатов.

    Поэтому фильтр WebFilter Entensys имеет возможность:
    «Инжектировать скрипт», позволяющая вставить необходимый код во все веб-страницы, просматриваемые пользователем перед тегом

    даже на "зашифрованные" по https.

    Для общеобразовательных учреждений они имеют право резать и VPN и всё, что угодно. И ещё это плохо тем, что у них всё логгируется, и факт обхода фильтра рано или поздно будет зафиксирован, что может иметь неприятные последствия в виде нарушения законов 139-ФЗ и 436-ФЗ.

    Может, проще использовать интернет MTS/Tele2/Beeline через свою точку доступа смартфоне?
  • Как обойти контент-фильтр?

    @granty
    kardens, конкретика - тип используемой Ростелекомом блокировки:

    1. Блокировка по DNS - блокирование не-провайдерских DNS-серверов перенаправление DNS-запросов от не-провайдерских DNS-серверов на провайдерский. А провайдерский DNS уже подделывает A-записи от DNS-сервера, блокируя запрещённые домены.

    2. блокирование по IP-адресу из реестра запрещённых

    3. блокирование с использованием DPI, но только на определённых IP и 80 порту

    4. блокирование с использованием DPI на всех IP и всех портах (самый тяжёлый случай)

    Если времени (и желания) на эксперименты нет - попробуйте VPN https://trust.zone/ru/order?p=27, на бесплатном тестовом периоде. Они утверждают, что пробивают даже китайский фаерволл, и есть маскировка VPN под обыкновенный https-трафик.
    На Tele2 и Новотелеком он точно обходит все блокировки, я проверял на себе.

    Там уже понятнее будет в каком направлении двигаться дальше.
  • Как сделать не активную ссылку на главной?

    @granty
    Дмитрий, когда будете принимать решение - имейте в виду, что "картинка в ссылке":
    <a href='/'><img src='logo.png' alt='интернет-магазин антиквариата'></a>

    эффективнее в плане SEO, если у неё прописал атрибут alt='...'. В этом случае Яндекс и Гугль используют текст из alt в качестве анкора ссылки, и будут передавать вес по этому ключу на главную страницу (только не спамьте ключами!).

    Также у картинки можно прописать атрибут title='...' - он используется в поиске по изображениям в Яндексе.
  • Как сделать не активную ссылку на главной?

    @granty
    1. На сервере:
    if ( $_SERVER['REQUEST_URI'] =='/' )
           { логотип без ссылки }
    else { логотип-ссылка }


    2. В браузере можно сделать переход на главную не ссылкой, а сделать кликабельную картинку яваскриптом (и в CSS стилях сделать ей cursor:pointer):
    <img src="/logo.png" onClick="if (window.location.pathname !='/') window.location.href='/';" style="cursor:pointer;">


    PS: Я бы не заморачивался - "убирание ссылки" ничего не даст, кроме написания ненужного кода.
  • Как быстро вытащить рандомную запись из бд?

    @granty
    viktorross, на хабре в топике Выборка произвольных записей в MySQL выяснили почему запрос с ORDER BY RAND() выполняется долго и как его можно ускорить в 12 раз.

    Посмотрите ваш запрос через EXPLAIN:
    explain select `id`,`title` from `class_ads` where `active`='1' ORDER BY RAND() limit 1

    он наверняка идёт через создание временной таблицы, полного копирования в неё исходной таблицы и сортировку: Using where; Using temporary; Using filesort, поэтому получается неприемлемо долго на больших таблицах.

    PS: Если решение выше не приемлемо, посмотрите решения хабровчан:
    Быстрый выбор случайных значений из больших таблиц...
    MySQL. Выбор случайных строк в один запрос
  • Как скрыть формат страницы в url, а в php нет?

    @granty
    rinaz22, я максимально фильтрую лишнее в самом .htaccess:
    RewriteEngine On
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    
      # Пропустить некоторые директории, в которых нет исполняемых  index.php
    RewriteCond %{REQUEST_URI} !^(/upload/|/images/|/Pics/)
    
      # Пропустить картинки:
    RewriteCond %{REQUEST_URI} !\.(ico|gif|jpg|jpeg|png|svg)$ [NC]
    
      # Пропустить некоторые файлы по расширению:
    RewriteCond %{REQUEST_URI} !\.(js|css|xml|html|txt|xls|xslx|doc|docx|pdf|txt|rar|tar|bz2)$ [NC]
    
    RewriteRule ^(.*)$ index.php/$1 [QSA]


    Можно то же самое сделать в Index.php (в самом начале, до того, как инклудятся модули) что-то вроде:
    if (preg_match('#регулярка на расширения картинок/скриптов/стилей#', $_SERVER['REQUEST_URI'])) {
      header($_SERVER['SERVER_PROTOCOL'] . " 404 Not Found");
      exit;
      }

    Поскольку запрошенный файл явно отсутствует (это проверено по !-f и !-d в .htaccess), можно смело отдавать 404 и завершать скрипт index.php.