Avatar billede nyst Nybegynder
18. juni 2004 - 00:02 Der er 17 kommentarer og
1 løsning

beskytte filer i dir som ikke kaldes ved link

Hej, jeg har et lidt kringlet spørgsmål.
Jeg har et enkelt dir med fotos.
Jeg har flere sider (php) hvorfra et link åbner et nyt vindue (javascript) og viser det foto som linket refererer til.
Jeg kan se man kan bare skrive adressen til alle fotos i der og det vises i browser.
Det er det jeg gerne vil undgå uden jeg skal bruge login.
Diret er et fælles dir som flere filer trækker fra, så kun den fil som har referencer skal kunne se de respektive fotos og ikke andre.
Kan man evt. med htaccess lave noget så man undgår der kan indtastes direkte til det enkelte foto. Uden at man bruger loginsystemer. Altså hvia man får adressen til en fil med nogle link til fotodir, så skal man ikke taste koder ind men kan trykke på linket og se fotoet - omvendt kan man ikke indtaste andre hele direkte adresser til de andre foto.

Virker det kryptisk eller...
Avatar billede thedeathart Nybegynder
18. juni 2004 - 00:59 #1
.htaccess

Order allow,deny
deny from all


Den ligger du så i mappen, så er den låst for alle og alting.
Avatar billede sukos Juniormester
18. juni 2004 - 07:40 #2
Det kan du, så vidt jeg ved, ikke.
Du skal jo selv kunne vise filen fra dir'et.
Du kan hindre at man kan browse i mappen med

Options FollowSymlinks

Men hvis du bruger f.eks. PHP, kan du ha' dine billeder liggende udenfor www, og så bruge PHP til at vise filen.
Avatar billede nyst Nybegynder
18. juni 2004 - 10:02 #3
thedeathart>>
den duer ikke , den låser jo bare for alt, så desværre ikke brugbar

sukos>>
webstedet har låst så man ikke kan browse, så det er ok
ved PHP, kan man så ikke se i kildekoden hvad billedet hedder og forsøge sig med de andre numre og så se dem der, samt se referencen og så skrive den direkte i browser, så billedet fremkommer på denne måde, som igen ikke er hensigten

-------------------

det skal fungere så der kun kan ses de foto der har a href'er og ikke andre, samt hvis muligt, at man heller ikke kan skrive den direkte stil til billedet og derved få det fra.

Altså kaldeside.php med a href til ww/foto1.jpg som så åbnes i lille vindue via en javascript jeg bruger.

foto1.jpg skal så ikke kunne ses ved at skrive www.domæne.dk/foto/ww/foto1.jpg, samt
at man ikke må kunne forsøge sig med www.domæne.dk/foto/ww/foto2.jpg osv osv.

Man kan ikke lave en slags login med .htacces bare hvor man giver en 'fil' lov til at have adgang og ikke med login og alt det der???
Avatar billede sukos Juniormester
18. juni 2004 - 10:08 #4
Hvis du bruger PHP til at læse filen, og derefter lave ouptut til browseren, vil man ikke kunne se stien til billedet.
og hvor filen så ligger, er ligemeget.
Så vil du hente billedet med f.eks.
filnavn.php?id=2

hvis du bruger sessions også, vil du kunne undgå ?id=2, altså, med sessions registrere hvilket id der er tale om, og så parser filen til browseren.
Avatar billede nyst Nybegynder
18. juni 2004 - 11:17 #5
sukos>>
ville det være mere 'sikkert' at benytte MySQL eller er det ligegyldigt i denne forbindelse?
Avatar billede sukos Juniormester
18. juni 2004 - 11:28 #6
hmm, vil mene det er "overkill" at bruge mysql, hvis filen alligevel skal parses med PHP. Og der er noget med at billeder gemt i mysql suger en del på serveren.

Men du kan jo evt. bruge mysql til at gemme f.eks. id, filnavn og tilhørende tekst til billedet. Endvidere evt. så også inddele billederne i kategorier
Avatar billede nyst Nybegynder
18. juni 2004 - 11:29 #7
sukos>>
med sessions vil det sige jeg laver en session-fil feks. fotoalle.php hvor jeg opremser alle foto i dir og så på fotolink.php har nogle af mine phplinks, som så igen åbner fotoet i f.eks fotovis.php

og kunne man få fotoalle.php (session) til selv at læse i dir hvilke fotonavne der er, så jeg ikke skal opdatere denne hvergang et foto oplades.

Jeg har nemlig en der kan slette i dir:

<?php
$dir = $_SERVER["DOCUMENT_ROOT"] ."/foto/ww/"; // Min mappe med billeder

