[PHP/Mysql] Pagina's uit de DB hallen

Pagina: 1
Acties:

Onderwerpen


Verwijderd

Topicstarter
Ik ben bezig met het bouwen van een wbesite. Hiervoor gebruik ik alleen 1 PHP pagina en daarnaast een MySQL database.

Ik wil dat de index.php alles uit de database plukt. Dat als ik: index.php?page=plomp aangeef dat hij alles van plomp laat zien op de pagina.

Nu heb ik dat allemaal werkend. Alles wat ik aangeef haalt hij uit de database. Er is echter alleen 1 probleem. Ik kan geen script's in de mysql database gooien.

Ik heb een domein search tool op de website. en dan is het bijvoorbeeld: index.php?page=domein en dan zie je form.. En bij het verzenden moet het worden: index.php?page=domein&actie=domeinsearch

nu krijg ik die linken allemaal werkend. Maar hoe kan ik de script in mijn mysql zetten:

if($actie == 'domeinsearch')
{
echo "bla";
}
else
{
echo "domein search form";
}

Want als ik een script in mijn db zet.. Word hij niet uitgevoerd. Ik krijg hem dan gewoon volledig op m'n website te zien:?

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 16-09 09:15

Janoz

Moderator Devschuur®

!litemod

Misschien is het handiger om nog een keertje goed over je ontwerp na te denken. Wat is uberhaupt het nut om dit soort dingen nu in een DB op te slaan? Ik zie alleen maar nadelen aan je huidige systeem ten opzichte van losse bestanden.

Wat je wilt is wel mogenlijk, en daarvoor zul je naar de eval functie moeten kijken, maar een nette oplossing is dit absoluut niet.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • soepkip
  • Registratie: Augustus 2000
  • Laatst online: 11-09 14:37

soepkip

Kratjes kunnen nu ook voorin

Ik geef een tip,
Templates

Beste film ooit


Verwijderd

Dat heeft ie in feite al... index.php
Je kan natuurlijk geen scripts in een database zetten.
De scripts moet je includen uit een ander .php-bestand. Als je die hebt kun je die aan de hand van verkregen variabelen als "domeinsearchform" invullen en dan kun je de dingen uit de db gaan halen. Of bedoel je dat niet?

[ Voor 5% gewijzigd door Verwijderd op 21-08-2003 11:11 ]


Verwijderd

Topicstarter
ik heb het ook al veranderd. op het moment dat ze opvragen: index.php?page=home dan gebruikt hij een include("home.php");
en als ze index.php?page=domein opvragen krijgen ze:
include("domein.php");

andere worden heb het dus maar veranderd naar meerdere pagina's

Verwijderd

maar index.php dient dus wel als template?
En als die domeinsearch aangeroepen wordt? Dan wil jij dus dat een een 'script' uit de db include?

Verwijderd

let je er wel op dat mensen op deze manier een php bestand vanaf een andere server kunnen includen en zo volledige toegang krijgen tot jouw server?

Verwijderd

Topicstarter
Verwijderd schreef op 21 August 2003 @ 11:26:
let je er wel op dat mensen op deze manier een php bestand vanaf een andere server kunnen includen en zo volledige toegang krijgen tot jouw server?
Hoe bedoel je dat???

Wat ik doe is:

if(isset($page));
{
include("$page.php");
}
else
{
include("home.php");
}

moet nog wat veranderen omdat als $page niet bestaat hij ook home.php geeft maar goed gaat het nu niet om.

Een andere ja. Zou het kunnen include.. Maar dan krijgen ze nog een deel van mijn layout mee. want sommige picture/tabels etc. worden wel gewoon in de $page gezet en niet in de index...

Verwijderd

Controleer je wel de waarde van $page voordat je die variabele in de string van de naam van het te includen bestand stopt?

Stel je voor dat iemand op het briljante idee komt om iets als
index.php?page=http://mijndomein/maliciouscode te gaan opvragen

Verwijderd

Topicstarter
Verwijderd schreef op 21 August 2003 @ 14:34:
Controleer je wel de waarde van $page voordat je die variabele in de string van de naam van het te includen bestand stopt?

