鍵と鍵の下での科学に関する記事に触発されました。 私の記事はこれについてではありませんが、性質は異なりますが、電子図書館へのアクセスについても述べています。
私は西洋の大学で働いていますが、まだ北の大学ではありません。研究分野の多くの記事を読む必要があります。 幸いなことに、ここで大学図書館は多くの電子図書館を購読しています(この喜びはいくらですか?いいえ、そうではありません-私たちの記事から何人のブルジョアが利益を得ますか?)。 私のテーマでは、ACM、IEEE、およびSpringerの3つのライブラリがあります。 そしてそれらの中に-私が必要なものの最大のシェア。 そして、すべてが素晴らしいだろうが、しかし1つがあります。
電子ライブラリ(EB)は、明らかにIPによってユーザーを識別します。 たぶん間違っているかもしれませんが、コンピューターが物理的に(ツイストペアケーブルを介して)大学のネットワークに接続されている場合にのみアクセスできます。 少なくとも、電子書籍のページには、その購読に記事をダウンロードできるように表示されます。 EBが記事のお金を要求し始めるとすぐに、ワイヤレスネットワーク経由で大学のネットワークに接続するだけで十分です。 大学の外では、同僚や自分の作品を読むための関税しか見られないことは明らかです。
しかし、自宅で仕事をすることを決めた場合(冗談です:3人のおてんば娘の前で働くことができます...)、または出張で、最終的に何かを確認し、明確にし、または単に読む必要がありました(非常に現実的な場合) ? ある時点で、どうにかしてこの問題を解決する必要があると判断しました。 ローカル管理者は、EBにリモートでアクセスする方法に関する解決策を考え出すように彼に依頼したのは私が最初ではなかったことにのみ満足しました。 何もする約束がない。 後で同僚から、全国的なリソースに何らかの解決策があることを学びましたが、それは何らかの形で不安定です-私の同僚がこのリソースを介してEBに接続する方法を示したにもかかわらず、何らかの理由で同じアクションが望ましい結果に至らなかった。
そして、PHPとJSには小さなプログラミングスキルがあるため、すべてを自分で行うことにしました。 ローカルネットワーク(電子ライブラリへのサブスクリプションが有効である)にユーザーフォルダーがあり、その中にPHPスクリプトを配置できることも事実です。 アイデアは次のようになりました。
- 大学のローカルサーバー上のフォルダにプロキシを配置し、
- Google Chromeの拡張機能を
- EBのページにつながるすべてのリンク(「PDF記事ではなく」)は「オンザフライ」で変更されます。 すべてがプロキシがないように見え、記事は大学の内部ネットワークから作業しているように開きます。
PHPプロキシを検索した後、すべてのHTTPヘッダー(ユーザーCookieを含む)を送信する簡単なスクリプトが作成されました(Eric-Sebastien Lachanceに感謝)。 確かに、1)ユーザーが連絡できるドメインの数を制限し、2)大学の学生と従業員のみがそれを使用できるようにするために、大幅に拡張する必要がありました(まあ、なぜこれを誰もが利用できないのか理解しています...)、そしてユーザーがローカルネットワークにログオンしているかどうかを確認します(イントラネットでは、リモートでログインできます。ところで、自分だけを使用する場合は、この手順を省略できます)。 そのためには、記事のPDFへの実際のURLを除くすべてのリクエストで、イントラネット上のセッションのIDが必要です。 プロキシは、目的のCookie(私の場合はJSESSIONID)を送信された値に設定することでイントラネットページに要求を行い、イントラネットが肯定的な回答を受け取った場合、EBに要求を行います。
ユーザー認証function verifyUser($authCookieValue) { global $authCheckURL; global $authSuccessHTML; global $authCookieName; $result = false; $error = '';
Google Chrome拡張機能はユーザー側で機能し(ページに埋め込まれたコードと、バックグラウンドで実行されるタブとCookieにアクセスするコードの2つの部分で構成されます)、URLが3つのライブラリのいずれかに属している場合、ページが特定のスキャンされますPDF記事へのリンクがあるすべてのページに存在する要素(もちろん、EBごとに、これらは異なる要素です)。 そのような要素が見つかった場合、PDF記事へのリンクが正しく形成されたプロキシリクエストがそこで置換されます。 (リンクを正しく形成するために、ページ上のどのデータからどのデータを検索するかは、かなりの時間がかかりました)。
このリンクをクリックすると、大学のイントラネット上のセッションIDを含むCookie値がリクエストに添付されます。
イントラネットセッションIDを追加するバックグラウンドコードで:
ページに埋め込まれたコード内:
var commPort = chrome.runtime.connect(); commPort.onMessage.addListener(function (answer) { if (answer.toRequest === REQUEST_AUTH) {
確かに、IEEEに関する記事を開くために、私は多くのことをいじらなければなりませんでした。 IEEEの場合、サブスクリプション付きのユーザーIDを持つCookieを受信するために、プロキシを介して彼の電子アカウントのWebサイトのページを開く必要があります(Chromeでは追加のタブが開き、コンテンツをダウンロードするとすぐに閉じます)。 さらに、PHPで受信したCookie(後者はオプション)のドメインとパスの値を置き換えて、PDFリクエストとともにプロキシに自動的に送信できるようにする必要がありました:(識別子のこの追加リクエストの後)domain = ieeexplore.ieee .org、およびPDFへのリンクはすでに.ieeexplore.ieee.org / queryを指していませんが、university.org /〜user / proxy?url = ieeexplore.ieee.org%5Fqueryを指しているため、ドメイン=で編集する必要がありました。 university.org、パス= /〜〜ユーザー/プロキシ。
最後に注意したいのは、そのような実装の弱点です。
- EBページのレイアウトに何か変更があると、このソリューションは機能しなくなります。 しかし、それは機能しますが、非常に便利です。イントラネットにログオンして、
- いくつかのセキュリティ問題があります:セッション識別子はHTTPを介して送信され、潜在的にそれを傍受することができます。 このソリューションを単独で使用している場合、リスクはゼロと見なされます。攻撃者は、プロキシに送信する数字の種類をどのようにして知るのですか? ただし、拡張機能を研究する場合、大学のイントラネットで他の人のアカウントにアクセスすることは技術の問題になります。 ただし、HTTPSはサーバー上のユーザーディレクトリには適用されません...拡張機能を同僚に送信する予定なので、拡張機能( CryptoJS )およびサーバー側復号化( OpenSSL )でセッション識別子暗号化を使用する必要がある場合があります
そして、これが完全な
ソースコードです。
PS誰かが最高の同じ便利な解決策を知っているなら、共有してください。 コードを取得、使用、編集、共有などできます。 一般的に、githubにアップロードするというアイデアがあります。コメントに要望があれば、そうします。
PPSコードをあまりscらないでください。コード自体よりも、どの種類のプロキシリクエスト(特にIEEEのEBの場合)を送信するかを判断するのに時間がかかりました。 不完全な場合もあります-常に正しいリンクに置き換えないでください。