Hoe kan ik een wachtwoord zetten op bepaalde urls op mijn website met htacess?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Web Ontwikkelaar PHP, Nijmegen

Contactpersoon Roel Kavelaar rkavelaarATsearch-consult.nl 0243528815 0644949337 Organisatie Jong, gezond en sterk groeiende bedrijf dat webbased multimedia oplossingen bouwt in de omgeving Nijmegen. Het bedrijf bouwt voor klanten o.a. geavanceerde websites, webwinkels, webapplicaties en specifieke webbased software. Het bedrijf ontwikkelt en onderhoudt ook verschillende bekende Nederlandse websites. Op dit moment hebben zij een groeiende en brede klantenkring opgebouwd. Met betrekking tot programmeer-, onderhoud-, ontwerp-werkzaamheden wordt een PHP ontwikkelaar gezocht met kennis van contentmanagementsysteemen en frameworks. Locatie Nijmegen Verantwoordelijkheden (Her)Ontwerpen en (her)ontwikkelen in PHP ten behoeve van websites voor klanten, project klussen, onderhoud en specifieke klantwensen (Her)Ontwerpen en (her)ontwikkelen in PHP, PHP

Bekijk vacature »

Snelle Jaap

Snelle Jaap

21/12/2018 12:01:14
Quote Anchor link
Ik probeer via htaccess een wachtwoord op mijn website te zetten bij bepaalde urls (alleen waar /leden in staat).

Dat probeer ik met de volgende code:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
RewriteEngine on
DirectoryIndex
RewriteCond %{HTTPS} off [OR]
RewriteCond %{HTTP_HOST} ^www\. [NC]
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteRule ^ https://%1%{REQUEST_URI} [L,NE,R=301]

#Indexes uitzetten
Options -Indexes

#Cross site access toestaan
Header set Access-Control-Allow-Origin "*"
Header add Access-Control-Allow-Headers "origin, x-requested-with, content-type"

#CMS rewrite
RewriteRule ^cms/$ /cms/administrator [L]

#mysitename

DirectoryIndex index.php

SetEnvIf Request_URI ^leden/(.*).html auth=1

AuthName "Please login"
AuthType Basic
AuthUserFile "/home/mysitename/public_html/.htpasswd"

# first, allow everybody
Order Allow,Deny
Satisfy any
Allow from all
Require valid-user
# then, deny only if required
Deny from env=auth

RewriteRule         ^leden/(.*).html catlisting.php?alias=$1 [QSA,L]
RewriteRule         ^info/(.*).html catlisting.php?alias=$1 [QSA,L]
RewriteRule         ^events/(.*).html events.php?alias=$1 [QSA,L]
RewriteRule         ^projecten/(.*).html projecten.php?alias=$1 [QSA,L]
RewriteRule         ^product/(.*).html product.php?alias=$1 [QSA,L]
RewriteRule         ^catalogus/(.*).html catalogus.php?alias=$1 [QSA,L]
RewriteRule         ^(.*).html content.php?alias=$1 [QSA,L]

ErrorDocument 404 /error/404.php
ErrorDocument 403 /error/403.php
ErrorDocument 500 /error/500.php
ErrorDocument 501 /error/501.php
ErrorDocument 503 /error/503.php
ErrorDocument 504 /error/504.php


Alleen als ik naar een pagina toe ga, bijvoorbeeld https://mysite.nl/leden/vergaderstukken.html dan zie ik geen password popup. Wat doe ik precies verkeerd?
 
PHP hulp

PHP hulp

21/05/2019 01:43:50
Honeypot
 
- Ariën -
Beheerder

- Ariën -

21/12/2018 12:19:30
Quote Anchor link
Give it a try.
Maar ik houd mijn vingers gekruisd dat het met mod_rewrite lastig is. Maar waarom .htaccess, en geen PHP oplossing?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<Files "^leden/(.*).html">
AuthName "Please login"
AuthType Basic
AuthUserFile "/home/mysitename/public_html/.htpasswd"
</Files>
 