if(!isset($_GET['slet'])){
    if (is_dir($dir)) {
      if ($dh = opendir($dir)) {
          while (($file = readdir($dh)) !== false) {
                        if($file != "." && $file != ".." && substr($file, -4) != '.php') {
                        echo $file . "&nbsp; <a href=\"" . $_SERVER['PHP_SELF'] . "?slet=" . $file . "\">slet fil</a><br />\n";
}
          }
          closedir($dh);
      }
    }
}else{
    if(file_exists($dir . $_GET['slet'])){
        unlink($dir . rawurldecode($_GET['slet']));
        echo "Filen: " . $_GET['slet'] . " blev slettet. <a href=\"" . $_SERVER['PHP_SELF'] . "\">Gå tilbage</a>";
    }else{
        echo "Filen: " . $_GET['slet'] . " findes ikke. <a href=\"" . $_SERVER['PHP_SELF'] . "\">Gå tilbage</a>";
    }
}
?>

som virker fortræffelig, men det er kun til eget brug.
Avatar billede sukos Juniormester
18. juni 2004 - 12:18 #8
hmm, noget jeg tester lidt af for tiden, kan du se her:

http://nielsm.steffend.dk/billedearkiv/

Når du får vist et stort billede, kan du ikke se hvor det egentlig bliver hentet fra.
Det er så lavet med mysql også, hvor der er id, filnavn, arkiv og tekst i en table

Først klikkes arkiv
Derefter, hentes id, filnavn hvor arkiv er lig med kategori. Og findes det store billede, bliver det lille billede vist, "id.jpg" som link til det store
<a href=filen_selv.php?arkiv=valgtarkiv&fil=id"><img src=id.jpg"></a>

Ved klik på thumbnail, laves en iframe, hvori billedet vises, parset af php

Og phpfilen som viser billedet, hedder kun billede, uanset hvilket billede man gerne vil se
Avatar billede thetoastmaster Juniormester
18. juni 2004 - 14:23 #9
du skal nok kikke lidt på disse link


http://www.serverwatch.com/tutorials/article.php/10825_1132731_4

Dette link beskriver mere hvordan en person har brugt htaccess til at beskytte sit site, men da han har beskriver sine ting godt så ville jeg kigge lind på det,,,


http://www.webmasterworld.com/forum11/2095.htm


Mvh The Toastmaster
Avatar billede thetoastmaster Juniormester
18. juni 2004 - 14:34 #10
øøøhh
Det er klart at du kan bruge sukos måde at gøre det på, så det er ikke en anden måde at gøre det på.

Men det er altid godt at vide hvordan man kan beskytte sig mod at ens billeder bliver linket op fra andre site's, desvære er det meget brugt, der er desvære mange der ikke vil betale for deres trafik og derfor låner lidt fra andre steder, jeg har eks lidt problemer med kineser der forsøger at låne lidt .-(, men er man lidt opmærksom på det og køre statistik på sine log filer kommer de tydligt frem,

hov jeg kommer vist lidt væk fra det hele ;-))

The Toastmaster
Avatar billede nyst Nybegynder
21. juni 2004 - 11:40 #11
sukos>>
jeg tror jeg begynder forfra og har valgt at bruge dit forslag fra 18/06 10:08 og så bygge videre på det. Jeg er dog ikke nogen ørn til php så lidt hjælp ville være dejligt.

Jeg forestiller mig følgende:

et 'foto' dir med flere 'linkfiler.php' samt en enkelt 'arkivfil.php og et underdir 'ww' med alle fotos

Vil det så være noget ala dette:

-------------------------

arkivfil:

<?php
session_start();

$_SESSION['001'] = "ww/foto001.jpg";
$_SESSION['002'] = "ww/foto002.jpg";
$_SESSION['003'] = "ww/foto003.jpg";

?>

---------------------------------------

linkfil:

<?php session_start();  ?>

<html><head>

<?php

<a href=arkivfil.php?001"><img src=ikon.gif"></a>
<a href=arkivfil.php?003"><img src=ikon.gif"></a>

?>

---------------------------------------------

hvert link har samme klikbare ikon.

Det er så meningen at fotoet skal vises på en måde hvor der anvendes feks javascript som nu hvor man ikke kan højreklikke (ved det ikke er sikkert) evt også en kode hvor hvis man kan ikke kan anvende print screen eller print.

Nu popper fotoet op vis en javascript hvor der ikke er menulinie eller noget, så det ikke kan printes men man kan bruge print screen og det ved jeg ikke om kan stoppes.

Nå, det første er at prøve det du beskriver med sessions og parse, det lyder ret interessant.

Gider du???
Avatar billede nyst Nybegynder
21. juni 2004 - 11:45 #12
skulle nok være:

<?php

<a href="arkivfil.php?001"><img src="ikon.gif"></a>
<a href="arkivfil.php?003"><img src="ikon.gif"></a>

?>
Avatar billede nyst Nybegynder
21. juni 2004 - 11:48 #13
jeg har i start nu

<?php require "../elements/header.php"; ?>

