Categorieën

Recente berichten

Snelheid tellen in PHP vs SQL

april 21st, 2010 • CodeReacties uitgeschakeld voor Snelheid tellen in PHP vs SQL

php vs. sqlStel je wilt bent iets aan het tellen bij de ontwikkeling van je dynamische website.
Dan zijn er vaak twee manieren om dit te doen.

1. In PHP tellen bijvoorbeeld:

1
$numdownloads = mysql_num_rows(mysql_query("SELECT * FROM downloads));

2. in je SQL query tellen bijvoorbeeld:

1
2
$sqlnumdownloads =  mysql_fetch_array( mysql_query("SELECT COUNT(*) AS aantal FROM downloads) );
$numdownloads = mysql_fetch_result($sqlnumdownloads,0,'aantal');

Je kunt verwachten dat de 2e methode sneller is. Omdat niet eerst alle data opvraagt wordt en deze van de database server naar de webserver over gestuurt wordt. De netwerk verbinding vormt de grootste bottelneck. Maar wat als de database server en webserver dezelfde computer is? Dan is de ‘overdracht’ van de gegevens niet de bottleneck meer. Maar ook dan is het tellen in SQL vaak sneller dan in PHP. Dit omdat het PHP parser nog het probleem dat het een grotere bulk data moet verwerken omdat deze data niet door de simple SQL query geoptimaliseerd is. Sterker nog als je MyISAM voor opslag gebruikt zal het resultaat direct beschikbaar zijn omdat het al gedaan is door steeds het aantal verwijderen en toevoegen van records bij te houden. M.a.w. het loont qua performance het tellen in SQL te doen.

Ernstige PDF en Java lekken

april 15th, 2010 • IT nieuws1 Comment »

De afgelopen dagen zijn er heel wat te doen rondom PDF en Java.

Ten eerste was er een Belgische onderzoeker die een exploit vondt om door het openen van een PDF bestanden een programma’s te laten uitvoeren.
De exploit was kinderspel om te maken, en wordt dus ook nu actief misbruikt.
Adobe reader gaf met de juiste instellingen gelukkig wel een waarschuwing voor het uitvoeren van de gevaarlijke code in het PDF bestand. Maar lang niet altijd.
Echter bij Foxit Reader kwam helemaal geen waarschuwing en zodra je dus een gevaarlijk pdf opende werdt de code in het gevaarlijk pdf bestand uitgevoerd en was je geïnfecteerd.
Er was zelfs een PDF worm virus gemaakt, dat alle andere PDF bestanden op een geïnfecteerd systeem besmette.
Het probleem was dat het lek niet zo eenvoudig te patchen was. Het was een daadwerkelijk een feature van het PDF formaat om dingen te kunnen uitvoeren in PDF. Dat maakt het lek ook vrijwel niet patchbaar tenzij je de feature weghaalt. Programma’s starten vanuit PDF is dat niet wat te veel mogelijkheden? Persoonlijk zie ik PDF als een boek, dus met alleen tekst en afbeeldingen.
Zowel Foxit Reader als adobe hebben nu een patch uitgebracht zodat er zeker een waarschuwing komt. Alleen de lichtgewichte opensource Sumatrapdf reader ondersteund deze onveilige zinloze feature niet en zal het pdf bestand niet kunnen openen.

Dan was er deze week nog een lek met Java dat actief misbruikt werdt op website’s. Het lek werdt net gevonden vlak nadat update19 uit was. En omdat het ernstig was moest een noodpatch namelijk update20 uitgegeven worden.
Het probleem zat hem in de plugin “Java Deployment Toolkit” in de browser dat naast je “Java” plugin voor de browser geïnstalleerd is. Echter het gevaarlijke was dat dit lek je simpelweg je computer kan infecteren doordat je een verkeerde website bezoekt. Tenzij je slim genoeg was plugins te blokkeren bijv. met noscript. Indergeval update20 is weer vanaf java.com te verkrijgen en de nieuwe JDK/SDK vanaf de oracle website.

CodeGreen versie 1.5 uitgegeven

april 12th, 2010 • CodeReacties uitgeschakeld voor CodeGreen versie 1.5 uitgegeven

codegreenNa veel dingen in het CodeGreen spel te veranderen is er dan nu een nieuwe release van het spel gekomen. Het is eigenlijk niet gebruikelijk voor een game veel release te doen. Dus met deze update zijn veel dingen veranderd waarmee ik gelijk een hele hoop problemen van 1.0.1 probeer op te lossen. Het is dus niet een uitbreiding van het spel maar verbetering van alle problemen. Ten eerste wordt de highscore nu niet meer in een Access database opgeslagen. De access database was vrij groot, ook al zat er geen highscores in.  Daarom heb ik besloten gebruik te maken van de SQLLite database, die als publiek domein gelicenseerd. Dat is goed, want het combineert beter met opensource spel. Nog een voordeel van SQLlite is dat het lichter in geheugen gebruik is en veel sneller dan access. Verder is het probleem dat de muziek stop als een effect geluidje speelt nu opgelost. Maar ik besloten hier niet DirectSound voor te gaan gebruiken om geluid gelijktijdig te kunnen afslepen. In plaats daarvan heb ik een oplossing bedacht om extra geluidje te laten afspelen via een tweede process. Het is een beetje slordig maar hier vermij ik dat DirectSound en dus directX nodig is. Het voordeel van vermijden van Managed DirectX DirectSound is dat de gebruiker niet mee lastig gevallen wordt dat het directX nodig heeft, want dat is zeker 100mb aan bibliotheken. Dat is ook niet noodzakelijk want het spel gebruikt voornamelijk alleen GDI+ en heeft voor het teken en geen complexe 3d modelen nodig. Daarnaast blijft er zonder directX de mogelijkheid om codegreen op Mono onder linux of mac te draaien. Verder heb ik nog het logo op het hoofdscherm transparant gemaakt. Daarvoor moest ook de manier waarop de tekst naar beneden viel herschreven worden. Maar datzelfde effect is nu ook aan het optie scherm toegevoegd. CodeGreen 1.5 is nu te downloaden
Vooral voor mensen die het spel nog niet kennen een aanrader, om te leren hoe hacking simplistische werkt.
update: ik heb 1.5.1 uitgeven omdat een belangrijk dll’tje voor highscoren te laden ontbrak in de 1.5.0 release.

veiliger PHP6 door minder verwarrende beveiliging

april 2nd, 2010 • CodeReacties uitgeschakeld voor veiliger PHP6 door minder verwarrende beveiliging

PHP6 is nu flink in ontwikkeling en het is waarschijnlijk niet lang meer voordat we de eerste php6 release gaan zien. Een ding waar ik blij mee ben is dat in PHP6 magic quotes extensie nu niet meer werkt.

Het probleem met magic quote’s was dat vele PHP programmeur dachten dat ze hun PHP script veilig konden overzetten op een andere hosting terwijl dat niet het geval was. Wat magic qoutes extensie voor PHP scripts namelijk doet is voor elke input via POST en GET variabele de aanhalingstekens en enkele aanhalingsteken escapen.

Dan is het niet mogelijk dat een bezoeker, een string variabel in je script probeert te verlaten en PHP code kan uitvoeren.
Echter gebeurt dit alleen als magic quote op je hosting aanstaat.
Het is dus ook belangrijk dat in de test omgeving en productie omgeving dezelfde instellingen voor magic quotes gebruikt want anders dan is dat vragen om beveiligingsproblemen. Zonder magic quote moet de programmeur zelf ervoor zorgen dat string variabel veilig wordt.

Dan is er ook nog het probleem met magic quote’s dat het de beveiling die de php programmeur wel gemaakt heeft kan opheffen.
Dit gebeurt als Magic Quotes  een slash met aanhalingsteken gaat escape en er dan een dubbele slash staat wat in feit betekent dat de slash ge-escaped wordt en niet het aanhalingsteken meer.

PHP magic quote heeft dus voor veel verwarring en dus beveiligingsproblemen gezorgd terwijl het juist een beveiligingsprobleem automatisch moest oplossen.
Een overzicht van wanneer een php script dus veilig is ziet er dan zo uit:

Een oplossing om een script toch onder zowel hosting met magic quotes aan en magic quote uit veilig te maken was door eerst te controlleren of magic quotes aanstond.
Dit kan door de functie get_magic_quotes_gpc() te gebruiken. Echter moet je dan dus wel een aantal dingen dubbel schrijven, een routine waarbij het script niet escaped als magic quote aanstaan en een andere stuk code waarbij de script wel escaped als magic quotes uitstaat. Een slimmer manier om niet overal get_magic_quotes_gpc() te hoeven aanroepen is om een functie te schrijven die je steeds aanroept wanneer je ergens mogelijk moet escapen en in die functie te controlleren of magic quotes aanstaat.
Indergeval, in de toekomstige php6 versie zal magic quotes standaard er niet meer zijn en zal de php programmeur dus altijd moeten escapen. Dat maakt het wel een stuk duidelijker.

productie

Terughalen van verwijderde Facebook™ status berichten

maart 25th, 2010 • Privacy5 Comments »

Vele mensen weten niet dat Facebook™ de status update’s die verstuurt worden nooit echt verwijdert worden.
Als je op de knop verwijderen duwt is de status updates niet echt weg maar slechts niet meer zichtbaar.
De data is er echter wel nog bewaart in een array met alle status updates.
En een Facebook™ app die de rechten heeft je stream te bekijken kunnen deze berichten inzien inclusief dus de “verwijderde” status updates.

Update: Facebook heeft het ontwikkelaars test console veranderd, de instructie hieronder kloppen niet meer.
Hier is hoe je de hele stream incl. je verwijderen status updates kunt zien,
en waarmee je dus ook je de verwijderde status update kunt inzien:
Ga naar developers.facebook.com/tools.php en log in.
Op de tab API-testconsole zorg je ervoor dat de
toepassing Test Console geselecteerd is.
Kies in de selectielijst de methode: stream.get.
Alle andere velden mag je leeg laten.
Druk op de knop bel methode.
In XML (standaard) krijg je nu alle status updates te ZIEN incl. je verwijderde.

Je kon je verwijderde berichten alleen opnieuw inzien, terugplaatsen kan niet omdat je geen rechten hebt je stream/posts aan te passen. Een Facebook™ app kon in 2010 alleen maar een post toevoegen.
Als je problemen met een verwijderde Facebook bericht dan ga en kan ik je niet helpen, ik werk niet gratis voor Facebook om jouw Facebook™ problemen op te lossen.
Deze post was slechts een technische demonstratie dat Facebook posts nooit echt verwijdert werden in 2010.
Maar pas dus wel op wat je op Facebook™ zegt, het werd waarschijnlijk bewaart voor altijd of lang.
Of dit in 2015 nog steeds gebeurt weet ik niet.

Google opt-out voor analytics via plugin

maart 22nd, 2010 • Privacy1 Comment »

Google analytics is een vrij krachtige en populaire tool om je bezoekers op je website te leren kennen. Het werkt met een javascriptje dat een webmaster aan zijn site toevoegd. Google analytics kan behalve nagaan welke plugins een bezoekers geïnstalleerd heeft, welke browser die gebruikt en welke besturingssysteem ook nagaan via de http reffer van welke website je komt. En dingen als schermresolutie valt via javascript allemaal uit te lezen. Allemaal heel interessant voor de webmaster, maar ongezond voor de privacy van de bezoeker. Want een webmaster zou ook bedenken dat alleen het aantal bezoekers belangrijk is, dit omdat een webmaster wilt weten hoeveel dataverkeer zijn website verbruikt en dus kost.
Om toch de mensen die zich druk maken om de privacy schade die google analystics aanbrengt goed te maken. Heeft google een hele plugin(bron) voor je browser uitgebracht om google analytics te blokkeren. Dit is best een omslachtige methode omdat het slechts 1 javascriptje is. En om daar nou een hele plugin voor te installeren. Je kunt niet weten zonder broncode van die plugin te bekijken of die niet gevaarlijk is. En de plugin gaat niet tegen alle alternatieve voor google analytics werken.

Een betere alternatieve oplossing

Een blokkering van analystics.google.com in je hosts bestand zou een minder zware oplossing zijn. Onder linux systemen is het vrij gemakkelijk te doen. Je voegt de regel:

127.0.0.1 www.google-analytics.com
127.0.0.1 www-google-analytics.l.google.com

toe aan het bestand in /etc/hosts
Onder Windows vergt het iets meer werk.
Je moet dezelfde regels toevoegen aan het bestand in:
c:\windows\system32\drivers\etc\hosts

Onder windows vista en 7 moet je dit wel met de administrator account doen. Maar het kan ook simpeler met een tool als HostsXpert.
Het voordeel van google analystics in je host bestand blokkeren is dat het voor elke webbrowser onder het besturingssysteem dat je gebruikt werkt. Nadeel is wel dat je analystics.google.com echt niet meer kunt bezoeken.

Een andere oplossing is om je tegen google analystics en andere datamining webmastertools te beschermen is door simpelweg javascript uit te zetten.
Als je dat doet ben je ook beschermt tegen oneindige lopende messageboxen en andere javascript kwaad waar je met frustratie alleen je webbrowser kunt laten crashen om het te laten ophouden.
Je kunt ook de Firefox extensie’s noscript installeren zodat je alleen de gevaarlijke en privacy onvriendelijk javascripts hoeft te blokkeren.
Ook biedt NoScript bescherming tegen het recente Firefox Zeroday lek.

Nieuwe blog

maart 20th, 2010 • OverigReacties uitgeschakeld voor Nieuwe blog

Ik heb besloten weg te gaan bij windows live spaces. Dit omdat ik zelf weinig controle over mijn blog had en ik eigenlijk al veel langer een eigen beheer over mijn blog wilde. Daarnaast werdt het ook steeds vaker doelwit van spammers en windows live spaces boodt geen captchas om tegen spam te beschermen.

[d9ping]De naam d9ping is mijn nickname van verschillende software projecten.
De naam slaat op een beruchte exploit met de naam ping of death.
De exploit heeft bij vele computers in het windows95 tijdperk blauweschermen ook wel Blue Screens of Death (afgekort: BSOD) veroorzaakt. De remote exploit kon door iedereen worden gemaakt door een ping pakketje (opdracht ping) met een te grote buffer te verzenden met schakelopties -l. De grote buffer kon de computer die het ping pakketje ontvangde niet verwerken. Vrijwel alle besturingssystemen waren kwetsbaar (als de firewall maar ICMP verkeer toeliet) Maar het duurde voor de linux gemeenschap slecht paar minuten een patch uit te brengen. De exploit was vrij eenvoudig uit te voeren, en de impact was behoorlijk serieus. Sommige maakte het uitvoeren van de exploit nog makkelijk door een GUI(bijv. win nuke’m) te maken waarin je alleen een ip adres hoeft in te vullen. ICMP verkeer met de ping en tracert opdrachten was origineel alleen bedoelt om internet/netwerk verbindingen te testen.