Stel je voor dat iemand op het briljante idee komt om iets als
index.php?page=http://mijndomein/maliciouscode te gaan opvragen
Ik heb voor de grap even index.php?page=http://domein.ext/script/form gedaan. Die form eindigd officieel op php maar omdat mijn script dat al invult .. Maar euh Ik kreeg terug:
Warning: Failed opening 'http://domein.ext/script/form.php' for inclusion (include_path='.:/usr/local/lib/php') in /www/htdocs/gdesign/test4/index.php on line 103

Maar euh hoe kan ik dat dan 100% zeker weten? en hoe kan ik dat dan het beste afschermen tegen dat soort dingen? en dat andere mensen gaan include?

-------------
SH*T... Ik heb het met nog een andere .php pagina geprobeerd. En mooi dat hij er door heen geduwd werd.. Hoe beveilig ik dit?
---------------

[ Voor 11% gewijzigd door Verwijderd op 21-08-2003 15:03 ]


Verwijderd

Verwijderd schreef op 21 August 2003 @ 14:59:
[...]


Maar euh hoe kan ik dat dan 100% zeker weten? en hoe kan ik dat dan het beste afschermen tegen dat soort dingen? en dat andere mensen gaan include?
De waarden van je pagina's (de namen) in een array zetten en daarop checken

edit:

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// geldige pagina's, door jou te definieren
$paginas = array('home', 'info', 'contact', 'enz');

// $page gezet?
if(!isset($page));
{
$page = "home";
}

