Задать вопрос
  • Как организовать защиту от парсинга сайта?

    @starosta6123
    1. Сайт изначально предназначен для публикации, то есть он открыт.
    2. Если вы не хотите чтобы информация была открыта, не публикуйте.

    Из 1 пункта следует, что нет достаточных средств для защиты от парсеров.
    Вопрос только в том, на сколько вы готовы и можете усложнить жизнь для парсеров.
    А нужно ли это? Может вы - "неуловимый Джо"?
    Все что может прочитать и распознать человек (а ведь именно для людей и делается сайт?) может быть воспроизведено. В части, где парсинг может быть автоматизирован, он будет автоматизирован.
    Сейчас существуют мощные парсеры Яндекса и Гугла. Если они ваш сайт не смогут разобрать, то и в индексе его не будет, значит полезная информация не дойдет до конечного пользователя.
    А тот, кто захочет, ее скопирует, если информация очень нужна. Если даже вы представите в виде мозаики из картинок и кусков, даже если зашифруете, но информация на экране должна все равно быть читабельной, а значит простой принтскрин и распознавание в FineReader будет быстрее, чем вы напишите защиту от него...

    Бросьте это занятие!

    Не существует защиты созданной человеком, которую не возможно сломать, вопрос времени...
    Единственный путь, это шифрование с выдачей ключа клиенту. Но клиент - человек не надежен, и информация уплывет, вопрос цены!

    И еще раз бросьте это!

    Я тоже когда-то думал об этом, но ни к чему не пришел. Всякая защита усложняет систему и увеличивает количество ошибок. Пользователь быстрее уйдет с вашего сайта, только потому что из-за ошибки в скрипте полезные данные не получит.

    Последний совет: бросьте это!

    Единственное что может вам помочь, это не раскрывать полностью всю информацию о предмете, или разделить на несколько частей, но при этом не должно быть неудобства для посетителя. К примеру, скройте "количество зубцов в шестеренке", любую ключевую информацию, без которой "самолет не взлетит".

    А если хотите поиграться, то пришла в голову идея: перемешивание по определенному алгоритму текста, который потом восстанавливается, применение стилей для скрытия "фальшивых" слов или фраз. Например, задать стиль, который скрывает каждое второе предложение или слово. Но к сожалению, это ломается на ура! Но доставит радости для взломщиков :-)

    Извините, за столь большой сумбур!

    1. Динамические запросы. Ну доставят какую-то головную боль для взломщика, но это не так сложно, как кажется.

    2. Верстка. Не знаю про бан от поисковиков, но это тоже ломается. Просто убираете теги и все. Просто в парсер добавляется "умный" фильтр. Можно конечно где-то картинку заменить фоном, или часть текста картинкой, но и на это можно сделать разборщик.

    3. Блокировка по IP не прокатит, так как могут пострадать реальные люди, достаточно применять динамический IP.

    А вообще, если хотите спастись от простых парсеров, то комплекс мер может помочь. Так же могу натолкнуть на идею, того, что парсеры обычно очень активны, и по количеству запросов с одного IP, по USER_AGENT, и другим меткам, а так же по отсутствию javascript, по обработке тега <МЕТА> redirekt.info/article/redirekt-na-html-s-zaderzhko... (отложенный редирект) и другим признакам. Можно запихнуть скрытую картинку (style="display: none"), большинство парсеров ее могут дернуть (зависит от настроек).

    В общем, можно поставить задачу в другом ключе: "Расстановка ловушек для парсеров". То есть ловить на том, чего обычные люди и браузеры делать не будут. Например, заполнять "скрытое поле пароль". Удачные ловушки дадут вам возможность выявить подставных, но лучше делать несколько проверок, а то можно и реального пользователя забанить. А я бы не стал банить, а сливал бы немного или частично измененную инфу. Эта инфа может стать маркером для выявления того, кто действительно желает с вас "слить".

    Все, удачи!
    Ответ написан
    4 комментария
  • Что понимать под словом back-end?

    0neS
    @0neS
    Кассы и столики в макдональдсе это — frontend, кухня и комната для персонала — backend.
    Ответ написан
    6 комментариев
  • Как выбрать с двух таблиц MySQL?

    @kfuntov
    SELECT
        p.*,
        NOT ISNULL(wl.product_id)
    FROM product as p
    LEFT JOIN wishlist as wl ON p.id = wl.product_id;

    UPDATE спасибо @AxisPod (действительно IFNULL смотрел, не подошла, а ISNULL - то, что надо)
    Ответ написан
    1 комментарий
  • Выгрузка отчётов: как лучше организовать хранение файлов?

    crackedmind
    @crackedmind
    web-developer
    А чем собственно данные в xls, csv & txt отличаются? Почему бы не генерировать по крону, например только csv, а остальное на лету?
    Ответ написан
    8 комментариев
  • Зависает браузер при выводе большого объема записей с БД (items.length >= 5000)?

    miraage
    @miraage
    Старый прогер
    1) Укажите параметр dataType: 'json' в $.ajax(), чтобы автоматически получить JSON.
    2) Используйте createDocumentFragment() для вставки элементов в DOM.
    3) Оптимизируйте цикл

    var frag = document.createDocumentFragment();
    for (var i = 0, len = items.length; i < len; ++i) {
        // bla bla bla create div
       frag.appendChild(div);
    }
    document.getElementsById('#contacts').appendChild(frag); // Лучше юзайте ID для контейнера.
    Ответ написан
    Комментировать
  • Как получить название class из ID?

    iiil
    @iiil
    Инженер и вэб-дизайнер, рисую.
    На станице не должно быть три одинаковых ID.
    Тег a надо помещать внутрь тега li, а не наоборот.
    Ответ написан
    Комментировать
  • Как создать автоматически генерируемое число ПИ?

    iiil
    @iiil
    Инженер и вэб-дизайнер, рисую.
    Сначала подумал - что, б..ть, за бред.
    Потом посмотрел на автора вопроса - все ок, ребята, для него вопрос вполне нормальный.
    Ответ написан
    Комментировать
  • Как создать автоматически генерируемое число ПИ?

    вот что ты за человек. тебе дали ссылку, где высчитывается пи на php. Чем тебя не устроило?

    и вообще как ты себе представляешь обсчет пи? с чего ты взял, что он происходит по одной цифре?
    Ответ написан
    8 комментариев
  • MySQL server has gone away, куда копать?

    fornit1917
    @fornit1917
    Причины могут быть разные. Когда я с таким сталкивался, мне помогало одно из двух:

    1. Если используете пул подключений к бд (в PDO не помню как это называется, кажется персистентное подключение или как-то так...), то попробуйте отключить его

    2. В настройках мускла попробуйте увеличить параметр max_allowed_packet

    Но если честно, не уверен что это ваш случай, хотя всякое может быть
    Ответ написан
    Комментировать
  • Как добавить в colorbox кнопку "на весь экран"?

    DeLaVega
    @DeLaVega
    Верстаю, фронтэндю =)
    $(document).ready(function(){
    
        $(".iframe").each(function(){
          var that = $(this);
          that.colorbox({
            iframe:true, innerWidth:"90%", height:"90%",
            onComplete: function() {
                $("#cboxContent iframe").ready(function(){
                    $("#cboxContent").append('<a id="cboxFullScr" style="float: left;" href=' + that.attr("href") + '>full screen</a>');
                });
              }
          });
        });
    
    });


    Так должно работать по идее
    Ответ написан
    3 комментария
  • Как реализовать авторизацию пользователей средствами MySQL?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    обычно между клиентом и субд есть такая мелочь как сервер, собственно и реализующий авторизацию, работу с данными и т.д. и предоставляет клиенту API (rest api)

    Никто так не делает как минимум потому, что это не удобно и непрактично. Возникают проблемы с расширяемостью, возрастает связанность системы ну и в конце концов СУБД не предназначены для подобного.
    Ответ написан
    Комментировать
  • Как сделать кнопку наверх без прокрутки?

    kompi
    @kompi
    nullstack devoops
    "Господи, нагородили":
    window.scroll(0,0);
    Для ленивых:
    <span onclick="window.scroll(0,0);">^^^^</span>
    Ответ написан
    1 комментарий
  • "Простой" запрос MySQL, как его составить?

    Попробуй такой запрос:

    SELECT books.id, books.title, books.year, COUNT(articles.book)
    FROM books, articles
    WHERE articles.book = books.id
    GROUP BY books.id, books.title, books.year


    А такой запрос должен вывести все книги, даже если нет articles:

    SELECT books.id, books.title, books.year, COUNT(articles.book)
    FROM books LEFT JOIN articles ON books.id=articles.book
    GROUP BY books.id, books.title, books.year


    А ещё лучше зайти на www.sql-ex.ru и по тренироваться в создании запросов.
    Ответ написан
    2 комментария
  • Объявление переменной в PHP

    lashtal
    @lashtal
    var не существует в природе, это из пхп4, в пятом его нет. Следует всегда использовать $foo = 'bar';
    Ответ написан
    2 комментария
  • Объявление переменной в PHP

    Stdit
    @Stdit
    PHP — это не JS. «var» — это старый способ объявления полей класса (ныне следует использовать private, protected, public). И, кстати, оно гуглится.
    Ответ написан
    1 комментарий