Archive for the ‘PHP’ category

Oväntade frågor

mars 24th, 2008

Under påsken har det trillat in ett par mail i min inbox, vilket egentligen inte är så ovanligt…. det som förvånade mig var att mailen kom från helt okända personer som ställde frågor om PHP och lite annat. Mailen jag fick var från personer som hade läst min blogg, vilket jag tyckte var otroligt kul! Frågorna dem ställde var väldigt intressanta, så pass intressanta att jag vill lägga upp dem i bloggen så att alla kan ta del av frågorna, samt mina svar.

Totalt kom det in fyra mail med fyra frågor…ställda av fyra olika personer (så vitt jag kunde se)… så här kommer dem, följt av mina svar.

Fråga #1 – Av Martin
”Vad är dina bästa tips när det gäller säkerhet i PHP? Vad ska man tänka på, hur bör man koda osv. Det jag är mest intresserad av är hur man stoppar SQL-Injections. Tacksam för alla former av svar och förslag!”

Svar:
När det gäller säkerhet, mer specikt säkerhet på webben så är det otroligt viktigt att man som kodare är medveten om de vanligaste hoten som finns där ute, hur man förebygger attacker, samt hur du implementerar denna säkerheten. Det kan även vara värt att nämna någonting om färdiga system (CMS) som t ex joomla, drupal, wordpress osv. Ta reda på om det finns kända buggar eller exploits i det system du använder och sätt stopp för dem.

I PHP finns det en större risk att du öppnar upp för attacker av olika slag jämfört med andra språk.
Kort sagt så är det lättare att skapa osäker kod i PHP än andra språk…. fast det beror också på om man använder sig av något ramverk osv. Hur som helst, när vi pratar säkerhet i PHP, pratar vi indirrekt om otillåten åtkomst av databasen eller data i databasen. Så med detta i åtanke och iom att du sa SQL-Injections så fokuserar vi på skydd mot SQL-Injections. Egentligen så ska man även prata om server säkerhet, optimering och rätt konfigurering av dess komponenter (databasen, processer, portar osv osv), men vi håller oss till detta.

Det finns mängder och åter mängder med sajter där ute som tar upp just säkerhet och SQL-Injections… problemet med dessa sajter är att dem inte är ”up to date” och många av de saker som skrivs är rent ut sagt vansinne. Idag finns det ett ord på tre bokstäver alla PHP kodare ska känna till…. PDO (PHP Data Objects). PDO med så kallade prepared statements är ett Mycket bra sätt att skydda sig mot SQL-Injections, den sköter hela processen åt dig. Så glöm addslashes(), mysql_real_escape_string() och alla i den ”familjen”… har du möjlighet att använda PDO (vilket dem flesta webbhotell kan) så gör det. 

Det ska även nämnas att du aldrig, och jag menar aldrig, får aldrig lämna input data ofiltrerad (T ex från formulär)… filtrera alltid allting som skickas in av användare…lita inte på någon. Jag avslutar med ett citat från php.net angående PDO.

The parameters to prepared statements don’t need to be quoted; the driver handles it for you. If your application exclusively uses prepared statements, you can be sure that no SQL injection will occur.”

Fråga #2 – Av Pernilla
”Hej Kristoffer! Jag har en 12 årig son som surfar väldigt mycket och jag kan inte hjälpa att vara orolig över vad han kan bli utsatt för på internet. Jag vill helst inte att han ska vara inne på erotiska hemsidor, chatta med okända personer och allt sånt där. Finns det något sätt jag kan hindra honom från att surfa på liknande sidor? Jag är inte alls datorkunnig och är ute efter någonting som även jag kan förstå!”

Svar:
Det problem du beskriver finns nog bland de flesta föräldrarna i Sverige (världen). Det finns mycket på nätet som är olämpligt för en 12åring att se, men tyvärr så är det inte helt lätt att hindra dem från att göra det. Barn är idag extremt kunniga inom datorer och vet oftast mer än sina föräldrar… så i många utav fallen är det som att sätta upp ett 2cm högt staket runt dem… inte speciellt svårt att kliva över.

Men, det finns vissa saker du kan göra. Men först kan det vara lämpligt att tala med sitt barn och försöka förklara för dem varför du tycker som du gör, samt varför du inte vill att dem ska surfa på vissa hemsidor. Det är också bra att man försöker ge dem in minikurs i internet säkerhet… ta upp saker som lämna aldrig ut ditt namn, telefonnummer, adress eller annan information som kan avslöja vem du är… samt inga kreditkortsuppgifter eller liknande.Det finns även så kallade barnfilter som man kan använda för att kontrollera vad dem ser och inte ser.

Jag har personligen ingen erfarenhet av dem (har inga barn), men jag kollade runt lite och hittade en del intressanta alternativ. Du kan, om du har vista, använda deras inbyggda barnfilter som skyddar mot de vanligaste pedofilinfekterade hemsidorna. Titta gärna även på på denna sidan.. här har du massor med olika slags filter (engelska).