// geldige pagina?
if (in_array($page, $paginas)
{
include("$page.php");
} else
{
exit("Deze pagina bestaat niet!");
}

[ Voor 86% gewijzigd door Verwijderd op 21-08-2003 15:09 ]


Verwijderd

Zorg dat je zeker weet dat $page een waarde heeft die weinig kwaad kan. Als $page bijvoorbeeld alleen letters, cijfers, streepjes, underscores en punten mag bevatten, dan kan een kwaadwillend persoon al niet veel meer.

Je kunt gebruik maken van bijvoorbeeld regular expressions om toegestane teken patronen toe te passen, of je kunt de namen van alle beschikbare pagina's in een array of database stoppen, en controleren of die pagina wel voorkomt.

Hoe dan ook, controleer die waarden, en ga er niet mee aan de gang voordat je zeker weet dat het geen kwaad kan om iets te includen.

  • TRON
  • Registratie: September 2001
  • Laatst online: 16-09 13:13
Hiervoor gebruik ik meestal:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function fnc_file_include($filename)
  {
        if(!$filename)
      { 
        return "main.php";
      } 
      else
      { 
        if(file_exists($filename.".php") && !ereg("/", $filename)&& !ereg("\\", $filename))
          { 
            return $filename.".php"; 
          } 
        else
          { 
            echo fnc_error(2, $filename.".php");  
          } 
      }
  }

include (fnc_file_include ($_GET["page"]));


Waarbij ik de functie(s) in een andere file heb staan die ik include in de index.


edit: alhoewel het beter zou zijn om te zeggen wat er WEL mag... en niet wat er NIET mag... denk ik.

[ Voor 17% gewijzigd door TRON op 21-08-2003 15:44 ]

Leren door te strijden? Dat doe je op CTFSpel.nl. Vraag een gratis proefpakket aan t.w.v. EUR 50 (excl. BTW)


Verwijderd

Topicstarter
ik heb nu ter bescherming bij home.php:

PHP:
1
2
3
4
5
6
7
8
9
10
11
<?php
$host = getenv("HTTP_HOST");
if($host == "www.mijndomein.nl")
{
   echo "pagina source";
}
else
{
Echo "U probeerd deze pagina illegaal te openen";
}
?>


neem aan dat dat wel veilig genoeg is??? of kunnen ze het dan alsnog opvragen via een andere manier?

Lol.. Ik heb net getest op een andere webite of het zou werken.. Nou.. Het enige wat dan tegengehouden word is de layout maar voorderest werkt de include perfect (vanaf een andere domein.. Ofwel mijn script is lek aan alle kanten.:s

[ Voor 51% gewijzigd door Verwijderd op 21-08-2003 15:55 ]


  • OkkE
  • Registratie: Oktober 2000
  • Laatst online: 04-09 08:16

OkkE

CSS influencer :+

Ik snap niet wat er mis is met ivy zn script. Dat kijken of de waarde die ingevuld is wel mag, en zo ja; opend de bijbehorende file.

En anders het script van TRON, die kijkt of de file bestaat, en zo ja; wordt die ge-include. Ook nix mis mee lijkt me.
Zeker als je ook een regular-expresion eraan hangt zodat je de eventuele http:// ervoor weg haalt.

[ Voor 1% gewijzigd door OkkE op 21-08-2003 16:48 . Reden: Typo: stond "ivo" in plaats van "ivy" ]

“The best way to get the right answer on the Internet is not to ask a question, it's to post the wrong answer.”
QA Engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 999999999 beers. Orders a lizard. Orders -1 beers.


Verwijderd

Topicstarter
OkkE schreef op 21 August 2003 @ 16:17:
Ik snap niet wat er mis is met ivy zn script. Dat kijken of de waarde die ingevuld is wel mag, en zo ja; opend de bijbehorende file.

En anders het script van TRON, die kijkt of de file bestaat, en zo ja; wordt die ge-include. Ook nix mis mee lijkt me.
Zeker als je ook een regular-expresion eraan hangt zodat je de eventuele http:// ervoor weg haalt.
sorry.. ik begrijp je niet?? Ik heb die van ivy ook zo gebruik in mijn pagina. En dat werkt ook perfect. Maar dat include daar gaat het me nu om. Ik wil niet dat andere mensen m'n pagina's op hun site kunnen include

ofwel.. laat alleen home.php zien als www.domein.com/index.php hem opvraagt.

anders: U bent bezig met een illegale actie.


PHP:
1
2
3
4
5
6
7
8
9
10
11
<?php 
$host = getenv("HTTP_HOST"); 
if($host == "www.mijndomein.nl") 
{ 
   echo "pagina source"; 
} 
else 
{ 
Echo "U probeerd deze pagina illegaal te openen"; 
} 
?> 


echter is hier dan het probleem dat als iemand anders hem include. Dat deze op www.mijndomein.nl geopend wordt en dus.. beveiliging van niks is.

[ Voor 27% gewijzigd door Verwijderd op 21-08-2003 18:06 ]


  • Macros
  • Registratie: Februari 2000
  • Laatst online: 15-05 16:29

Macros

I'm watching...

Flyer, lees dit goed.
Je hebt php files in je database. Wil je die draaien, gebruik dan eval();
Ga die niet includen met een andere pagina. Doe dat NOOIT. Mensen kunnen dan je code lezen en dat wil je nooit.

"Beauty is the ultimate defence against complexity." David Gelernter


Acties:
  • 0 Henk 'm!

  • Roa
  • Registratie: December 2002
  • Laatst online: 03-07-2024

Roa

Flyer, lees dit goed.
Je hebt php files in je database. Wil je die draaien, gebruik dan eval();
Ga die niet includen met een andere pagina. Doe dat NOOIT. Mensen kunnen dan je code lezen en dat wil je nooit.
Als je het topic gelezen had, had je gezien dat hij al lang van dat idee is afgestapt.

@ Flyer:
sorry.. ik begrijp je niet?? Ik heb die van ivy ook zo gebruik in mijn pagina. En dat werkt ook perfect. Maar dat include daar gaat het me nu om. Ik wil niet dat andere mensen m'n pagina's op hun site kunnen include
Die heb je niet :P, je zet daaronder nog die hele andere code neer!

Die code van ivy is 100% waterdicht, waarom? omdat je alle mogelijk include pagina's in een array hebt staan. (dus alle pagina's waarvan jij zegt: die mogen geinclude worden). Hierdoor is het onmogelijk om een ander domein in te voeren, of een andere file.

Zeer simpel, uiterst doeltreffend!

Research is what I'm doing when I don't know what I'm doing.

Pagina: 1