Archive for the “PHP” Category

Some people do this in their code to check if the user is logged in:

 redirect
if(!isset($_SESSION['loggedIn']) || $_SESSION['loggedIn'] == false)
{
	header(sprintf("Location: http://%s/login.php", $_SERVER['SERVER_NAME']));
}

//Handle POST input for CMS
if(blah)
{
	//delete stuff
}

//display the rest of the page
?>

You get the point.

This is NOT as secure as you might think. You are depending on the user’s browser to redirect to that particular page.

Should the browser be set to ignore that, they can view your page.

I’ve got this concept code:

Then you open a telnet connection to that particular page, for this example it’s index.php on localhost:

  • Open cmd
    • Start > cmd
  • telnet to localhost
    • Type
      telnet localhost 80
  • Set the parameter
    • Press Control + ]
    • Type
      set localecho
    • Hit enter
  • Send the HTTP request
    • Type
      GET / HTTP/1.1
    • Hit enter
    • Type
      Host: localhost
    • Hit enter twice

You’ll see the following result:

HTTP/1.1 302 Redirect
Content-Type: text/html; charset=UTF-8
Location: http://www.google.com
Server: Microsoft-IIS/7.0
X-Powered-By: PHP/5.2.9-1
Set-Cookie: ZDEDebuggerPresent=php,phtml,php3; path=/
X-Powered-By: ASP.NET
Date: Tue, 14 Apr 2009 20:19:22 GMT
Content-Length: 156


                                          

Object Moved

This docume nt may be found hereSecure stuff Connection to host lost.

As you can see the ‘Secure stuff’ sentence is still printed. This is only 1 line, but it is possible that you display a whole page, and this can be exploited by a hacker.

So what can you do?

  • Add a die() after the header
  • Put the rest of the page in the else block
  • Check if user is logged in in each POST which accesses secure stuff.

The last one is a little harder, since you have to do it on every if statement. I’d go with the first, but the second is as good.  If you use the last one: remember that the hacker still can see the whole page, which might give him sensitive information.

Comments 1 Comment »

While reading on PHP security here on my internship I stumbled on this article on PHP.net: www.php.net/magic_quotes .

They finally decided to remove this features. This will break A lot of websites though when they update to this version.

That’s sad about PHP, they hacked it together but there was no straight line in the development.

Though PHP has some good Frameworks right now, and some great development tools.

A framework I really like is Zend Framework.

And as IDE I use Visual Studio with VS.PHP :)

I dislike Zend Studio because it’s built on Eclipse, and thus Java.

Comments 1 Comment »

Daarnet was ik mijn harde schijf aan het uitpluizen, en kwam dit oude documentje tegen:

");
	print("
");
	print("...");
	print("

");

	//en dan bij de submit checken of empty($_POST['zpam']); ja->user->ok, nee->spambot->die();
	//voordeel: geen userintereactie
	//nadeel: wat als de spambot css ondersteund?
	//nadeel2: user MOET css hebben, anders vult hij het ook in. Eventueel er een label bijzetten 'Vul dit niet in'
	//en die ook hidden met css

	//----------------------------------------------------------------------------------
	//deze is ook soms fijn :+
	print("
"); print("..."); print("
"); //dus de eerste keer als op het form wordt geklikt, veranderd de action. //voordeel: geen userinteractie //nadeel: wat als de bot JS heeft? //nadeel2: wat als de user geen JS heeft? //---------------------------------------------------------------------------------- print("
"); print("..."); print("
"); //en op het einde van u pagina doet ge dit: ?>

Laat me weten wat ge ervan vind :)

Comments No Comments »

Ik verveelde mij, dus heb ik maar even een functie geschreven die de tijd tot u volgende verjaardag berekend:

 $verjaardag)
        {
            //verjaardag is al geweest -> on to the next year
            $verjaardag = mktime(0, 0, 0, $maand, $dag, (date("Y", time()) + 1));
        }

        $seconden = $verjaardag - $nu;

        $minuten = $seconden / 60;
        $minuten = (int)$minuten;

        $seconden = $seconden - ($minuten * 60);

        $uren = $minuten / 60;
        $uren = (int)$uren;

        $minuten = $minuten - ($uren * 60);

        $dagen = $uren / 24;
        $dagen = (int)$dagen;

        $uren = $uren - ($dagen * 24);

        return sprintf("Nog %d dagen, %d uren, %d minuten en %d seconden tot verjaardag", $dagen, $uren, $minuten, $seconden);
    }

    if(isset($_POST['dag']) && isset($_POST['maand']) && is_numeric($_POST['dag']) && is_numeric($_POST['maand']))
    {
        printf("Uw verjaardag: %s", tijdTotVerjaardag($_POST['dag'], $_POST['maand']));
    }