http://www.snapfiles.com/Freeware/misctools/fwparents.html

Utöver detta så använd gärna google för att söka runt lite. Det finns massor med information om detta på nätet… du är inte ensam!! Så mycket kan jag lova!

Fråga #3 – Av Robert
”Vill gärna ställa en fråga till dig och jag hoppas att du har tid att svara! Jag kommer gå ut gymnasiet nu till sommaren och planerar att börja studera på högskola i augusti. Mitt största intresse är IT och jag vill därför utbilda mig inom detta så att jag har en större chans att få jobba med det jag vill jobba med 🙂 För att ge dig ännu mer detaljer så är det programmering som är det jag vill utbilda mig inom, JAVA programmering. Mina fråga lyder… Är det värt att utbilda sig till JAVA programmerare?  Finns det jobb? Vart ska jag studera? Har du studerat programmering? Tacksam för svar!!!”

Svar:
Hej Robert! Jag börjar i omvänd ordning och svarar på din sista fråga först. Ja, jag har studerat programmering (C#, JAVA, Assembler, PERL, ASP.NET, PHP) och nu i efterhand har det varit väldigt givande eftersom jag har en liten insyn i många språk och kan på så sätt göra vissa jämförelser. Att du har bestämt dig för att börja studera på högskola är väldigt bra och du kommer ha många roliga stunder..kombinerat med många härligt stressiga situationer 🙂

Första frågan du ställde: ”Är det värt att utbilda sig till JAVA programmerare?”
Om du är intresserad av just JAVA… absolut!! Det finns många många många program som är utvecklade i java idag, så självaste språket är helt klart levande och kommer fortsätta att leva en bra tid framöver. Jag pluggade en 7,5p kurs i JAVA för ett bra tag sedan… inte riktigt min grej, men jag såg hur kraftfullt språket var (är) och vad man kunde göra efter att man blivit duktig i det….. jag och en till byggde ett grafiskt yatzee spel som slutprojekt vilket var väldigt roligt 🙂

Andra frågan du ställde: ”Finns det jobb?”
Arbetsmarknaden för en JAVA programmerare är minst sagt ljus. Jag tog mig friheten att kolla hur många JAVA relaterade platsannonser jag kunde hitta i Sverige. Hela 164 st från söder till norr…. det låter kanske inte som så mycket.. men du behöver bara 1 av dem jobben, de andra 163 onödiga.

Tredje frågan du ställde: ”Vart ska jag studera?”
Svår fråga… beror ju helt och hållet på hur långt du är villig att flytta. Sen är det svårt för mig att rekommendera högskolor eftersom jag inte har den blekaste aning hur bra och relevanta utbildningar dem har.
Den skola jag kan rekommendera dock är Halmstad Högskola, samt programmet ”Programmering” (själv läste jag Nätverksdesign & datordrift + forsättnings utbildning). Programansvarig person heter Nicolina Månsson och är en underbar lärare med stora JAVA kunskaper. Jag har haft henne som lärare i ett par kurser och jag måste nog säga att det är en av dem bästa på Halmstad Högskola. Så har du frågor om programmet så är det Nicolina du ska kontakta.

Fråga #4 – Av Peder
”Hej Kristoffer! Jag hoppas att det är OK att jag mailar en fråga till dig. Du verkar vara verkar vara rätt insatt i webbhotell osv. Det är så här att jag funderar på att skaffa ett konto på ett webbhotell så att jag kan publicera lite hemsidor och ha domäner på. Vilket webbhotell rekommenderar du?

Svar:
Hej Peder! Insatt och insatt… jag har inte stenhård koll på vad alla erbjuder nu för tiden, eller till vilka priser. Men det finns ett webbhotell jag kan rekommendera med gott samvete. Eftersom du inte nämner någonting om vad du behöver ha på ditt webhotell (PHP, ASP.NET, Trafik, Utrymme osv osv) vilket kan vara avgörande, så utgår jag helt enkelt ifrån vad jag själv tycker.

Binero
Hos binero kan du välja om du vill ligga på en windows maskin eller freebsd… du kan välja mellan ett privat konto eller ett företagskonto (det jag har). Dem erbjuder mer eller mindre alla tekniker du kan tänkas behöva, samt så har dem en bra support och bra upptid. Dem är alltid trevliga, hjälper gärna till och framförallt så är dem väldigt öppna i företaget och låter sina kunder få en djupare inblick i företagets verksamhet (dem delar gärna med sig)… samt så har dem en semla som är över 1 år gammal vilket i sig självt är imponerande.

Binero kan erbjuda dig följande:
binero1.JPG binero2b.JPG

Prova öppna ett konto hos dem… det är fritt fram att testa i 14 dagar.

Det var alla frågor. Jag tyckte det var otroligt kul att få mail från er läsare och att ni ställde så intressant frågor! Finns det fler där ute som har ett problem, en fråga eller fundering kring IT och PHP… maila mig på kristoffer@geiser.se så ska jag försöka svara på dessa i bloggen.

Vill du lära dig skapa dynamiska webbsidor? Lär dig PHP!

mars 22nd, 2008

800px-php-n_logo_svg.pngJag har programmerat i många olika språk under flera år, både privat, i jobb och genom utbildningar. De språk jag kommit i kontakt med är C#, JAVA, Assembler, PERL, ASP, ASP.NET och PHP… grundprincipen är den samma i alla språken, men det enda jag riktigt fastnade för var PHP. Det var lätt att förstå, man kom snabbt igång, det är kraftfullt och snabbt.

Nu när jag skriver detta inlägg så inser jag att det kommer bli en hel del sura miner bland programmerarna där ute… det finns en viss rivalitet mellan oss PHP programmerare och speciellt ASP.NET programmerare (dotnettare). Jag inser också att det finns fördelar och nackdelar med alla språk, men här följer i alla fall en lista på 5 skäl att använda/lära sig PHP.

#1 – Det är lätt att komma igång
Det krävs inga jättekunskaper att komma igång med PHP (om man kan de grundläggande kunskaperna i programmering). Hitta en bra tutorial att följa och du kommer lätt snappa upp hur det är strukturerat och fungerar. Många väljer att köpa böcker för flera hundra kronor när det ska lära sig något nytt, och visst… ibland så är det bra att ha böcker i PHP. Men jag tycker du ska börja med att läsa några av de tusentals tutorials som finns ute på nätet först!

Bra sidor som hjälper dig komma igång (Engelska)
W3Schools (Här kan du lära dig grunderna)
PHP.NET (Ett måste för alla PHP programmerare)
Google (Search and you shall find)

#2 – Det är gratis
PHP är helt gratis att använda. Det är open source vilket innebär att du kan göra vilka modifikationer du vill.

#3 – Forum & community
Det finns massor med sidor vars syfte är att hjälpa dig i ditt programmerande. Du kan få massor med hjälp av väldigt duktiga personer på följande sidor:

Webforum
Webmaster Network
Webmaster-Talk
PHPportalen
PHPSIDAN

#4 – PHP är snabbt!
PHP är väldigt effiktivt och snabbt… snabbare än de flesta andra språk. Zend Technologies har gjort vissa benchmarks som visar att PHP är snabbare än många av sina konkurrenter. Detta går naturligtvis att diskutera…. men en sak är säkert och det är att PHP på en hyffsad server kan behandla miljontals besökare varje dag.

#5 – Stödjer flera typer av databaser
PHP stödjer många databaser, bland annat MySQL, MSQL, Oracle, PostgreSQL,  dbm, HyperWave, Indormix, FilePro, Sybase databases, InterBase. Du kan också använda dig av PDO vilket ger dig ett otroligt bra skydd mot SQL-injections.

Dessa 5 skäl är bara en droppe i havet av vad PHP kan erbjuda dig som programmerare. Dock så är trots allt det viktigaste att du hittar ett språk som passar dig (förhoppsningsvis PHP) som du känner dig bekväm i.

Man blir aldrig fullärd i PHP och det kan ta väldigt lång tid att få flyt i sitt kodande. Men har man intresset, motivationen och viljan så kommer det gå snabbare än du tror.

Jag vill avsluta med att säga att säkerhet är någonting man bör ha i åtanke från början! Lär dig programmera säkert från början och håll dig uppdaterad!

Google Summer of Code 2008

mars 21st, 2008

Det hela började 2005 då Google började sponsra utvecklingen av en mängd olika open source projekt. Syftet med Google Summer of Code (GSoC) är följande:

  • Skapa fler open Source lösning som gynnar oss alla.
  • Inspirera unga utvecklare att delta i open source projekt.
  • Hjälpa open source projekt att hitta nya utvecklare och intressanter.
  • Ge studenter en chans att jobba inom sitt utbildningsområde
  • Ge studenter insyn i hur det fungerar i verkligheten hos utvecklingsföretag, med riktiga scenarion.

Antalet studenter som deltar är många:

2005: ca 400 st
2006: ca 600 st
2007: ca 900 st
2008: Inga siffror ännu

Antalet stödjande organisationer:
2005: ca 40 st
2006: ca 100 st
2007: ca 130 st
2008: Inga siffror ännu

Det har fastställts ett par (ganska många) deltagande organisationer till GSoC 2008, och där finns ett par stycken som jag personligen tycker är intressanta att följa:

PHP
WordPress
MySQL
Google
Hela Listan

Detta ”event” är otroligt intressant att följa, samt så är självaste konceptet ”open Source” ett riktigt hett samtalsämne idag. Fler och fler börjar inse vikten av open source och vad det kan ha (och har) för betydelse idag. Många stora företag har sedan en tid tillbaka omfamnat open source konceptet vilket gynnar oss alla!

Ni kan läs mer om GSoC här:
GSoC 2008

I forumens värld

mars 21st, 2008

Under de senaste 4 åren har jag periodvis varit aktiv i flera forum vilket har gynnat mig väldigt mycket. Man lär sig nya saker, kan fråga om hjälp, samt hjälpa andra. I första hand gillar jag att diskutera PHP med andra, men det senaste året har jag deltagit mer och mer i diskussioner om domäner och webbhotell.

Just nu är domäner ett otroligt hett diskussionsämne, speciellt när man ser hur mycket domäner säljes för. Massor med folk tycks ha hoppat på domäntåget bara under det senaste året och man ser hur otroligt stor domänmarknadet har blivit. Nu när även .asia dragit igång så har det skett ännu en ökning… kanske mest på grund av många anser att .asia är den nya .com… vilket innebär att om man är tidig och snabb nog, kan göra sig ett kap. Även vi i vårt företag har köpt ett par .asia 🙂

Men, tillbaka till forumen. Det finns många fördelar med att vara aktiv i ett forum, men även en hel del nackdelar som man måste vara medveten om innan man kliver in i den världen. Först och främst måste man inse att det finns en hel del personer under 16år i tekniska forum. Detta kan ibland bridra till väldigt dåliga inlägg, omogna svar och rena rama fjortisfesten.smiley-funny_cat_pictures_23.jpg

Forumen webmaster Network och Webforum är två väldigt populära forum bland oss geeks och jag tror att en av anledningarna till att dem är så populära är på grund av de personer som är aktiva i forumen. Det finns en hel del personer som är väldigt kunniga inom sitt område och är därför väldigt roliga att prata med. Personligen föredrar jag Webmaster Network före webforum, och anledningen till detta är folket som finns i forumet.

Har du frågor om domäner, programmering, företag, ekonomi, e-handel m.m så är Webmaster Network ett bra forum att vara aktiv i. Du får mer eller mindre svar på alla dina frågor, och svaren kommer från personer med erfarenheten och kunskapen som berör din fråga. Tyvärr måste jag även säga att Webmaster Network var bättre förr… nu har många i den yngre generationen hittat dit vilket också medför sig en hel del onödiga inlägg och omogna/oseriösa svar. Jag tycker därför att det kan vara lämpligt med ännu en liten lista, och denna gången kommer jag lista de fem bästa sätten att få de övriga i forumet att hata dig. Alltså, fem saker du absolut Inte ska göra när du är ny i ett forum.

  1. Ställ inte dumma frågor.
    Man brukar ju säga att det inte finns några dumma frågor, bara dumma svar, eller något i den stilen. Visst, det stämmer väl till viss del i vissa situationer, men i forumvärlden ställs det på tog för många frågor som är totalt meningslösa, där svaret är självklart, frågan har ställts 100 gånger tidigare eller att frågan egentligen inte är en fråga utan mer eller mindre tomt prat. Kort sagt, lär dig hur man ställer en fråga, ge den nödvändiga informationen som behövs till läsarna för att de ska kunna svara på din fråga och se till att säga tack när du fått sitt svar.Exempel på dumma frågor:
    ”Hjälp! Min dator startar inte, vad ska jag göra?”
    ”Varför är min dator så långsam?”
    ”Hej! Jag heter Björn och jag hade tänkt börja programmera, men när jag öppnar skriptet så händer det inget. Vad är fel?”
  2. Lär dig använda SÖKFUNKTIONEN!!!
    I alla forum, i alla tider har följande kommentar dykt upp ”Använd sökfunktionen”. Som ny Måste du använda forumets sökfunktion! Bland de värsta sakerna du kan göra är att ställa en fråga utan att ha sökt lite i forumet eller på nätet (läs google)… i 9 fall av 10 har redan någon annan haft samma problem som dig och skrivit om det. Jag vill verkligen uppmana alla att använda sökfunktionerna i forumen och söka på nätet innan ni ställer er fråga! Kort sagt http://justfuckinggoogleit.com/
  3. Byt inte samtalsämne
    Du ska absolut inte ”låna” trådar, börja diskutera saker som inte har att göra med inlägget OCH för all äppelmos i världen, bumpa in din egen tråd. Folk kan bli väldigt irriterade när du vill placera dig högre upp i listan över inlägg genom att svara i ditt egna inlägg.
  4. Ingen smygreklam
    Det är oftast väldigt väldigt uppenbart när någon försöker göra reklam för sig själv. Reklam över huvudtaget ser läsare väldigt negativt på och oftast raderar man den reklam man försökt smyga in. Så, försök inte ens med det!
  5. Läs reglerna! 
    Sist men inte minst ska du alltid läsa reglerna, även om det är tråkigt! Det blir bara mer jobb för moderatorer att städa upp efter dig när du inte kan följa de regler man satt. Du kommer inte bli speciellt populär om du på upprepade tillfällen bryter mot simpla regler!

Håller du dig till denna listan så blir du i alla fall inte utbuad i början. Se bara till att vara aktiv, ge bra och konkreta svar, skapa inlägg med bra innehåll och struktur, samt så får man inte glömma att ett vårdat språk alltid uppskattas.

Här har ni mina favoriter bland forumen
Webmaster Network (Svenskt)
Webforum (Svenskt)
Webmaster-Talk (Engelskt)
PHPportalen (Svenskt)
PHPSIDAN (Svenskt)
Cisco NetPro (Engelskt)
Flashback (Svenskt)
Windows Forum (Engelskt)
Företagande (Svenskt)

Registrering+inlogg

mars 6th, 2008

Nästa PHP script jag vill dela med mig av är ett registrerin+login system i PHP som jobbar mot en MySQL databas. Innan ni testar scriptet måste ni kontrollera om ni har PDO aktiverat i php.ini…. om ni inte har det kan ni läsa här.

Värt att nämna är att jag sparar alla uppgifter tillsammans i databasen för att lättare illustrera. För att utöka säkerheten bör man spara saltet och möjligtvis x på andra ställen.

Hela scriptet finns att ladda ner under fliken PHP högst uppe.

register.php
[php]
exec(”INSERT INTO Uregister(user, password, salt, x)VALUES(’$in_user’, ’$fused’, ’$salt’, ’$x’)”);
$conn = null;

header (”location: register.php?done”);
}
}
}
//Skriver ut eventuella felmeddelanden
if($check1 !== ”ok”){ echo ”$check1
”;}
if($check2 !== ”ok”){ echo ”$check2
”;}
if($check3 !== ”ok”){ echo ”$check3
”;}
}
if(isset($_GET[’done’])){
echo ”Registrering lyckad”;
}
?>

