Как запретить сканерам в зависимости от XPath получать содержимое страниц

Есть библиотека php, которая позволяет каждому атаковать меня (что-то вроде cURL). Тогда у меня есть идея предотвратить это, я хочу использовать динамическое имя класса для своих элементов. посмотри на это:

<div class="<?php $ClassName ?>">anything</div> // $className is taken from the database

Замечания: $ClassName будет меняться каждый раз.

В этом случае никто не знает, как называется мой класс, чтобы выбрать мой элемент и затем скопировать мои данные. Теперь у меня есть две проблемы:

  1. Как я могу общаться между $ClassName а также .$ClassName (в файле CSS)? другими словами, как я могу использовать переменную php для имен классов CSS? (динамические классы CSS)
  2. Оптимизировано ли получение всех имен классов из базы данных?!

3 ответа

Решение

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

// php code
   <?php
     $classes = array('class1','class2','class3','class4'); 
     $class_name = $classes[array_rand($classes)];
   ?>


// html code
     <div class="<? php echo $class_name; ?>">anything</div>


// css code
   <style>
     .<? php echo $class_name; ?> {
      // your css codes
     }
   </style>

Примечание: вы должны знать, что вы не можете использовать php коды на .css файл, то вы должны написать все коды CSS, которые вы хотите быть динамическими в вашем .php файл и использование <style> stuff </style>,

Между тем, как сказал @sєм sєм, вы можете создавать динамические HTML-теги.

Примерно так: (полный код)

// php code
   <?php
     // dynamic class
     $classes = array('class1','class2','class3','class4'); 
     $class_name = $classes[array_rand($classes)];

     // dynamic tags
     $tags_statr = array('','<div>','<div><div>','<div><p>','<span><div>');
     $tags_end = array('','</div>','</div></div>','</div></p>','</span></div>');
     $numb = array_rand($tags_statr);
   ?>


// html code
     <?php echo $tags_statr[$numb]; ?>
     <div class="<? php echo $class_name; ?>">anything</div>
     <?php echo $tags_end[$numb]; ?>


// css code
   <style>
     .<? php echo $class_name; ?> {
      // your css codes
     }
   </style>

А для большей безопасности вы можете разместить свой контент (здесь "все") (в дополнение к внешним динамическим тегам). например:

<span1>anything</span1> // <span1> changed to <span2,3,4....>

В этом случае смежный тег с данными также является динамическим, и это усложняет поиск.

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

  • Увеличены ограничения для пользователей. (например, только зарегистрированные пользователи могут видеть важную информацию)
  • Мониторинг IP, который использует ваш сайт (и, если подозрительно, заблокируйте его)
  • Используйте соответствующее программное обеспечение. (например, чтобы ограничить поиск IP на ежедневной основе)
  1. Определите свой класс в CSS на вашей странице:
<style>
    .<?php echo $ClassName;?>{
      /* Your CSS */
     }
</style>`
  1. Просто сделай $ClassName как случайно сгенерированная строка, вам не нужно подключаться к базе данных.

Обновить

Основываясь на ответе епископа, вы можете добавить изменяемую структуру DOM к вашему документу. Вы должны ввести две переменные PHP, такие как $start а также $close, $start будет иметь случайные открывающие теги, такие как <span><div><p> а также $close их близко, </p></div></span> затем приложите свой документ между ними

<?php echo $start;?><div class="<?php $ClassName ?>">anything</div><?php echo close;?>

Извините, но ваши усилия будут напрасны. Даже если имя класса изменяется случайным образом, ваша DOM все равно может быть атакована позиционно, например: div + div > span > a,

Но даже если вы повернули свои позиции (например, добавив ложные div а также span), любой скребок, достойный его соли, на самом деле не будет волноваться: он найдет текст на вашей странице, а затем выведет из ближайшей разметки намерение. Так работает Google, кстати.

У вас есть один реалистичный подход к этой проблеме. Сначала подключите монитор IDS к вашему веб-серверу. Когда IDS обнаруживает шаблон сканирования, дросселируйте или выключите IP. Или, и это мой любимый, бросить сканер в поддон с поддельным содержимым. То есть, если ваш фактический текст гласит: "Виджеты Freds - лучшие в мире", откройте альтернативную страницу с надписью "Гонады Бобса не оправдали морское блаженство".

Я использую эту последнюю тактику на нескольких сайтах моих клиентов, чтобы получить веселые результаты на китайских копировальных кошках.

Другие вопросы по тегам