1 2 3 4 5 6 | [boot loader] timeout=30 default=multi(0)disk(0)rdisk(0)partition(3)\WINDOWS [operating systems] multi(0)disk(0)rdisk(0)partition(3)\WINDOWS="Microsoft Windows XP Professional" /fastdetect multi(0)disk(0)rdisk(0)partition(1)\WINNT="Microsoft Windows 2000 Professional" /fastdetect |
1 2 3 4 5 | [boot loader] timeout=30 default=multi(0)disk(0)rdisk(0)partition(1)\WINNT [operating systems] multi(0)disk(0)rdisk(0)partition(1)\WINNT="Win 2K" /fastdetect |
Stap 2: Start het programma Paint. Doe dat met Start -> Programma's -> Bureau Accesoires -> Paint.quote:Clipboard
An area used to temporarily store cut or copied information. The Clipboard can store text, graphics, objects, and other data. The Clipboard contents are erased when new information is placed on the Clipboard or when the computer is shut down.
Oftewel, op het klembord wordt geknipte of gekopiëerde informatie tijdelijk bewaard.
Als deze pagina aangeroepen wordt met 'pagina.php?tekst=hallo', dan zal de output ook 'hallo' zijn. Dit is erg handig en gebruiksvriendelijk van PHP, maar helaas niet erg professioneel. Sterker nog, het wordt ten zeerste afgeraden om zo te werk te gaan. Dit is de reden waarom sinds PHP 4.2.0 de waarde van register_globals standaard op 'off' staat. Veel webservers hebben deze waarde nog op 'on' staan, als je achter de waarde wilt komen kun je ini_get() of phpinfo() gebruiken.quote:<?
echo $tekst;
?>
Stel dat je deze pagina oproept met 'pagina.php?toegang=okay', dan wordt de variabele $toegang al gedefinieerd met de waarde 'okay' voordat het scriptje start. Zo kan iemand dus in staat zijn gevaarlijke code uit te voeren door simpelweg variabelen te 'injecten' als register_globals aanstaat.quote:<?
if (user_heeft_toegang()) {
$toegang = 'okay';
}
(...)
if ($toegang == 'okay') {
//voer gevaarlijke code uit
}
?>
Dit simpele formuliertje bestaat uit een tekstvak en een submit-knop. Zodra je op 'Verstuur' drukt verstuurt je browser de POST-gegevens door naar de webserver en komen de gegevens bij je scriptje terecht. Om die gegevens in te lezen maak je gebruik van de globale variabele $_POST:quote:<form action="pagina.php" method="post">
<input type="text" name="waarde" />
<input type="submit" value="Verstuur" />
</form>
Om erachter te komen of bepaalde data uit een POST-formulier is verzonden kun je simpelweg gebruik maken van isset():quote:<?
//dit is wat register_globals in feite doet,
//maar op deze manier werkt het altijd (en veilig)
$waarde = $_POST['waarde'];
echo $waarde;
?>
In het voorbeeld wordt gebruik gemaakt van 'method="post"', je kunt hier ook 'method="get"' van maken om de data via de URL te versturen; zie beneden voor meer informatie.quote:<?
if (isset($_POST['waarde'])) {
...
}
?>
Je moet dus een 'enctype'-parameter definiëren om het te laten werken. Hierdoor stel je de browser in staat om de bestanden goed door te sturen naar de webserver, die ze vervolgens doorgeeft aan je scriptje. Bestanden kunnen worden benaderd door de globale variabele $_FILES:quote:<form action="pagina.php" method="post" enctype="multipart/form-data">
<input type="file" name="bestand" /><br />
<input type="text" name="waarde" /><br />
<input type="submit" value="Verstuur" />
</form>
Hierbij zijn is_uploaded_file en move_uploaded_file handige functies.quote:<?
$waarde = $_POST['waarde'];
if (isset($_FILES['bestand'])) {
$bestand = $_FILES['bestand'];
echo $bestand['name'];
}
?>
Deze kun je achterhalen d.m.v. de globale variabele $_GET:quote:pagina.php?waarde=100
Hoe zit dat met cookies?quote:<?
$waarde = $_GET['waarde'];
echo $waarde;
?>
Let op: je gebruikt setcookie() voor enige output van PHP; dus voordat je iets echo()'ed of HTML output. Dit komt doordat cookies in de header van de webserver naar de browser worden gestopt, en deze wordt ook voor de daadwerkelijke pagina verstuurd. Om cookies te achterhalen maak je gebruik van de globale variabele $_COOKIE:quote:<?
//zet de waarde '1' in de cookie 'visited'.
//na een dag (86400 seconden) wordt hij verwijderd
setcookie("visited", "1", time() + 86400);
?>
Hoe gebruik ik sessies op de juiste manier?quote:<?
if ($_COOKIE['visited'] == "1")
echo "Je bent hier vandaag al eens eerder geweest ";
//en om een cookie te verwijderen
unset($_COOKIE['visited']);
?>
Sessies lopen gewoonlijk door totdat je de browser sluit; een vaak gebruikte methode om sessies langer aan te laten houden is de session id in een cookie op te slaan en deze later weer op te roepen. Het kan zijn dat PHP een zgn. URL rewriter gebruikt om alle links in je pagina's te voorzien van een '?PHPSESSID='; dit is een methode om de session id bij te houden.quote:<?
session_start();
$_SESSION['waarde1'] = "blaat";
$test = $_SESSION['test'];
unset($_SESSION['verwijderdezemaar']);
?>
Hoe zet ik een al bestaand scriptje om?quote:<?
//zoals...
$ip = $_SERVER['REMOTE_ADDR'];
$script = $_SERVER['PHP_SELF'];
$vandaan = $_SERVER['HTTP_REFERER'];
$browser = $_SERVER['HTTP_USER_AGENT'];
//en niet te vergeten, voor HTTP-authenticatie:
$user = $_SERVER['PHP_AUTH_USER'];
$wachtwoord = $_SERVER['PHP_AUTH_PW'];
?>
Mocht het spaghetticode zijn en weet je absoluut niet meer hoe het in elkaar zat, dan is het misschien het beste om dat scriptje opnieuw te maken terwijl je de punten uit deze FAQ aanhoudt. Goed in de gaten hebben hoe je scriptje werkt en waar alle data vandaan komt is natuurlijk erg belangrijk als je een goede scripter wilt worden.quote:<?
//deze komt van 'n formulier
$naam = $_POST['naam'];
//deze halen we uit een cookie
$tijd = $_COOKIE['tijd'];
//deze was gewoon fout
if ($PHP_SELF == 'blaat.php') {
if ($_SERVER['PHP_SELF'] == 'blaat.php') {
?>
Variable injections kom je vooral tegen in de vorm van hacks in SQL-queries, waar in het ergste geval een gebruiker complete controle over je database krijgt. Opgepast dus.quote:<?
$toegestaan = false;
if (user_heeft_toegang()) {
$toegestaan = true;
}
if ($toegestaan) {
//gevaarlijke code
}
//we willen niet dat iemand na dit punt de
//variabele $count heeft gedefiniëerd
unset($count);
?>
Forum Opties | |
---|---|
Forumhop: | |
Hop naar: |