5

一部のユーザーのみに特定のページへのアクセスを提供する Weblication があります。現在、これらのページにリンクされているファイルがいくつかあります。誰かが URL を知っていれば、誰もがこれらのファイルにアクセスできます (この場合は検索エンジン)。これは変えるべき!このようなディレクトリを保護するにはどうすればよいですか? 私は2つの可能性について考えました:

  • htaccess: 新しいユーザーが作成されるたびにユーザー名とパスワードを入力します -> そのタイプのプロジェクトには適していません (2 回目のログインも必要になります)
  • download.php?file=xxx: Weblication (静的ページ) のすべてのリンクにそのようなものを含める方法がわかりません

他の可能性はありますか?

4

2 に答える 2

2

このリンクから取得および翻訳されています(ただし、 WaybackMachineでのみ使用可能です)。

mod_rewriteの助けを借りてパーソナライズされた出力

関数の助けを借りて、wCheckPermissionViewFilephpファイルをパーソナライズすることができます。出力を抑制するには、ファイルのヘッダーでパーミッションチェックを実行するだけで十分です。他のファイルタイプをパーソナライズする必要がある場合(ZIP、PDFなど)、wPermission.cgiまたはカスタムphpファイルを使用できます。

バイナリファイルへのすべてのパーソナライズされたリンクの前に、エディタを書き込むための作業を保存するためにwPermission.cgi、代わりにApacheモジュールmod_rewriteを使用できます。これにより、実行前にアクセスされたすべてのリンクを変換することができます。たとえばwPermission.cgi、各Webサーバー呼び出しの前にあることを定義できます。直接実行は、phpファイルを使用してリダイレクトすることもできます(wPermission.cgi不要)。

