[PHP] Pagina niet direct laten openenen, altijd naar index

Pagina: 1
Acties:
  • 105 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Dit is een vraag dit eigenlijk wel in 3 subforums kan, Software, omdat je dit met htacces kan doen. Het eigenlijk een stukje HTML is, en aan de andere kant weer in PHP toegepast moet worden.

Simpel voorbeeld:

Ik heb in een directory 4 bestanden staan, header.php, footer.php, main.php en index.php.

Het is mogelijk om alle files apart te openen via de adres balk, iets wat ik niet wil. De index include alle bestanden, waarbij main.php variabel is en dus door andere bestanden vervangen kan worden.

Ik ben al aan het uitdokteren geweest hoe ik er voor kan zorgen dan je altijd op de index.php uit kan komen, maar .htaccess is nu niet direct mijn vriend, maar misschien wel op dit gebied (rewrites is namelijk lastig merkte ik afgelopen dagen).

Je kan met frames ook een trucje uithalen dat wanneer er een frame-pagina geopend wordt je altijd terug gaat naar de index. Aangezien dit allemaal HTML pagina's zijn is dit makkelijker denk ik dan met PHP.

Kan ik een PHP-gericht script bovenaan mijn files zetten die hetzelfde doen, of moet ik weer met htaccess aan de gang ?

Met .htaccess ben ik bang dat ik de files dusdanig beveilig dat ik ze ook niet meer kan includen.

Ben ik op de goede weg, of moet ik echt een kompleet ander idee toepassen ?

Acties:
  • 0 Henk 'm!

  • Pyrus
  • Registratie: November 2001
  • Laatst online: 20-09 21:30

Pyrus

Hardknock life

In het bestand van waar je uit include een variabele setten, in de te includen bestanden kijken of die var geset is, zo nee verwijzen naar index.php

dus, index.php:
PHP:
1
$vanuitindex=TRUE;


in de includes:
PHP:
1
2
3
4
if(!isset($vanuitindex))
{
header('location: index.php');
}

LinkedIn


Acties:
  • 0 Henk 'm!

  • Guru Evi
  • Registratie: Januari 2003
  • Laatst online: 24-08 19:45
Waarom zo moeilijk maken. Het volgende is waarschijnlijk niet volledig correcte code maar de denkwijze is.

Gewoon een variabele $frommain = "1"; in je hoofdpagina zetten en dan:

code:
1
2
3
if($frommain !== "1")  {
   redirect("index.php");
}

Pandora FMS - Open Source Monitoring - pandorafms.org


Acties:
  • 0 Henk 'm!

  • AtleX
  • Registratie: Maart 2003
  • Niet online

AtleX

Tyrannosaurus Lex 🦖

Niet getest:
PHP:
1
if (basename(__FILE__) === $_SERVER['SCRIPT_NAME']) {  die('geen toegang'); }


Maar het lijkt me makkelijker als je die bestanden buiten je webroot plaatst.

Sole survivor of the Chicxulub asteroid impact.


Acties:
  • 0 Henk 'm!

  • Sybr_E-N
  • Registratie: December 2001
  • Laatst online: 12:54
Is er geen mogelijkheid om die pagina's buiten de publieke www-root map te zetten, maar dan kun je er intern nog wel bij.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Bedankt voor alle snelle ideeen ! Met deze ideeen kan ik al een idee vormen over wat nog mer moeglijk is :)
Sybr_E-N schreef op dinsdag 18 juli 2006 @ 21:10:
Is er geen mogelijkheid om die pagina's buiten de publieke www-root map te zetten, maar dan kun je er intern nog wel bij.
Goed idee inderdaad. Ik bedoelde hier ook het htaccess-verhaal mee en tevens krijg ik nog een extra directory wat het minder overzichterlijk maakt maar wel perspectieven biedt !

Ik laat dit even over mee heen komen en zal op deze ideeen al vast wat verder zoeken. Fijn om te weten dat het extra folder-idee eigenlijk geen gek idee was.

Acties:
  • 0 Henk 'm!

  • Borizz
  • Registratie: Maart 2005
  • Laatst online: 24-08 20:35
