Arkiv för september, 2008.

Hantera SQL Injections med PHP

söndag, september 28, 2008 | Inga kommentarer

Varje dag på Internet ökar antalet Internetanvändare. Enligt nya mätningar finns det ca 747 miljoner människor som nu kan koppla upp sig på Internet. Läs mer på Clickz.com

I och med att antalet användare ökar, medför att attacker mot hemsidor och webbapplikationer också ökar. Man hör om attacker mot hemsidor som fått nytt innehåll eller där användaruppgifter stulits. Hur man kommit över data kan bero på många orsaker, men ett vanligt fel är att man gjort misstag i koden och inte skyddad sig mot säkerhetsproblemet SQL Injections.

Vad är SQL Injections?
SQL Injection innebär att man kan manipulera databasen genom att indata från formulär eller data från querysträngen ändras och som i sin tur påverkar SQL frågan. Har man inte hanterat indatan från formuläret eller datan från querysträngen på rätt sätt kan det orsaka stor skada. Känslig data kan raderas eller spridas.

Exempel på SQL Injections?
SQL Injections kan utföras så fort det finns formulär på hemsidan, tex inloggningsformulär, sökformulär. Tänkte visa hur man på ett enkelt sätt kan logga in på en webbplats där man inte skyddat sig mot SQL Injections. När man postar formuläret tas uppgifterna användarnamn och lösenord emot på sidan för att sedan läggas till SQL-frågan:

1
2
3
4
5
6
$user = $_POST['txtUser']; //Innehåller datat "kalle"
$pass = $_POST['txtPass']; //Innehåller datat "kula"
 
//Indatan som infogas i SQL-frågan
$sql = "SELECT * FROM users WHERE
username = '".$user."' AND password = '".$pass."'";

Datan som skickas till databasen ser ut som följer. Finns användarnamnet och lösenordet loggas man in.

1
2
3
//Indatan som infogas i SQL-frågan
SELECT * FROM users WHERE username = 'kalle'
AND password = 'kula';

Säg nu att vi kommer till webbplatsen och tänker utföra en SQL Injection. Eftersom vi i exemplet inte skyddat indatat ska vi ersätta lösenordet med följande data.

1
2
//En typisk SQL Injection
' OR '1' = '1

Vår SQL-fråga blir nu istället.

1
2
3
//Indatan som infogas i SQL-frågan
$sql = "SELECT * FROM users WHERE username = 'kalle'
AND password='' OR '1' = '1'";

Denna SQL-fråga skickas till databasen. Kollar ifall användaren finns. Besökaren loggas in och kan hämta skyddad data, radera eller ändra data.

Hur skyddar man sig mot SQL Injections?
För att skydda sig måste man hantera indatan från formuläret innan de skickas till MySQL-databasen. För att hantera indatan kan man använda sig av funktionen mysql_real_escape_string. Funktionen lägger till backslashes (\) för att escapa specialtecken som enkelfnuttar (’) och dubbelfnuttar (”) i SQL-frågan.

Innan du använder dig av denna funktion måste du vara ansluten till databasen (se mysql_connect).

1
2
3
4
//Hantera SQL Injection
$sql = "SELECT * FROM users WHERE username =
'".mysql_real_escape_string($user)."' AND password =
'".mysql_real_escape_string($pass)."'";

Datan som skickas till databasen ser ut som följer.

1
2
3
4
//mysql_real_escape_string har lagt till backslashes
//för att escapa enkelfnuttarna i SQL-frågan
SELECT * FROM users WHERE username = 'kalle'
AND password='\' OR \'1\' = \'1'

Om du alltid gör det till en vana och använder denna funktion i dina SQL-frågor så har du ett bra skydd mot SQL Injections.

Om du bygger webbapplikationer i annat språk som tex ASP och med annan databas (SQL Server), ta reda vad på som gäller för det språket och databasen.

Mer info:
Wikipedia

PHP.net (mysql_real_escape_string)

PHP Security Guide

Navicat MySQL - databasgränssnitt för MySQL

lördag, september 27, 2008 | Inga kommentarer

För dig som vill slippa phpMyAdmin, kan jag varmt rekommendera Navicat MySQL. Navicat för MySQL är ett kraftfullt verktyg (GUI) för att enkelt hantera och utveckla dina MySQL-databaser.

