Как запретить сканерам в зависимости от XPath получать содержимое страниц
Есть библиотека php, которая позволяет каждому атаковать меня (что-то вроде cURL). Тогда у меня есть идея предотвратить это, я хочу использовать динамическое имя класса для своих элементов. посмотри на это:
<div class="<?php $ClassName ?>">anything</div> // $className is taken from the database
Замечания:
$ClassName
будет меняться каждый раз.
В этом случае никто не знает, как называется мой класс, чтобы выбрать мой элемент и затем скопировать мои данные. Теперь у меня есть две проблемы:
- Как я могу общаться между
$ClassName
а также.$ClassName
(в файле CSS)? другими словами, как я могу использовать переменную php для имен классов CSS? (динамические классы CSS) - Оптимизировано ли получение всех имен классов из базы данных?!
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 на ежедневной основе)
- Определите свой класс в CSS на вашей странице:
<style>
.<?php echo $ClassName;?>{
/* Your CSS */
}
</style>`
- Просто сделай
$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 - лучшие в мире", откройте альтернативную страницу с надписью "Гонады Бобса не оправдали морское блаженство".
Я использую эту последнюю тактику на нескольких сайтах моих клиентов, чтобы получить веселые результаты на китайских копировальных кошках.