Thomas van den Heuvel

Thomas van den Heuvel

21/12/2018 15:11:25
Quote Anchor link
Quote:
/home/mysitename/public_html/.htpasswd

En voor het gebruikersgemak kan iedereen de .htpasswd file ook downloaden, cool.

EDIT: er wordt namelijk nergens voorkomen dat je .ht* bestanden kunt opvragen, dat zou ook in een allow/deny regel moeten staan, of nog beter, zet het in eerste instantie niet in de publieke webdirectory...
Gewijzigd op 21/12/2018 15:21:37 door Thomas van den Heuvel
 
- Ariën -
Beheerder

- Ariën -

21/12/2018 15:43:32
Quote Anchor link
Thomas van den Heuvel op 21/12/2018 15:11:25:
Quote:
/home/mysitename/public_html/.htpasswd

En voor het gebruikersgemak kan iedereen de .htpasswd file ook downloaden, cool.

Dat wordt al standaard in Apache tegengegaan hoor. Er bestaat ook configuratie op server-niveau dan enkel op user-niveau. Of ben je een Nginx gebruiker? ;-)

Persoonlijk vind ik dat dit netjes buiten de webroot hoort. En dus op een onbereikbare plek waar een bezoeker niet bij kan.
Gewijzigd op 21/12/2018 15:46:29 door - Ariën -
 
Thomas van den Heuvel

Thomas van den Heuvel

21/12/2018 16:14:10
Quote Anchor link
- Ariën - op 21/12/2018 15:43:32:
Dat wordt al standaard in Apache tegengegaan hoor. Er bestaat ook configuratie op server-niveau dan enkel op user-niveau. Of ben je een Nginx gebruiker? ;-)

Lijkt mij beter om dit expliciet, en wellicht ten overvloede, in te stellen, of nog beter:
- Ariën - op 21/12/2018 15:43:32:
Persoonlijk vind ik dat dit netjes buiten de webroot hoort. En dus op een onbereikbare plek waar een bezoeker niet bij kan.

Want dan heb je dit probleem in eerste instantie niet.
 
- Ariën -
Beheerder

- Ariën -

21/12/2018 16:50:41
Quote Anchor link
Apache kijkt enkel naar .ht*:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<Files ".ht*">
    Require all denied
</Files>

Dus een .htaccess bestand wordt gelijk behandeld als een .htpasswd.
Enkel een .htaccess bestand bepaalt de instellingen vanuit de directory waar deze in geplaatst is. Deze kan je dan niet eenvoudig of zelfs onmogelijk in een andere directory plaatsen. Maar gebruikersnamen en (ge-encrypte) wachtwoorden zijn al een verhaal apart. Die zou je altijd lekker buiten de webroot moeten plaatsen, ongeacht dat Apache het bekijken ervan blokkeert. Maar als het niet anders zou kunnen, dan voorkomt Apache in ieder geval dat je het zomaar kan downloaden. Met PHP kan je er overigens wel bij, als je het via het bestandssysteem doet.

Maar het had in mijn ogen wel netter gekund.
Gewijzigd op 21/12/2018 16:54:03 door - Ariën -
 
Thomas van den Heuvel

Thomas van den Heuvel

21/12/2018 17:12:02
Quote Anchor link
Dat snap ik en weet ik ook. Maar iets expliciet instellen is wat mij betreft altijd beter dan uitgaan van een default, die mogelijk niet de default is die jij verwacht, of mogelijk over tijd verandert zonder dat je er erg in hebt (denk bijvoorbeeld aan een upgrade).

Als je dit zelf configureert heb je deze problematiek nooit en hoef je de instellingen ook niet continu na te lopen om jezelf ervan te vergewissen dat deze inderdaad nog kloppen :p.
Gewijzigd op 21/12/2018 17:38:16 door Thomas van den Heuvel
 