Användarnamn:
Minst 4 tecken
Lösenord:
Minst 4 tecken
Upprepa Lösenord:


[/php]

login.php
[php]
setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$do = $conn->prepare(”SELECT password, salt, x FROM Uregister WHERE user = :user LIMIT 1”);
$do->bindParam(’:user’, $in_user, PDO::PARAM_STR);
$do->execute();
$obj = $do->fetch(PDO::FETCH_OBJ);

$db_pass = $obj->password;
$db_salt = $obj->salt;
$db_x = $obj->x;

//Anropar funktionerna som behövs föra tt återskapa lösenordet
$gen_pass = password($in_pass, $db_x);
$gen_fuse = fuse($gen_pass, $db_salt, $db_x);
$conn = null;

//Kontrollerar om lösenorden matchar
if($gen_fuse == $db_pass){
//Skapar en session med alla uppgifter
session_start();
$_SESSION[’user’] = $in_user;
$_SESSION[’pass’] = $db_pass;
$_SESSION[’ip’] = $_SERVER[’REMOTE_ADDR’];

echo ”Du är nu inloggad som {$_SESSION[’user’]}”;
}
else{ echo ”Fel användarnamn eller lösenord”; }
}
?>

Användarnamn:
Minst 4 tecken
Lösenord:
Minst 4 tecken