Själv tycker jag att detta verktyg är ett måste. Det snabbar upp databashanteringen rejält på grund av att Navicat är överskådligt, snabb, tillåter dig att skapa tabeller och frågor på ett enkelt sätt, lätt att flytta tabeller mellan olika databaser m.m.

Erbjuder en mängd olika funktioner bla:

  • Importera/Exportera data i från 18 olika format, bla XML, CSV, MS Excel, MS Access m.m.
  • Hantera backup och återställning av data.
  • SSH & HTTP Tunneling, vilket gör att du kan ansluta till din databas på webbhotellet.
  • Dataöverföring mellan olika databaser.
  • Rapportverktyg, skapa skräddarsydda rapporter med möjlighet till förhandsgranskning och utskrift.
  • Automatiska processer kan schemaläggas.
  • Enkel användarhantering.

På Navicats webbplats finns en “Feature Tour” där du kan se mer av den funktionalitet som Navicat erbjuder. Finns även en “Visual Tutorial” med tutorials av de vanligaste funktionerna i Navicat.

Ladda hem en testversion i 30 dagar med full funktionalitet eller deras lite version som är gratis att använda.
http://mysql.navicat.com/download.html

Tags: , ,

Postad i: Databaser

Bloggtips - Segast i EU

torsdag, september 18, 2008 | Inga kommentarer

Tips på bra läsning. Min arbetskollega Patrik har startat en blogg “Segast i EU” . En blogg om webbutveckling, Internet och sega saker i EU m.m.

Kör hårt Patrik.

Tags:

Postad i: Bloggosfären

Hitvarning - Girl with golden eyes

tisdag, september 16, 2008 | 2 kommentarer

Tips på riktigt bra musik. Då ska ni lyssna på Nikki Sixx (basist i Mötley Crüe) och hans nya band Sixx AM.

Kan rekommendera denna låt “Girl with golden eyes”

Webbläsarstatistik

tisdag, september 16, 2008 | 2 kommentarer

Hittade bra och intressant webbläsarstatistik från W3School där man kan se vilka webbläsare som används på Internet.

Det man kan utläsa från statistiken är att IE 6 som länge varit den populäraste webbläsaren, börjat fasas ut och Firefox fortsätter att få mer användare. En skrämmande sak är att det fortfarande finns folk som använder sig av IE 5. En ny värld skulle öppnas för dessa användare ifall de skulle använda sig av nyare versioner eller webbläsare.

Ska bli intressant och se hur de nya webbläsarna Google Chrome och Internet Explorer 8 ska konkurrera in sig på marknaden, eller om Firefox kommer att dra ifrån mer som den populäraste webbläsaren.

När man bygger hemsidor eller webbapplikationer är det viktigt att utseendet är identiskt i samtliga webbläsare. Det positiva med att IE 6 håller på att fasas ut är att IE 6 tolkar CSS-koden på sitt eget vis. Vilket ibland är väldigt tidskrävande och frustrerande.
En arbetskollega skrev ett skämtsamt inlägg om hur en arbetsdag kan se ut när man jobbar med Internet Explorer. Måste hålla med om att ibland känns det faktiskt så.

En dröm skulle vara om samtliga nya webbläsare kunde hantera CSS-koden likadant.


Data hämtat från W3School

Ny design på mackeontheweb

lördag, september 13, 2008 | 3 kommentarer

Det har inte hänt så mycket på mackeontheweb den senaste tiden, både vad gäller inlägg och utseende. Måste erkänna att jag haft lite dåligt samvete, men nu är det andra bullar. Har nu äntligen piffat upp bloggen med ett nytt utseende. Hittade en wordpress mall som jag stukade om efter eget tycke och smak.

Måste säga att jag blev ganska nöjd för en gångs skull.

Transparent bild i Internet Explorer 6

måndag, september 8, 2008 | Inga kommentarer

Ibland vill man använda sig av transparenta bilder på sin hemsida för att göra sidan mer effektfull eller i vissa fall inte förstöra designen. För att få bilden transparent används ofta bildformatet PNG. Firefox och Safari stödjer detta, men tyvärr så stödjer inte Internet Explorer 6 detta. Möjligheten att fullt ut använda PNG-bilder kom först i Internet Explorer 7.

Ska man använda sig av PNG-bilder vill man att sidan ska se likadan ut i alla webbläsare, plus att en stor del av Internetanvändarna använder just IE 6.

Använde mig av följande lösning för hantering av transparenta bilder. Finns säkert andra lösningar men denna fungerade för mig.