- Ariën -
Beheerder

- Ariën -

21/12/2018 18:11:46
Quote Anchor link
Eigenlijk zou het blokkeren van het bekijken van configuratiebestanden niet instelbaar moeten zijn, en zou dit altijd al geblokkeerd moeten worden. Ik zou geen voorbeeld kunnen bedenken waarom je .ht* bestanden zou willen downloaden.

Maar we dwalen wel een beetje af, zo ;-)
 
Snelle Jaap

Snelle Jaap

24/12/2018 09:21:49
Quote Anchor link
- Ariën - op 21/12/2018 12:19:30:
Give it a try.
Maar ik houd mijn vingers gekruisd dat het met mod_rewrite lastig is. Maar waarom .htaccess, en geen PHP oplossing?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<Files "^leden/(.*).html">
AuthName "Please login"
AuthType Basic
AuthUserFile "/home/mysitename/public_html/.htpasswd"
</Files>


Ik hoopte dit eigenlijk snel en dirty even op te lossen met een .htaccess password, maar helaas werkt bovenstaande code ook niet dus zal ik het toch via PHP moeten doen.
 
Thomas van den Heuvel

Thomas van den Heuvel

24/12/2018 14:13:46
Quote Anchor link
Moet daar niet nog een Require regel achteraan, bijvoorbeeld:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
Require valid-user

En in de documentatie wordt begonnen met AuthType, niet AuthName. Wellicht is de volgorde van de argumenten ook belangrijk.

Een nettere -en waarschijnlijk uniformere- oplossing is nog steeds authenticatie in PHP zelf. Je hebt ook een /cms/administrator gedeelte? Hoe wordt die dan dichtgetimmerd? Kun je /leden niet op precies dezelfde manier beveiligen, maar met een "lid" rol of recht? Het klinkt alsof het een en ander nog niet helemaal uitgekristalliseerd is...
 
- Ariën -
Beheerder

- Ariën -

27/12/2018 10:39:50
Quote Anchor link
Voor zover ik weet kan je lastig uitloggen als je HTTP authenticatie gebruikt.
Enkel door de browser af te sluiten.

Het is leuk voor een tijdelijke beveiliging van een geheel project of bestand. Maar ik zie het niet als specifiek inlogsysteem. Ten eerste vanwege het uitloggen (wat ik al zei), het kent geen rollensysteem. Maar ook omdat je bijna metadata kan opslaan in je .htpasswd bestand. Je kan dan wel met een database werken, maar dan kan je weer net zo goed het hele inlogsysteem in PHP bouwen.
Gewijzigd op 27/12/2018 10:42:00 door - Ariën -
 
Adoptive Solution

Adoptive Solution

27/12/2018 11:06:59
Quote Anchor link
Uitloggen met http authenticatie gaat goed hoor.

Hier gevonden :

https://stackoverflow.com/questions/233507/how-to-log-out-user-from-web-site-using-basic-authentication

Hier code :

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<script>
// https://stackoverflow.com/questions/233507/how-to-log-out-user-from-web-site-using-basic-authentication

var logout_from = '../login.php/'; // dir or file to logout from
var to_url = '../'; // dir or file to goto

(function logout() {
    var userAgent = navigator.userAgent.toLowerCase();

    if (userAgent.indexOf("msie") != -1) {
        document.execCommand("ClearAuthenticationCache", false);
    }

    xhr_object = null;

    if(window.XMLHttpRequest)
        xhr_object = new XMLHttpRequest();
    else if(window.ActiveXObject)
        xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
    else
        alert ("Your browser doesn't support XMLHTTPREQUEST");

    xhr_object.open ('GET', logout_from, false, 'username', 'password');
    xhr_object.send ("");
    xhr_object = null;

    document.location = to_url; // redirect to the url
//    window.close(); // or close the window without a redirect
    return false;

})();

</script>
 
Snelle Jaap

Snelle Jaap

