Взламываем библиотеку от «ГЭОТАР-Медиа»

в 9:59, , рубрики: python, информационная безопасность, метки: ,

В последнее время тема авторского права набирает в обществе все большую популярность. Закручиваются гайки, принимаются новые законы, а копирасты продолжают вопить о своей мифической упущенной выгоде. Давайте посмотрим, как некоторые из них заботятся о безопасности собственной продукции.

Неспешно бороздя просторы Интернета, я, волею судеб, очутился на сайте «Консультант студента», жизнь которому подарила ООО «Политехресурс» — компания, входящая в Издательскую группу «ГЭОТАР-Медиа». Познакомимся поближе с нашим будущим пациентом.

Многопрофильный образовательный ресурс «Консультант студента»  (www.studentlibrary.ru) является электронно-библиотечной  системой (ЭБС), предоставляющей доступ через сеть Интернет к учебной литературе и дополнительным материалам, приобретенным на основании прямых договоров с правообладателями. Сайт предназначен для корпоративных пользователей — вузов, колледжей, других образовательных учреждений, которые, приобретая на платной основе подписку на ресурс, предоставляют затем безвозмездно своим учащимся и сотрудникам доступ к полным текстам электронных версий книг. Доступ к ресурсу для частных лиц на сегодняшний день не предлагается.

Ну что ж, давайте проверим, насколько это смелое утверждение соответствует истине. Зайдем на сайт и выберем какую-нибудь случайную книгу, например Интернет-аналитика. Поиск и оценка информации в web-ресурсах. Потыкав в «Оглавление», можно заметить, что сайт предоставляет нам для ознакомления несколько страниц, а потом предлагает зарегистрироваться:

image

Демонстрационные страницы книги представлены в виде картинки, что не очень-то для нас интересно, однако внизу каждой демонстрационной страницы можно увидеть такую ссылку:

image

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

image

Можно заметить, что вместо картинки на странице появился новый объект с весьма интересным адресом:

http://www.studentlibrary.ru/cgi-bin/mb4?hide_Cookie=yes&usr_data=gd-image(doc,ISBN9785804105694-SCN0000,0002.pdf,-1,,00000000)

Проделав то же самое со следующей страницей из оглавления, получим другую ссылку:

http://www.studentlibrary.ru/cgi-bin/mb4?hide_Cookie=yes&usr_data=gd-image(doc,ISBN9785804105694-SCN0000,0003.pdf,-1,,00000000)

Очевидно, что параметр ISBN9785804105694-SCN0000 — это ISBN книги и номер главы, а 0002.pdf и 0003.pdf, параметр, отвечающий за страницу.

Таким образом, подставляя номер главы и номер страницы, мы, даже не регистрируясь на сайте, без каких-либо ограничений, можем получать любую страницу книги прямо в pdf. Единственное неудобство в том, что каждой главе соответствуют определенные номера страниц. И если в книге данной главе не соответствует данная страница, то нас переадресовывают на главную страницу сайта. Поэтому определять это соответствие приходится исключительно эмпирически.

Для пущего удобства, напишем небольшой скрипт, сохраняющий книгу в виде отдельных страниц:

# -*- coding: utf-8 -*-

import urllib
import os


def main(*argv):
    isbn = 'ISBN9785804105694'
    scn_amount = 3
    page_amount = 78

    for scn in range(0, scn_amount + 1):
        for current_page in range(0, page_amount + 1):
            current_page_formated = (4 - len(str(current_page))) * '0' + str(current_page)
            scn_formatted = (4 - len(str(scn))) * '0' + str(scn)
            url = 'http://www.studmedlib.ru/cgi-bin/mb4?hide_Cookie=yes&usr_data=gd-image(doc,' + isbn + '-' + 'SCN' + scn_formatted + ',' + current_page_formated + '.pdf,-1,,00000000)'
            print 'getting ', url
            urllib.urlretrieve(url, 'pages/' + str(scn) + '_' + str(current_page) + '.pdf')
            f1 = open('pages/' + str(scn) + '_' + str(current_page) + '.pdf', 'r')
            if '<HTML>' in f1.read():
                os.remove('pages/' + str(scn) + '_' + str(current_page) + '.pdf')


if __name__ == "__main__":
    main()

Принцип работы крайне топорен:

  • isbn — ISBN книги,
  • scn_amount — количество глав,
  • page_amount — количество страниц.

Поскольку мы не знаем, сколько страниц в каждой главе, перебираем все подряд и если в полученном файле встречается html-тэг, то это явно не pdf-страница и этот файл подлежит удалению. Конечно, можно было бы сразу склеивать полученные страницы в единый pdf, однако опыт показал, что страницы сохраняются не совсем последовательно и их приходится компоновать вручную (да и вообще, надо же знать меру цинизму в конце-то концов).

В заключении хотелось бы воздержаться от каких-либо конкретных выводов. Пусть каждый сделает их для себя сам. Стоит лишь напомнить о том, что данное исследование носит исключительно ознакомительный характер и не является призывом к пиратству и нарушению авторских прав.

Автор: platonssukin

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js