[/php]

functions.php
[php]
setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$do= $conn->prepare (”SELECT COUNT(id) as antal FROM Uregister WHERE user = :user ”);
$do->bindParam(’:user’, $var1, PDO::PARAM_INT);
$do->execute();
$obj = $do->fetch(PDO::FETCH_OBJ);
$db_count = $obj->antal;

if($db_count < 1){ $error = "ok"; } else { $error = "*Det angivna användarnamnet finns redan"; } $conn = null; return $error; } //Hashar lösenordet function password ($password, $x){ $password = md5($password); for($i=0; $i <= $runs; $i++){ $password = sha1($password); } return $password; } //Skapar ett salt function salt (){ $chars = "8!b9yea@of,g5ic¤j2d3k4_l7mhrn%#ps&t6uqvx-.1"; $length = strlen($chars); for($i=0; $i <= $length; $i++){ $runs = mt_rand(0,$length); $salt .= substr($chars, $runs, 1); } return sha1($salt); } //Bakar ihop lösenordet och saltet i en loop function fuse ($password, $salt, $x){ for($i=0; $i <= $runs; $i++){ $fused = sha1("$password @:_:@ $salt"); } return $fused; } ?>
[/php]

connect.php
[php]
getMessage();
}
?>
[/php]

Tabellen för databasen
[php]
CREATE TABLE `users`.`uregister` (
`id` INT( 100 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`user` VARCHAR( 50 ) NOT NULL ,
`password` VARCHAR( 50 ) NOT NULL ,
`salt` VARCHAR( 50 ) NOT NULL ,
`x` INT( 10 ) NOT NULL
) ENGINE = MYISAM
[/php]

Väldigt simpel miniräknare

mars 5th, 2008

Fick frågan av en gammal kompis som precis börjat programmera i PHP hur man gör en miniräknare. Så jag visade honom… jag spelade in en film där jag steg för steg visar hur man på ett väldigt simpelt sätt kan göra detta. Detta är absolut ett nybörjar script, men för honom så var det ett bra sätt att förstå hur man skapar funktioner, samt hur man kan jobba med switch-satser, if-satser och formulär.

Jag vill varna för stavfel och gramatikfel… jag hade inget manus eller mall att gå efter. Jag bara skrev scriptet rakt upp och ner, så en del formuleringar och annat kan vara lite ”off”.

– Filmen är borttagen –

Här är koden

[php]
//Vi börjar med att skapa en funktion som kan räkna ut det vi vill att den ska
function calc($value1, $value2, $x){

//Vi vill sedan skapa en if-sats som kan kontrollera om de inskickade värdena är toma.
//Om dem är det så returnerar vi ett felmeddelande istället för summan av en uträkning.
//Vi börjar dock med att ta bort alla eventuella blanksteg (mellanslag)
$value1 = trim($value1);
$value2 = trim($value2);
if(empty($value1) || empty($value2) || empty($x)){
$sum = ”Du måste fulla i alla fält”;
}

//Om allt är OK i if-satsen ovan börjar vi uträkningarna, beroende på räknesättet.
else{
switch($x){
case ’+’: $sum = $value1+$value2; break;
case ’-’: $sum = $value1-$value2; break;
case ’*’: $sum = $value1*$value2; break;
case ’/’: $sum = $value1/$value2; break;
}
}
//Vi returnerar här $sum som innehåller antingen ett felmeddelande, eller summan av
//en uträkning
return $sum;
}

//Nu behöver vi en if-sats som kontrollerar när formuläret vi kommer skapa sist, skickas.
//Vi vill även skicka alla värden till funktionen calc så att vi får tillbaka summan av uträkningen
//Vi vill även skriva ut vad vi räknar ut, och vad summan blir… alternativt ett felmeddelande.
if(isset($_POST[’skicka’])){
$sum = calc($_POST[’tal1’], $_POST[’tal2’], $_POST[’x’]);
echo ”{$_POST[’tal1’]} {$_POST[’x’]} {$_POST[’tal2’]} = $sum”;
}

//Sista steget är att skapa själva formuläret som används för att skicka de värden vi vill räkna ut.
//Samt vilket räknesätt… Detta sker i ren HTML
?>

Tal 1: + * /Tal 2:

[/php]

En programmerares miljö

mars 4th, 2008

Eftersom programmering är ett av mina intressen, spenderar jag ganska mycket tid framför datorn och knackar kod. Det är därför väldigt att omgivningen är så bekväm och optimal som möjligt. Jag är inte en Jolt slukande, chips ätande power programmerare utan föredrar en annan typ av ”uppsättning” när jag ska sitta länge framför datorn.

Först och främst strukturerar jag upp mitt arbete och bestämmer vad som ska göras och i vilken ordning. Jag programmerar aldig på tom mage då det har en tendens att få hjärnan seg (inte så konstigt). Jag dricker väldigt mycket när jag sitter framför datorn, och då menar jag inte sprit. Det blir vatten eller Pepsi Max, alternativt en lättöl. Sen har jag alltid vissa rutiner innan jag börjar (har bara blivit så).

  1. Jag kontrollerar alltid e-posten och svarar på obesvarade mail.
  2. Avslutar andra påbörjade saker  som t ex påbörjade texter, photoshop saker mm.
  3. Ordnar en skön playlist i winamp (T ex. Daft Punk, No Doubt, Save Ferris, Timbaland, The Ventures… osv).
  4. Ofta så programmerar jag tillsammans med en annan (Erik), så vi brukar delar upp arbetet mellan oss.
  5. Utöver detta så eliminerar jag alla störande moment runt omkring mig.

För den mer teknikintresserade kör jag på följande utrustning och mjukvaror

  • Operativsystem: WinXP Pro och 2003 server. Vi använder 2003 på vår utvecklingsserver som vi ansluter remote till och färdigställer projekt.
  • Hårdvara: AMD 64 X2 Dual Core 3800+, 3GB Ram.
  • Skärm: 20″ LCD
  • Program: Dreamweaver, Notepad++, Notepad.
  • PHP: Version 5.2.4
  • Apache: Version 2.2.4
  • MySQL: Version 5.0.45

Det är väldigt personligt hur man programmerar och i vilken miljö man väljer att befinna sig i… men så här är det för mig och det fungerar perfekt.

install.php

mars 3rd, 2008

För den som är intresserad av att bygga ett lite större script som användare själva ska konfigurera, kan det vara lämpligt med en installationsfil som skapar all databasinformation, filer mm. Tänkte dela med mig av en installationsfil som vi (EGKG Data) har utvecklat till en gästbok som jag även senar kommer publicera i denna blogg.

Som sagt, det är en installationsfil till en gästbok, men går väldigt lätt att modifiera till att installera vad som helst. Nu ingår det även HTML och CSS i denna koden för att få struktur och bättre utseende. Anledningen till att css’en är inbakad i samma fil är för att denna fil, efter installationen, ska raderas och då är det onödigt att ha en massa extra text i css filen som inte används.
[php]





Installation


Databas: Vänligen ange en korrekt adress”;
$ch[0] = ”0”;
$display_error1 = 1;
}
else{$error_handle[0] = ”Databas: Adress är OK”; $ch[0] = ”1”;}