27/12/2018 12:10:29
Quote Anchor link
Bedankt voor de uitleg, komt misschien in de toekomst van pas maar nu heb ik het opgelost door het toch via PHP te doen.

@thomas Dat gedeelte is van mijn joomla cms, die regelt de hele boel dus al uit zichzelf.
Gewijzigd op 27/12/2018 12:11:20 door Snelle Jaap
 
Thomas van den Heuvel

Thomas van den Heuvel

27/12/2018 16:06:18
Quote Anchor link
Okay, maar dan moet je daar ook je oplossing zoeken, in plaats van om Joomla heenmetselen. In Joomla kun je toch prima een rol bijmaken? Wellicht heeft Joomla inmiddels zoiets als een sitetree (het is een eeuw sinds ik dat ding voor het laatst heb gebruikt) maar anders zou je een menu kunnen ge/misbruiken om een soort van boomstructuur aan te leggen? En vervolgens (niet mooi maar wel effectief) zou je op grond van die structuur beslissingen kunnen nemen of iemand toegang heeft of niet. Zo zou je kunnen hardcoden dat iedereen die iets onder /leden wil zien een bepaald recht of rol moet hebben. Niet mooi of ideaal, maar het zal in ieder geval werken. En wellicht heeft Joomla inmiddels meer middelen tot zijn beschikking om dit te doen, mogelijk kun je (of kon je al) vereiste rollen/rechten ophangen aan individuele pagina's o.i.d.. Zorg in ieder geval dat je de Joomla-manier gebruikt of hier in ieder geval (zoveel mogelijk) gebruik van maakt, maar ga niet buiten het systeem ombouwen. En ga dus altijd via een plan te werk.

En als je dat niet kunt, wilt of lukt dan zou je je natuurlijk ook af kunnen vragen waarom je Joomla in eerste instantie gebruikt. Ik vond het zelf een verschrikkelijk onhandig systeem.
 
Snelle Jaap

Snelle Jaap

27/12/2018 16:24:03
Quote Anchor link
Het was de bedoeling een supersimpele login te maken met maar 1 user die altijd hetzelfde is. Dus het werkt prima zo. Joomla gebruik ik eigenlijk alleen de basis van, gebruikers kunnen via joomla menu items aanmaken e.d. en dan haal ik die aanpassingen zelf uit de joomla database en gebruik die data aan de voorkant met mijn eigen code. Het is dus geen joomla cms met een joomla voorkant, zo'n beetje 70% van de cms functionaliteiten heb ik eruit gehaald.
 
Thomas van den Heuvel

Thomas van den Heuvel

27/12/2018 16:34:03
Quote Anchor link
En waarom bouw je dit niet zelf als je Joomla nauwelijks gebruikt? Je moet je realiseren dat je je wel een erfenis op de hals haalt op het moment dat je een volledig open source content management systeem als basis gebruikt om andere dingen te bouwen. Je zult dan op de hoogte moeten blijven van patches, security, lekken et cetera. Als je je Joomla-installatie in eerste instantie al onderhoudt?

Heb je bij wijze van test of gedachtenexperiment wel eens geprobeerd om in te schatten hoeveel tijd het kost om de functionaliteit die jij van Joomla gebruikt zelf te bouwen? Toen ik met Joomla werkte kon ik daar niet echt boomstructuren in kwijt (behalve door misbruik te maken van menu's) en aangezien jij een eind op weg bent met het bouwen van eigen structuren die meer dan één niveau diep zijn zou ik mijzelf hardop de vraag stellen of Joomla je niet meer in de weg zit dan tegemoet komt.
 
Snelle Jaap

Snelle Jaap

28/12/2018 12:37:41
Quote Anchor link
** quote-knip **

Klopt. Voorlopig gaat het prima maar in de toekomst is het inderdaad handig zelf iets te bouwen.
Gewijzigd op 28/12/2018 12:41:53 door - Ariën -
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.