?>
Dag:
Maand:
Bereken:

Ik denk niet dat ik moet uitleggen hoe dat ge het moet gebruiken :)

Online voorbeeld vind ge hier.

Comments No Comments »

Ik schrijf deze tutorial voor personen, die net als ik heel wat problemen hebben met een programma als dit te installeren. Gemakkelijk is het niet.

We hebben een aantal dingen nodig:

  • Een werkende Apache 2 installatie
  • Een werkende PHP installatie
  • (eventueel) een MySQL installatie

Voor de bovenstaande dingen kan ik u verwijzen naar XAMPP.

Anyway, on to the next requirement: de Zend debugger.

Download deze hier. Als ge de zip opent krijgt ge dit:

Zend Debugger Zip

De dummy.php die ik heb geselecteerd zet ge in de root van u webserver. Going on:

Let’s assume dat u PHP is geinstalleerd in C:\PHP. (of C:\xampp\php\ als ge XAMPP gebruikt)

In de map 5_2_x_comp vind ge ZendDebugger.dll. (nog steeds in het archief) Zet deze file in C:\PHP\. (of C:\xampp\php\)

Open u php.ini (in C:\PHP\php.ini, of C:\xampp\php\php.ini), en plak dit er op het einde aan vast:

zend_extension_ts=c:/php/ZendDebugger.dll
;of, als ge xampp gebruikt, comment de regel hierboven, en uncomment de regel hieronder
;zend_extension_ts=C:/xampp/php/ZendDebugger.dll
zend_debugger.allow_hosts=127.0.0.1
zend_debugger.expose_remotely=always

Mooi, nu is de debugger geinstalleerd!

Nu downloaden we Zend Neon: klik hier!

Ga nu naar de keuken, zet een tas koffie, en als die klaar is, zal u download klaar zijn :)
De installatie is eigenlijk perfect, ge opent de installer, en klikt constant op next, next, next, …, finish.

Next up: Zend Neon opstarten, wat verschrikkelijk moeilijk is! Dubbelklikken op het icoontje op de desktop!

Ok, Zend is normaal opgestart, en ge krijgt een mooi welkomscherm. Sluit dat, zinloos! Dan krijgt ge dit:

Zend Neon Mainscreen

Zonder code natuurlijk :)

Nu gaan we een nieuw project aanmaken:

File > New > PHP Project. Geef het een naam, en dan komt het ‘moeilijke’: ge moet het pad aanpassen, dus ipv het default pad te kiezen, past ge het pad aan, en zet ge da in de root van u webserver (c:\Apache\htdocs\, wat ge hebt gekozen bij de installatie van Apache)

Zend Neon New PHP Project

En dan gewoon op Finish klikken :) Project klaar.

Nog wakker? Ja -> lees verder. Nee? Dan komt de koffie van pas. Nu verder lezen!

Windows > Preferences. En dan onder: General > Webbrowser. Use external browser.

Nu kunt ge code schrijven, breakpoints toevoegen en dergelijke, en dan via de toestencombinatie ‘Control + Shift + X‘, en dan ‘W‘ het script debuggen in de webbrowser.