if(empty($db_name)) {
$error_handle[1] = ”Databas: Vänligen ange ett korrekt databasnamn”;
$ch[1] = ”0”;
$display_error2 = 1;
}
else{$error_handle[1] = ”Databas: Databasnamn är OK”; $ch[1] = ”1”;}

//Kontrollerar användaruppgifterna för administration
if(empty($admin_u)){
$error_handle[2] = ”Användaruppgifter: Vänligen ange ett användarnamn”;
$ch[2] = ”0”;
$display_error3 = 1;
}
else{$error_handle[2] = ”Användaruppgifter: Användaruppgifter: Användarnamn är OK”; $ch[2] = ”1”;}

if(empty($admin_p)){
$error_handle[3] = ”Användaruppgifter: Vänligen ange ett lösenord”;
$ch[3] = ”0”;
$display_error4 = 1;
}
else{$error_handle[3] = ”Användaruppgifter: Lösenord är OK”; $ch[3] = ”1”;}

if(empty($admin_r)){
$error_handle[4] = ”Användaruppgifter: Vänligen upprepa lösenordet”;
$ch[4] = ”0”;
$display_error5 = 1;
}
else{$error_handle[4] = ”Användaruppgifter: Upprepat lösenord är OK”; $ch[4] = ”1”; }

