[Apache/PHP] Login onderdrukken van htaccess beveiligde dir

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Weng
  • Registratie: Juni 2001
  • Laatst online: 11-05-2024

Weng

Are y'all ready kids

Topicstarter
Ik heb een dir waar plaatjes in staan die beveiligd is met een htaccess file. Als je die dir wilt benaderen komt er automatisch een loginbox.

Nu wil ik de plaatjes wel kunnen benaderen vanuit m'n eigen site zonder dat er een loginbox verschijnt. Ik heb al rondgezocht op GoT maar niet een (werkende) oplossing gevonden.

Ik heb het volgende al geprobeerd:
HTML:
1
2
[img]"http://username:passwd@localhost/testdir/plaatje.jpg">
<!--[/img]

Volgens vele searches zou dit moeten werken, maar doet het dus niet. Ik heb ergens iets met headers horen vallen, maar ik heb geen idee hoe ik verder moet. Ik ben nogal n00b op het gebied van html/php namelijk. Ik hoop dat jullie me verder kunnen helpen.

OS: Win XP
Browser: IE 6.0

Aye aye captain


Acties:
  • 0 Henk 'm!

  • Helmet
  • Registratie: Januari 2002
  • Laatst online: 21-08 15:00
Het makkelijkste is gewoon met php de file uitlezen (de htaccess geldt namelijk niet voor je script) en gewoon de file doorsturen

PHP:
1
2
3
4
5
6
7
8
9
10
11
<?php
// open the file in a binary mode
$name = ".\public\dev\img\ok.png";
$fp = fopen($name, 'rb');
// send the right headers
header("Content-Type: image/png");
header("Content-Length: " . filesize($name));
// dump the picture and stop the script
fpassthru($fp);
exit;
?> 

Icons are overrated


Acties:
  • 0 Henk 'm!

  • johnny7
  • Registratie: November 2000
  • Laatst online: 07-11-2023
Ook al zou het wel kunnen, op de manier van de TS, dan kan iedereen in de source van je html pagina zien wat je username en wachtwoord zijn. Lijkt me niet echt handig. :X

[ Voor 8% gewijzigd door johnny7 op 19-07-2004 10:56 ]


Acties:
  • 0 Henk 'm!

  • Lancer
  • Registratie: Januari 2002
  • Laatst online: 15:29

Lancer

What the......

Als je bedoelt dat je de plaatjes direct wilt kunnen benaderen vanuit je eigen netwerk (definieer "site"); dan heb je wellicht wat aan het "satisfy" commando in je httpd.conf. Zie hiervoor de Apache manual (http://httpd.apache.org/docs-2.0/mod/core.html#satisfy)

--edit
Ik vermoed dat je met site website bedoelt. Waarom zou je de directory met de plaatjes dan willen afschermen als je ze toch op de site gaat plaatsen? Anyway, de eerder genoemde PHP oplossing is dan de beste methode. Let wel op, dit levert problemen met Explorer icm het HTTPS protocol, ben het microsoft bugnummer hiervan kwijt)

[ Voor 42% gewijzigd door Lancer op 19-07-2004 11:14 ]

Je kunt niet in een systeem meten zonder het systeem te beinvloeden.... (gevolg van de Heisenberg onzekerheidsrelatie)


Acties:
  • 0 Henk 'm!

  • Weng
  • Registratie: Juni 2001
  • Laatst online: 11-05-2024

Weng

Are y'all ready kids

Topicstarter
Lancer schreef op 19 juli 2004 @ 11:04:
Als je bedoelt dat je de plaatjes direct wilt kunnen benaderen vanuit je eigen netwerk (definieer "site"); dan heb je wellicht wat aan het "satisfy" commando in je httpd.conf. Zie hiervoor de Apache manual (http://httpd.apache.org/docs-2.0/mod/core.html#satisfy)

--edit
Ik vermoed dat je met site website bedoelt. Waarom zou je de directory met de plaatjes dan willen afschermen als je ze toch op de site gaat plaatsen? Anyway, de eerder genoemde PHP oplossing is dan de beste methode. Let wel op, dit levert problemen met Explorer icm het HTTPS protocol, ben het microsoft bugnummer hiervan kwijt)
Het zit namelijk zo: Mensen kunnen inloggen op de site en dan mogen ze bij de plaatjes. Maar mensen mogen niet zomaar een kunnen dl via een linkje als ze niet ingelogd zijn.

