drm - scribd 如何阻止下载

标签 drm scribd

在 scribd.com 上阅读图书时,下载功能未启用。即使浏览 html 源代码我也无法下载实际的书。很棒的东西......但是他们是怎么做到的? 我希望实现类似的功能,以访问者无法下载文件的方式显示 pdf(或从 pdf 转换而来)

我见过的大多数解决方案都是基于混淆 url.. 但只要付出一点努力,人们就可以找到 url 并下载文件。 ScribD 似乎很好地涵盖了这一点..

有什么建议、想法如何实现这样的下载保护吗?

最佳答案

它实际上是根据您在翻页时发出的 AJAX 请求来动态构建 HTML 的。它不是基于图像的。这就是您发现很难下载内容的原因。

但是,目前还不太安全。我在下面提出了一个下载今天(2020 年 1 月 27 日)有效的书籍的解决方案,不是为了教您如何做到这一点(这是不合法的),而是为了向您展示应该如何预防(或者至少让它变得更难)如果您正在构建类似的内容,则用户不会下载内容。

如果您有付费帐户并打开书页(单击“开始阅读”时打开的书页),您可以通过加载 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,该版本可在后台寻找类似“机器人”的行为。

关于drm - scribd 如何阻止下载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50293501/

相关文章:

c# - 锁定程序/进行试用的序列号?

Android::视频内容的 DRM

android - 如何检查 Android 设备上存在的 Widevine DRM

php - 开源 Web PDF 查看器?

php - 如何在没有 Flash/Adobe 的情况下在 PHP 网站上显示 PDF

url - WideVine DRM样本视频流

在 C 中工作时,在 Rust 中使用 Linux 的直接渲染管理器在 dumbuffer 上调用 mmap 失败

html - 将 pdf、doc、ppt 转换为 html5

Scribd API 搜索显示不相关的答案