if($admin_r !== $admin_p){
$error_handle[5] = ”Användaruppgifter: Lösenorden matchar inte!”;
$ch[5] = ”0”;
$display_error5 = 1;
$display_error4 = 1;
}
if($admin_r == $admin_p){
$error_handle[5] = ”Användaruppgifter: Lösenorden är OK”;
$ch[5] = ”1”;
}

}
}

?>


Installation – Databasinställningar
Fyll i nedanstående fält med korrekta uppgifter för din databas. Dessa uppgifter är nödvändiga för att vi skall kunna ansluta till databasen och skapa de tabeller som gästboken kommer använda.

/> Adress (ex localhost)
/> Databasnamn
/> Ange önskat användarnamn
/> Ange önskat lösenord (minst 6 tecken)
/> Repetera lösenordet

Se till så att mappen connection har skrivrättigheter

Felmeddelande
’;}
if($ch[$i] == ”0”){ echo $error_handle[$i]; echo ”
”;}
if($i == 5){ echo ’

’;}
}

}
}

if(isset($_POST[’install_do’])){
if(!isset($_GET[’done’])){
//Om dessa satser stämmer fortsätter installationen
if(!empty($admin_u)){
if(!empty($admin_p)){
if(!empty($admin_r)){
if($admin_r == $admin_p){

//Testar databasanslutningen
$conn = @mysql_connect($db_adress, $db_user, $db_pass) or die(’

Anslutning mysslyckad
Vänligen kontrollera databasuppgifterna

’);
$try = @mysql_select_db($db_name, $conn) or die(’

Anslutning misslyckad
Vänligen kontrollera databasnamnet

’);

//Table för gästboken
$table_gast = ”CREATE TABLE `$db_name`.`gast` (
`id` INT( 10 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`namn` VARCHAR( 50 ) NOT NULL ,
`ort` VARCHAR( 50 ) NOT NULL ,
`hemsida` VARCHAR( 50 ) NOT NULL,
`inlagg` VARCHAR( 1000 ) NOT NULL,
`ip` VARCHAR( 20 ) NOT NULL,
`datum` VARCHAR( 30 ) NOT NULL
) ENGINE = MYISAM ”;

//Table för inställningar
$table_settings = ”CREATE TABLE `$db_name`.`settings` (
`id` INT( 10 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`title` VARCHAR( 100 ) NOT NULL ,
`pages` INT( 10 ) NOT NULL ,
`max_page` INT( 10 ) NOT NULL ,
`inlagg` INT( 100 ) NOT NULL
) ENGINE = MYISAM ”;

//Table för ban
$table_ban = ”CREATE TABLE `$db_name`.`ban` (
`id` INT( 10 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`ip` VARCHAR( 50 ) NOT NULL
) ENGINE = MYISAM ”;

//Table för administration
$table_sec = ”CREATE TABLE `$db_name`.`sec` (
`id` INT( 10 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`user` VARCHAR( 100 ) NOT NULL ,
`pass` VARCHAR( 50 ) NOT NULL ,
`salt` VARCHAR( 50 ) NOT NULL,
`x` int( 5 ) NOT NULL
) ENGINE = MYISAM ”;

//Anropar variablarna som skapar tabellerna
@mysql_query($table_gast) or die(’

Table problem
Ett problem uppstod när tablen skulle skapas!1

’);
@mysql_query($table_settings) or die(’

Table problem
Ett problem uppstod när tablen skulle skapas!1

’);
@mysql_query($table_sec) or die(’

Table problem
Ett problem uppstod när tablen skulle skapas!3

’);
@mysql_query($table_ban) or die(’

Table problem
Ett problem uppstod när tablen skulle skapas!4

’);

//Funktion som hashar lösenordet
function hashGen ($admin_p, $x){
$losenord = md5($admin_p);
for($i = 0; $i <= $x; $i++){ $losenord = sha1($losenord); } return $losenord; } //Funktion som returnar ett salt function saltGen ($y, $x){ $salt = md5($y); for($i = 0; $i <= $x; $i++){ $salt = sha1($salt); } return $salt; } //Funktion som returnar det slutgiltgliga lösenordet med salt function passGen ($baked_hash, $baked_salt){ $pass = sha1("$baked_hash"."$baked_salt"); return $pass; } //Skickar lösenordet till funktionen, tar emot när det är hashat $x = mt_rand(10, 99); $y = mt_rand(1000, 9999999); //Anropar tre funktioner som genererar och returnar salt och lösenord $baked_hash = hashGen($admin_p, $x); $baked_salt = saltGen($y, $x); $baked_pass = passGen($baked_hash, $baked_salt); //Skickar användaruppgifter till sec $insert_sec = "INSERT INTO sec (user, pass, salt, x) VALUES ('$admin_u', '$baked_pass', '$baked_salt', '$x')"; @mysql_query($insert_sec) or die('

Table problem
Det gick inte att skicka uppgifter till databasen!

’);

//Skickar inställningar till settings
$nmn = ”iGäst”;
$pgs = 10;
$lgt = 1000;
$mxs = 3;
$insert_settings = ”INSERT INTO settings (title, pages, max_page, inlagg) VALUES (’$nmn’, ’$pgs’, ’$mxs’, ’$lgt’)”;
@mysql_query($insert_settings) or die(’

Table problem
Det gick inte att skicka uppgifter till databasen!

’);

//Skapar connect.php och fyller i databas inställningar
$myFile = ”connection/connect.php”; //sökväg och filnamn
$fh = fopen(”$myFile”, ’w’) or die(’

Fil problem
Det gick inte att skapa filen!
Kontrollera rättigheter.

’); //skapar filen och öppnar den för att skriva

//innehåll i filen som skapas
$stringData = ’’;
fwrite($fh, $stringData); //skriver datan till filen
fclose($fh); //stänger filen

//Byter sida
header(”location:install.php?done”);
}
}
}
}
}
}
if(isset($_GET[’done’])){
echo ’Installationen lyckades

* Radera filen install.php!
* Sätt tillbaka korrekt rättigheter på mappen connection!
* Kontrollpanelen hittas i mappen sec och heter admin.php!

’;
}
?>




[/php]

Hash+Salt+Multiple Runs

mars 3rd, 2008

Jag har precis skrivit klart ett script i PHP för ett litet projekt jag håller på med och tänkte faktiskt dela med mig av det. Jag vill börja med att säga att jag inte vet om den korrekta benämningen för en loop hash är ”multiple runs”, men jag hade det någonstans i bakhuvudet och det låter bra.

 Syftet med scriptet är alltså att skapa ett säkert lösenord som man sedan sparar undan i databasen (eller fil). Eftersom det inte är rekommenderat att endast hasha ett lösenord så behövs det även ett salt för att utöka säkerheten för brute force attacker mm. Jag kör även en multiple run för att ytterligare utöka säkerheten. Men vad man måste förstår är att detta enbart är vad jag vill kalla, ”ett segt moment” för en hackare som lyckats få åtkomst till lösenorden.

Det ger dig tid att reagera och byta ut alla lösenord…

Scriptet är uppbyggt i funktioner och allting är kommenterat. Jag har även längst ner skrivit hur man ska göra för att kontrollera ett lösenord från inlogging, mot det som finns i databasen eller vart du nu har sparat användaruppgifterna.

[php]
[/php]

Vem, var, hur och varför?

mars 3rd, 2008

Då har även jag trillat i ”blogg-fällan” som jag svor att jag aldrig skulle göra. Vad kommer jag då blogga om? Precis som alla andra kommer jag mest prata strunt… eller inte. Jag ska faktiskt försöka skapa ett vettigt och relevant innehåll för den som är allmänt intresserad av IT. Eftersom IT är en av mina ”passioner” här i livet så kändes det naturligt att blogga om detta lilla ord som betyder så Otroligt mycket i vardagen.

Jag kommer förutom allmänna IT inlägg, roliga incidenter och nyheter även skriva en hel del om PHP och dela med mig av olika koder och script som andra kanske har nytta av. När det gäller just PHP så har jag (som ni kanske har sett) en avdelning just för PHP högst upp på sidan. Jag kommer under den ”fliken”, ”länken”, ”sidan”… eller hur ni nu vill kalla det, lägga upp alla script som jag kommer prata om.

Jahopp, då var introduktionen klar…. Stay tuned