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

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

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

Примечание: $ClassName будет меняться в зависимости от времени.

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

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

Использование базы данных для получения имени класса не является оптимальным, пока оно не будет выполнено локально. Вы должны определить массив всех имен классов, а затем выбрать один из них 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, BTW.

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

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