Het makkelijkste lijkt me toch het gebruik van een .htaccess file die alleen het opvragen van index.php toestaat, dit is zeker mogelijk en lijkt me niet al te moeilijk (heb zo'n geen voorbeeld maar ik weet wel wat er mogelijk is).
Zoiets als hieronder zou al werken.. maar dan worden ook alle subdirectories en bestanden gerewrite naar index.php, die moe tje dus nog afvangen.
code:
1
2
RewriteEngine On
RewriteRule ^(.*)$ index.php?%{QUERY_STRING}

Het lijkt mij ook een nettere oplossing dan in elke file een stukje php code extra plakken.

[ Voor 3% gewijzigd door Borizz op 18-07-2006 21:29 ]

If I can't fix it, it ain't broken.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Borizz schreef op dinsdag 18 juli 2006 @ 21:28:
Het makkelijkste lijkt me toch het gebruik van een .htaccess file die alleen het opvragen van index.php toestaat, dit is zeker mogelijk en lijkt me niet al te moeilijk (heb zo'n geen voorbeeld maar ik weet wel wat er mogelijk is).
Zoiets als hieronder zou al werken.. maar dan worden ook alle subdirectories en bestanden gerewrite naar index.php, die moe tje dus nog afvangen.
code:
1
2
RewriteEngine On
RewriteRule ^(.*)$ index.php?%{QUERY_STRING}

Het lijkt mij ook een nettere oplossing dan in elke file een stukje php code extra plakken.
Ik snap er echt weinig van dat ik altijd syntaxfouten krijg met die rewrite-rules :? ligt dat aan mij of hoe zit dat ?

Acties:
  • 0 Henk 'm!

  • YopY
  • Registratie: September 2003
  • Laatst online: 13-07 01:14
Het makkelijkst is zoals eerder al aangegeven een variabele / constante aan te maken bovenaan index.php, boven de includes.

PHP:
1
2
3
4
5
6
7
8
9
10
<?php

define ('RUNNING', true);

include ('header.php');
include ('main.php');
include ('footer.php');
//etc

?>


en dan in header/footer/main etc

PHP:
1
2
3
4
5
6
7
8
<?php

if (!defined(RUNNING) || !RUNNING)
{
    exit('Illegal file access');
    // of
    header("Location: index.php");
}


Of buiten de webroot plaatsen, ja.

[ Voor 12% gewijzigd door YopY op 19-07-2006 09:47 ]


Acties:
  • 0 Henk 'm!

  • moozzuzz
  • Registratie: Januari 2005
  • Niet online
Variante op AtleX:
PHP:
1
2
3
4
5
6
if ($_SERVER['SCRIPT_NAME'] != 'index.php') // of $_SERVER['SELF']
{
    exit('Illegal file access');
    // of
    header("Location: index.php");
}
PHPNuke had in de tijd ook soortgelijke constructies.

[ Voor 62% gewijzigd door moozzuzz op 19-07-2006 10:01 ]


Acties:
  • 0 Henk 'm!

  • iMars
  • Registratie: Augustus 2001
  • Laatst online: 01:38

iMars

Full time prutser

Zoals al eerder gezegd is in deze topic, vind ik de DEFINE erg prettig.
In de index maak je een defined variabele aan, en in alle andere php files controleer je of die bestaat, zo niet, is het niet via de index aan geroepen en kan je redirecten.

Zoals YopY dus omschrijft!

Koop hier mijn P1 reader :)


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Opzich is define-variabele een moore oplossing, mocht het niet zo zijn dat ik dan header-problemen kan krijgen.

Ik kan hier wel een stuk javascript voor gebruiken om te redirecten, maar dan nog.... .htacces blijft moeilijk dus ?

Acties:
  • 0 Henk 'm!

  • Pyrus
  • Registratie: November 2001
  • Laatst online: 20-09 21:30

Pyrus

Hardknock life

Verwijderd schreef op woensdag 19 juli 2006 @ 11:23:
Opzich is define-variabele een moore oplossing, mocht het niet zo zijn dat ik dan header-problemen kan krijgen.

Ik kan hier wel een stuk javascript voor gebruiken om te redirecten, maar dan nog.... .htacces blijft moeilijk dus ?
Waarom nog met java script gaan rotzooien als de PHP-oplossing al de nodige keren gegeven is? Zorgt alleen maar voor incompatibiliteit met browsers die dat niet hebben....

LinkedIn


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Pyrus schreef op woensdag 19 juli 2006 @ 12:03:
[...]


Waarom nog met java script gaan rotzooien als de PHP-oplossing al de nodige keren gegeven is? Zorgt alleen maar voor incompatibiliteit met browsers die dat niet hebben....
Nou omdat ik gisteren met het testen van een van de scripts hier boven een "headers already sent" kreeg. Om dan de hele pagina te verversen moet je een soortement van refesh doen.. script dus.

Acties:
  • 0 Henk 'm!

  • Pyrus
  • Registratie: November 2001
  • Laatst online: 20-09 21:30

Pyrus

Hardknock life

Je moet die header ook boven aan je pagina zetten, voordat je welke output dan ook naar de browser stuurt. Dus:
PHP:
1
2
3
4
5
6
7
if(!isset($vanuitindex))
{
header('location: index.php');
}

print "Check my 1337 f00t3r in index.php! W00tW00t!";
///rest van je nuttige code


Bijvoorbeeld

en anders desnoods een meta-refresh, dat snapt dacht ik elke browser.

[ Voor 15% gewijzigd door Pyrus op 19-07-2006 12:25 ]

LinkedIn


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Pyrus schreef op woensdag 19 juli 2006 @ 12:24:
Je moet die header ook boven aan je pagina zetten, voordat je welke output dan ook naar de browser stuurt. Dus:
PHP:
1
2
3
4
5
6
7
if(!isset($vanuitindex))
{
header('location: index.php');
}

print "Check my 1337 f00t3r in index.php! W00tW00t!";
///rest van je nuttige code


Bijvoorbeeld

en anders desnoods een meta-refresh, dat snapt dacht ik elke browser.
Ik was al bezig met een metarefresh en consorte.. lijkt me een goed plan dit dan !

edit:


Toch blijf je in een loop hangen merk ik... vandaar misschien het header-probleem ?

Met een meta-refresh blijf je namelijk maar aan het refreshen :? (LOOP dus)

[ Voor 19% gewijzigd door Verwijderd op 19-07-2006 13:37 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Misschien in sommige ogen een wat ranzigere oplossing maar ob_start() doet denk ik precies wat je wilt.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Verwijderd schreef op woensdag 19 juli 2006 @ 14:07:
Misschien in sommige ogen een wat ranzigere oplossing maar ob_start() doet denk ik precies wat je wilt.
DIe had ik nu net helemaal weer weggewerkt uit de site... als er niets anders op zit :)

edit:
Gaat ook niet werken... je krijgt een eeuwige loop op die manier.. Firefox ziet dat direct al.

Het blijkt dus dat het script in the main.php en de header en de footer ook herhaald blijft worden wanneer deze in de index.php zijn geinclude.

Je krijgt gewoon een grote loop de hele tijd.

[ Voor 32% gewijzigd door Verwijderd op 19-07-2006 14:37 ]


Acties:
  • 0 Henk 'm!

  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
klein fixje in de defined-oplossing:

PHP:
1
if (!defined("RUNNING") || !RUNNING)


defined() wil natuurlijk een string ipv een al dan niet gedefineerde constante.

Verder doe ik zelf altijd een combi van defined en buiten de webroot plaatsen. Het kan immers zo zijn dat je bijvoorbeeld een library publiceert waarvan je niet weet of je gebruikers deze binnen of buiten hun webroot plaatsen. Ook kan het zo zijn dat je bijvoorbeeld een library/framework maakt wat er bij het includen van files vanuit gaat dat daarvoor al andere dingen zijn gebeurd.

Ik zie eigenlijk ook niet in waarom je een redirect zou sturen. Gewoon die() of exit() of evt. met een 404 gooien, bij normaal gebruik van je applicatie zou het namelijk toch nooit voorkomen.

Acties:
  • 0 Henk 'm!

  • Pyrus
  • Registratie: November 2001
  • Laatst online: 20-09 21:30

Pyrus

Hardknock life

Verwijderd schreef op woensdag 19 juli 2006 @ 14:18:
[...]


DIe had ik nu net helemaal weer weggewerkt uit de site... als er niets anders op zit :)