.htaccessPerlからのチェックによるファイルの例( wPermission.cgi

#Alle Dateien mit angegebener Endung über wPermission.cgi aufrufen.
RewriteEngine on
RewriteCond %{REQUEST_URI} .pdf$ [NC,OR]
RewriteCond %{REQUEST_URI} .doc$ [NC,OR]
RewriteCond %{REQUEST_URI} .xls$ [NC,OR]
RewriteCond %{REQUEST_URI} .ppt$ [NC,OR]
RewriteCond %{REQUEST_URI} .pps$ [NC,OR]
RewriteCond %{REQUEST_URI} .zip$ [NC,OR]
RewriteCond %{REQUEST_URI} .jpg$ [NC,OR]
RewriteCond %{REQUEST_URI} .jpeg$ [NC,OR]
RewriteCond %{REQUEST_URI} .png$ [NC,OR]
RewriteCond %{REQUEST_URI} .gif$ [NC]
RewriteRule (.*) /cgi-bin/wPermission.cgi?file=/de/dokumente/$1

.htaccesPHPからのチェックによるファイルの例(例: download.php、以下を参照)

#Alle Dateien mit angegebener Endung über die angegebene PHP-Datei aufrufen.
RewriteEngine on
RewriteCond %{REQUEST_URI} .pdf$ [NC,OR]
RewriteCond %{REQUEST_URI} .doc$ [NC,OR]
RewriteCond %{REQUEST_URI} .xls$ [NC,OR]
RewriteCond %{REQUEST_URI} .ppt$ [NC,OR]
RewriteCond %{REQUEST_URI} .pps$ [NC,OR]
RewriteCond %{REQUEST_URI} .zip$ [NC,OR]
RewriteCond %{REQUEST_URI} .jpg$ [NC,OR]
RewriteCond %{REQUEST_URI} .jpeg$ [NC,OR]
RewriteCond %{REQUEST_URI} .png$ [NC,OR]
RewriteCond %{REQUEST_URI} .gif$ [NC]
RewriteRule (.*) /de/download.php?path=/de/dokumente/$1

説明

/de/dokumenteリンクを変更せずにディレクトリ内のすべてのPDFファイルとZIPファイルをパーソナライズしたい場合は、.htaccessそのディレクトリにファイルを配置できます。このファイルでは、リダイレクトルールが定義されています。

ルールは任意のファイル拡張子で拡張でき、大文字と小文字NCを区別しないことを表します。ルールはサブディレクトリにも継承されることに注意してください。

バイナリファイル自体をチェックインし、それに応じたパーソナライズを提供する必要があります。

ファイルが有効な公開期間(オンラインまたはオフラインなど)にあるかどうかを確認する場合は、PHPAPIを介してアクセス許可を確認する前に確認を行ってくださいwIsOnline

例:実装のdownload.php.htacces 「 PHPからのチェックによるファイル(例:download.php)」

<?php

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Dieses Skript erzwingt den Download von Dokumenten. PDF, DOC, XLS und PPT Dokumente werden je nach Browser angezeigt.
//
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

// Einlesen der Weblication(r) 4.x API:
require_once ($_SERVER["DOCUMENT_ROOT"]."/weblication/lib/WAPI/WAPI.inc");

$filenameRel = str_replace("..", "", $_GET['path']);
$filename    = $_SERVER['DOCUMENT_ROOT'].$filenameRel;

if(preg_match("/\.\w+$/", $filename) && !preg_match("/\.(php|php5|php4|xml|xsl|cgi|pl)$/", $filename) && !preg_match("/\/weblication\//", $filename) &&  file_exists( $filename ) ){
  if(wCheckPermissionViewFile($filenameRel) == 1){
    header("Pragma: no-cache");
    header("Expires: 0");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
    header("Cache-Control: private", false);
    if(preg_match("/\.pdf/i", $filenameRel)){
      header("Content-Type: application/pdf");
    }
    else if(preg_match("/\.doc/i", $filenameRel)){
      header("Content-Type: application/msword");
    }
    else if(preg_match("/\.xls/i", $filenameRel)){
      header("Content-Type: application/msexcel");
    }
    else if(preg_match("/\.ppt/i", $filenameRel)){
      header("Content-Type: application/mspowerpoint");
    }
    else if(preg_match("/\.pps/i", $filenameRel)){
      header("Content-Type: application/mspowerpoint");
    }
    else if(preg_match("/\.jpg/i", $filenameRel)){
      header("Content-Type: image/jpg");
    }
    else if(preg_match("/\.jpeg/i", $filenameRel)){
      header("Content-Type: image/jpeg");
    }
    else if(preg_match("/\.png/i", $filenameRel)){
      header("Content-Type: image/png");
    }
    else if(preg_match("/\.gif/i", $filenameRel)){
      header("Content-Type: image/gif");
    }
    else{
      header("Content-Type: application/force-download");
      header("Content-Disposition: attachment; filename=\"".basename($filename)."\";" );
      header("Content-Transfer-Encoding: binary");
      header("Content-Length: ".filesize($filename));
    }
    readfile($filename);
  }
  else{
    print "Permission Denied!";
  }
}
else {
  print 'Sorry, wrong path or file does not exist on the server!';
  print '<br/><a href="javascript:history.back();">back</a>';
}
exit;

?> 

Weblication このリンクの新しいバージョンについては役立つ可能性があります。メーカーの主な言語はドイツ語であるため、ドイツ語です。

于 2012-05-25T10:04:03.830 に答える
1

すべてのファイルを公開されていないディレクトリに保存してから、ユーザーがファイルにアクセスする権限を持っていることを確認するページを作成して (download.php?file=xxx と同じように)、ブラウザに出力することができます。

編集:

CMS を使用しているので、ユーザーはクリックして挿入/リンク先のファイルを選択できる優れた GUI を持っていると思いますか? この場合、リンクを作成するために使用するコードを見つけてhttp://www.whatever.com/download.php?file=、ファイル名の前に追加し、スクリプトを介してダウンロードをルーティングすることができます。

于 2012-05-18T13:19:26.230 に答える