skal <?php session_start();  ?> være før denne, altså øverst?
Avatar billede sukos Juniormester
22. juni 2004 - 05:27 #14
session_start() skal før du laver noget output.

Og jeg ved ikke,
hvis alle filer ligger i samme dir, ville jeg nok læse det igennem, og så lave et session array med "id" og filnavn.
Avatar billede nyst Nybegynder
22. juni 2004 - 10:18 #15
nu er jeg lidt rundt på gulvet men ridser lige op hvad jeg forestiller mig

- altså en arkivfil hvor alle filer i en bestemt mappe 'ww' er i en session

- og så en linkfil hvor jeg kan vælge hvilke link(foto) jeg vil vise

- kunne man lave arkivfilen så smart at den selv opdaterer sig når jeg smider flere foto i 'ww' og så på samme fil danner den der session?

Var koden i øvrigt som jeg skrev i 11:40 !!!

Måske den der sessionfil kunne kobineres med denne der oploader og sletter mine fotos?

<table border="0" cellpadding="0" cellspacing="9">
<tr>
<td><b>Foto til upload:</b>
<form class="formsoeg" action="serverimage.php" method="post" enctype="multipart/form-data">
<input type="file" name="upfil" style="font-size : 9px;">
<input type="submit" value="upload" style="font-size : 9px;">
</form><br>
<?php
$konfiguration["upload_bibliotek"] = "./";
$konfiguration["max_stoerrelse"] = "200";

list($major, $minor, $rev) = explode(".", phpversion());
if($major < 4) {
  die("Kun PHP 4.0.0 eller derover");
}

if($minor < 1) {
  $_FILES = $HTTP_POST_FILES;
  $_POST = $HTTP_POST_VARS;
  $_SERVER = $HTTP_SERVER_VARS;
}

if($_FILES["upfil"]["size"] > 0) {

  $fra = $_FILES["upfil"]["tmp_name"];
  $til = $konfiguration["upload_bibliotek"] . "/" . $_FILES["upfil"]["name"];

  $fil_stoerrelse = filesize($fra)/1024;
  if($fil_stoerrelse > $konfiguration["max_stoerrelse"]) {
      die("For stor. Max. " .
          $konfiguration["max_stoerrelse"] . "kb, den fylder " .
          ceil($fil_stoerrelse) . "kb");
  }
  if(function_exists("move_uploaded_file")) {
    move_uploaded_file($fra, $til);
  } else {
    copy($fra, $til);
  }

}
?>
</td>
</tr>
</tr>
<td><b>Fotoarkiv:</b><br>
<?php
$dir = $_SERVER["DOCUMENT_ROOT"] ."/foto/ww/";

if(!isset($_GET['slet'])){
    if (is_dir($dir)) {
      if ($dh = opendir($dir)) {
          while (($file = readdir($dh)) !== false) {
                        if($file != "." && $file != ".." && substr($file, -4) != '.php') {
                        echo $file . "<a href=\"" . $_SERVER['PHP_SELF'] . "?slet=" . $file . "\">&nbsp;&nbsp;&nbsp;&nbsp;delete</a><br />\n";
}
          }
          closedir($dh);
      }
    }
}else{
    if(file_exists($dir . $_GET['slet'])){
        unlink($dir . rawurldecode($_GET['slet']));
        echo "Filen: " . $_GET['slet'] . " blev slettet. <a href=\"" . $_SERVER['PHP_SELF'] . "\">Retur</a>";
    }else{
        echo "Filen: " . $_GET['slet'] . " findes ikke. <a href=\"" . $_SERVER['PHP_SELF'] . "\">Retur</a>";
    }
}
?>
</td>
</tr>
</table>

men ellers hvis I bare lige kunne lære mig hvordan jeg laver arkivfilen som session og hvordan jeg kalder fra linkfilen *S*
Avatar billede nyst Nybegynder
15. juli 2004 - 13:58 #16
Hej,
har selv fundet en løsning via .htaccess
Denne gør at der ikke kan linkes fra andre sites + at man kun kan se de fotos, som der linkes til fra ens egne sider (dvs. hvis der er flere foto i en mappe, der ikke linkes til, kan man ikke skrive adressen til fotoet og derved se det.
Her er koden:

.htacces (lægges i roden)

SetEnvIfNoCase Referer "^http://www\.domænenavn\.dk/" local_ref=1
<FilesMatch "\.(gif|jpg)">
    Order Allow,Deny
    Allow from env=local_ref
</FilesMatch>
Avatar billede nyst Nybegynder
16. juli 2004 - 12:10 #17
sukos og thetoastmaster

skal I ikke have points???
Avatar billede nyst Nybegynder
23. august 2004 - 15:49 #18
nå, ikke så lukker jeg *S*

I må have tilgode så...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Uanset kodesprog, så giver vi dig mulighederne for at udvikle det, du behøver.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester