Как Scribd предотвращает загрузку
При чтении КНИГ на scribd.com функция загрузки не включена. даже просматривая исходный код HTML, я не смог загрузить настоящую книгу. Отличный материал... но КАК они это сделали? Я пытаюсь реализовать нечто подобное, чтобы отобразить PDF (или преобразовать из PDF) таким образом, чтобы посетитель не мог загрузить файл
Большинство решений, которые я видел, основаны на запутывании URL-адреса... но с небольшим усилием люди могут найти URL-адрес и загрузить файл. ScribD, кажется, достаточно хорошо это охватил..
Любые предложения, идеи, как реализовать такую защиту загрузки?
0 ответов
На самом деле он работает динамически, создавая HTML на основе запросов AJAX, сделанных при перелистывании страниц. Это не основано на изображениях. Вот почему вам трудно загрузить контент.
Однако пока это не так безопасно. Ниже я представляю решение для загрузки книг, которое работает сегодня (27 января 2020 г.) не для того, чтобы научить вас, как это делать (это незаконно), а для того, чтобы показать вам, как вы должны предотвратить (или, по крайней мере, усложнить задачу) пользователей от загрузки контента, если вы создаете нечто подобное.
Если у вас есть платная учетная запись и вы открываете страницу книги (ту, которая открывается, когда вы нажимаете "Начать чтение"), вы можете загрузить изображение каждой страницы книги, загрузив библиотеку, например dom-to-image.
Например, вы можете загрузить библиотеку с помощью инструментов разработчика (весь код, показанный ниже, должен быть набран в консоли страницы):
if (injectDomToImage == undefined) {
var injectDomToImage = document.createElement('script');
injectDomToImage.src = "https://cdnjs.cloudflare.com/ajax/libs/dom-to-image/2.6.0/dom-to-image.min.js";
document.getElementsByTagName('head')[0].appendChild(injectDomToImage);
}
А затем вы можете определить такие функции, как эти:
function downloadPage(page, prefix) {
domtoimage.toJpeg(document.getElementsByClassName('reader_and_banner_container')[0], {
quality: 1,
})
.then(function(dataUrl) {
var link = document.createElement('a');
link.download = `${prefix}_page_${page}.jpg`;
link.href = dataUrl;
link.click();
nextPage(page, prefix);
});
}
function checkPageChanged(page, oldPageCounter, prefix) {
let newPageCounter = $('.page_counter').html();
if (oldPageCounter === newPageCounter) {
setTimeout(function() {
checkPageChanged(page, oldPageCounter, prefix);
}, 500);
} else {
setTimeout(function() {
downloadPage(page + 1, prefix);
}, 500);
}
}
function nextPage(page, prefix) {
let oldPageCounter = $('.page_counter').html();
$('.next_btn').trigger('click');
// Wait until page counter has changed (page loading has finished).
checkPageChanged(page + 1, oldPageCounter, prefix);
}
function download(prefix) {
downloadPage(1, prefix);
}
Наконец, вы можете загрузить каждую страницу книги в виде изображения JPG, используя:
download('test_');
Каждая страница будет загружена как test_page_.jpg.
Чтобы предотвратить появление такого типа "роботов", они могли бы, например, использовать Re-CAPTCHA v3, которая работает в фоновом режиме для поиска "роботов" поведения.