edit:
Gaat ook niet werken... je krijgt een eeuwige loop op die manier.. Firefox ziet dat direct al.

Het blijkt dus dat het script in the main.php en de header en de footer ook herhaald blijft worden wanneer deze in de index.php zijn geinclude.

Je krijgt gewoon een grote loop de hele tijd.
Je moet de meta refresh er ook niet altijd inzetten, alleen als je detecteert dattie het bestand niet geinclude heeft. En natuurlijk niet index.php zelf erbij zetten.

LinkedIn


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Genoil schreef op woensdag 19 juli 2006 @ 14:53:
klein fixje in de defined-oplossing:

PHP:
1
if (!defined("RUNNING") || !RUNNING)


defined() wil natuurlijk een string ipv een al dan niet gedefineerde constante.
Dit loste het op !!! Ik dank je hartelijk !
Verder doe ik zelf altijd een combi van defined en buiten de webroot plaatsen. Het kan immers zo zijn dat je bijvoorbeeld een library publiceert waarvan je niet weet of je gebruikers deze binnen of buiten hun webroot plaatsen. Ook kan het zo zijn dat je bijvoorbeeld een library/framework maakt wat er bij het includen van files vanuit gaat dat daarvoor al andere dingen zijn gebeurd.

Ik zie eigenlijk ook niet in waarom je een redirect zou sturen. Gewoon die() of exit() of evt. met een 404 gooien, bij normaal gebruik van je applicatie zou het namelijk toch nooit voorkomen.
Natuurlijk zou het nooit voor moeten komen, maar je kunt het toch doen, handmatig of door een search-engine die de pagina ergens opzoekt.

Ik denk dat het probleem helemaal is opgelost!

@Pyrus; Het zat dus in de string :)

[ Voor 3% gewijzigd door Verwijderd op 19-07-2006 15:38 ]

Pagina: 1