Maar ik doe wat verkeer ofzo, want hij dumpt het plaatje in binary op het scherm.

Aye aye captain


Acties:
  • 0 Henk 'm!

Verwijderd

Weng schreef op 19 juli 2004 @ 12:07:
[...]

Het zit namelijk zo: Mensen kunnen inloggen op de site en dan mogen ze bij de plaatjes. Maar mensen mogen niet zomaar een kunnen dl via een linkje als ze niet ingelogd zijn.

Maar ik doe wat verkeer ofzo, want hij dumpt het plaatje in binary op het scherm.
1. Je src van de img tag moet naar dat php script gelinkt zijn.
2. Je moet het juiste content type meegeven (regel 6 van Helmets script), dus heb je een gif plaatje: "images/gif", heb je een jpg plaatje: "image/jpg" etc. (deze kan je ook opzoeken door de array die getimagesize() teruggeeft te printen).

[ Voor 8% gewijzigd door Verwijderd op 19-07-2004 12:14 ]


Acties:
  • 0 Henk 'm!

  • igmar
  • Registratie: April 2000
  • Laatst online: 03-09 22:58

igmar

ISO20022

<trash>

[ Voor 99% gewijzigd door igmar op 19-07-2004 13:08 . Reden: Dit was al geroepen :) ]


Acties:
  • 0 Henk 'm!

  • Weng
  • Registratie: Juni 2001
  • Laatst online: 11-05-2024

Weng

Are y'all ready kids

Topicstarter
Hmm, ik kom er echt niet meer uit :? Ik heb nu het volgende:

index.php:
PHP:
1
2
3
4
5
6
7
8
9
10
<html>
<head><title></title></head>
<body>
<?php
    include('imageloader.php');
    $fileName = "testdir/untitled.jpg";
    print '<img src ="'.loadImageFromFile($fileName).'">';
?>
</body>
</html>

imageloader.php:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?
function loadImageFromFile($fileName)
{
    // open the file in a binary mode
    $fp = fopen($fileName, 'rb');
    
    // send the right headers
    header("Content-Type: image/jpeg");
    header("Content-Length: " . filesize($fileName));
    
    // dump the picture and stop the script
    fpassthru($fp);
}
?> 
Dit geeft bij mij binary op het scherm. Ik zie de img tags ook nergens in de html terug :?

Aye aye captain


Acties:
  • 0 Henk 'm!

  • HielkeJ
  • Registratie: Juli 2001
  • Niet online
Weng schreef op 19 juli 2004 @ 13:58:
Hmm, ik kom er echt niet meer uit :? Ik heb nu het volgende:

Dit geeft bij mij binary op het scherm. Ik zie de img tags ook nergens in de html terug :?
Je moet het script ook oproepen met
[img]"plaatjescript.php"[/img]

edit: Je komt anders te zitten met foute headers enzo :)

[ Voor 56% gewijzigd door HielkeJ op 19-07-2004 14:02 . Reden: uitleg ]


Acties:
  • 0 Henk 'm!

Verwijderd

Zo zal het ook niet gaan, je verstuurd nu een header terwijl er al html output is geweest (waarvoor ook een header nodig was), en twee header gaan niet samen ;).

Wat je wel kan doen:
index.php:
code:
1
2
3
4
5
6
<html>
<head><title></title></head>
<body>
[img]"imageloader.php?img=testdir/untitled.jpg"[/img]
</body>
</html>

imageloader.php:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?
$fileName = $_GET["img"];
if(file_exists($fileName))
{
    // open the file in a binary mode
    $fp = fopen($fileName, 'rb');
    
    // send the right headers
    header("Content-Type: image/jpeg");
    header("Content-Length: " . filesize($fileName));
    
    // dump the picture and stop the script
    fpassthru($fp);
}
?> 

[ Voor 13% gewijzigd door Verwijderd op 19-07-2004 14:03 ]


Acties:
  • 0 Henk 'm!

  • Weng
  • Registratie: Juni 2001
  • Laatst online: 11-05-2024

Weng

Are y'all ready kids

Topicstarter
HielkeJ schreef op 19 juli 2004 @ 14:01:
[...]

Je moet het script ook oproepen met
[img]"plaatjescript.php"[/img]

edit: Je komt anders te zitten met foute headers enzo :)
Had ik al gezegd dat ik n00b was? 8)7
Thnx, nu werkt het.

Aye aye captain

Pagina: 1