Ook is dat mogelijk via de Zend Toolbar, die is meegeinstalleerd, waarmee ge POST kunt debuggen en derlijke. Succes!

Met dank aan Jan voor te testen, en voor het verwijzen naar XAMPP.

Comments No Comments »

Ik ben al een hele tijd beta-tester van Zend Neon.

Zend Neon is de opvolger van DE PHP IDE Zend Studio 5.5.

Even een kleine opsomming van de features:

  • Ondersteuning voor het Zend Framework
  • Ondersteuning voor het verbinden naar databases, en tabellen aanpassen en dergelijke
  • Ondersteuning voor alle PHP functies, met de bijhorende informatie
  • Enz.

Als ge dat leest hebt ge echt iets van ‘wauw’, this is it.

Ik heb een hele tijd met Zend Studio 5.5 gewerkt, fantastisch, werkte gewoon, publishen, debuggen en dergelijke. Retestabiel. Welliswaar ongelofelijk traag door de Java source. Maar dat nemen we erbij, een IDE start ge toch maar ~2 keer per dag op.

Ik was dus verwent!

Toen: Zend Neon, de opvolger, gebaseerd op de codepath van Eclipse. In eerste instantie was ik sceptisch, ik hou niet zo van verandering. Maar gelukkig had ik al gewerkt met Eclipse voor Java.

Anyway, we begonnen met Beta 2. Opstarten, beetje zoeken, projectje toevoegen, debugger op webserver installeren, coderen, debuggen. Het werkte allemaal.

De bugs die in de Beta 2 zaten:

  • Bij het opstarten waren bepaalde delen wit van de openstaande code, daarvoor moest ge even het venster sluiten en opnieuw openen.
  • Bij Browser Output, stond de scrollbar in het midden.
  • Openstaande projecten waren gesloten na het opnieuw opstarten van Zend Neon
  • Include paths werden niet geresolved bij projecten, oplossing: project openen, refreshen, sluiten, opnieuw openen.
  • Code gallery opties werkte NIET.
  • Code Analyzer opties werkte NIET.
  • Heel lang builden van PHP project

Bon, Beta 2, daar mogen heel wat bugs inzitten.

Paar dagen geleden kwam dan de Final uit. Even geformatteerd, was toch nodig, en alleen zo kon ik een klare kijk krijgen over de opgeloste bugs.

Wat is er dan opgelost?

  • Code Gallery opties laadt na lange tijd
  • Builden van een PHP project is heel veel versneld

That’s it!

Ik heb het gevoel dat ik hier aan het werken met een Beta 3, rap rap gerushed tot release om toch maar al te gaan cashen (mensen kochten geen licenties meer aan voor de 5.5, omdat de upgrade eraan kwam).

Men had beter nog een tussentijdse release gemaakt!

Er zit nog zoveel meer oppertuniteit in dit programma, maar ze laten het allemaal liggen!

Welke features had ik graag gezien:

  • Variablen die toegewezen zijn in de controller resolven in de view
  • Beter uitlezen van include paths!
  • Folden van if/else/while/for/foreach/enz…

Om even verder te gaan over dat uitlezen van die include paths:

Ik heb een projectje, gebouwd rond het Zend Framework. Nu heb ik de Zend_Controller_Action extended om m’n eigen init() te schrijven.

Deze file wordt dus niet gezien als ik die include & extend in m’n controller. Ik krijg dan bij

require_once("Extended/Controller/Action.php");

de melding dat dat niet geresolved kan worden. Voeg ik dat dan toe aan m’n include path, zie ik die dubbel in m’n lijst als ik een nieuwe klasse wil aanmaken.

Ook zou hij automatisch de mogenlijkheid tot includen moeten geven.

Jammer!

6.5 / 10

Comments No Comments »

And shepherds we shall be, for thee my Lord for thee, power hath descended forth from thy hand, that our feet may swiftly carry out thy command. We shall flow a river forth to thee, and teeming with souls shall it ever be. In nomine Patris, et Filii, et Spiritus Sancti.