TrackID – Väldigt väldigt bra!

mars 13th, 2008 by Kristoffer No comments »

Tjänsten TrackID som finns i en del mobiler, bland annat min (sony Ericsson w880i) har jag beslutat är helt fantastisk! I många många år har man blivit toreterad av följande scenario:

 ”Men gud… vad heter den låten som spelas!!”

Med TrackID tjänsten kan man snabbt och lätt spela in ett stycke från t ex tv’n, radion eller någon annan källa… intern som extern och sedan skicka detta klipp till en databas där en jämförelse sker. Man får sedan snabbt och lätt svar, och mer än ofta så är det rätt artist och låtnamn man får…samt namn på albumet. Databasen heter Gracenote och verkar vara väldigt stor.

För att verkligen testa hur pass bra denna tjänsten är har jag gjort ett par test.

Test 1 – TV
I detta testet gjorde jag en direkt inspelning från tv’n. Jag satt ett tag och väntade på en låt som inte är allt för sönderspelad (ex. Britney). Låten jag valde att testa hittade jag på en utländsk kanal och heter Save Ferris – I want you to Want me. Bandet har jag lyssnat mycket på innan och denna låten likaså.. men jag testade.

Resultat: Inga problem

Test 2 – Förfest
Jag passade på att testa tjänsten under en förfest jag var på under helgen. Det var relativt hög musik, men samtidigt så vara folket ganska högljudda…. låten som spelades var Red Hot Chillipeppers – Californication.

Resultat: Inga problem

Test 3 – Nattklubb
Förfesten var över och vi begav oss till nattklubben. Här spelades Väldigt hög musik och det fanns massa annat oljud. Låten som spelades var Timbaland – The way I are.

Resultat: Efter 6 försök så gick det

Test 4 – Sång
Jag vill börja med att säga att jag absolut inte är någon som kan sjunga bra. Min träning kommer ifrån singstar ;) Hur som helst försökte jag hitta en väldigt simpel låt som jag kunde sjunga. Det blev Cornelis Vreeswijk – Cecilia Lind på grund av att jag ville ha så lite intrument mm i bakgrunden.

Resutlat: Gick inte. kan bero på min sångförmåga :)

Test 5 – Gitarr
Plockade fram guran och provade lite låten Fergie – Big Girls Don’t Cry.

Resultat: Efter 3 försök gick det.

Nytt system hos AMS

mars 11th, 2008 by admin No comments »

ams1.JPG

För en tid sedan uppstod det plötsligt en märkbar skillnad hos ams (arbetsförmedlingen) hemsida. Det var på tiden säger jag! Jag har testat sidan under ett tag nu och tycker den nya strukturen fungerar mycket bra (när man vant sig). Men en av de absolut bästa sakerna som införts är möjligheten att prenumerera på jobb inom olika yrken och kommuner och få dessa skickade till sin mail eller i en RSS-läsare.

Man har även byggt ett mycket bättre söksystem som gör surfandet mycket enklare om man vet vad man är ute efter. Resten av sidan ser tyvärr mer eller mindre lika dant ut… typiskt 90-tal design. Men, man ska väl inte klaga för mycket eftersom sidan oftast fungerar väldigt bra. Hurvida AMS i sig självt är bra kan jag väl inte påstå… jag syftar mest på folket som jobbar där. De flesta jag har mött har en väldigt konstig syn på arbetsmarknaden och dig som arbetssökande.

Registrering+inlogg

mars 6th, 2008 by admin No comments »

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]

Serverkrasch hos Binero

mars 5th, 2008 by admin No comments »

Vid 14-tiden idag kraschade en av Bineros servrar (VonAnka). Detta drabbar hundratals personer och stämningen i diverse forum är inte god eftersom deras hemsidor, mail mm legat offline i flera timmar. När servern kommer online igen är inte säkert. Sedan 17.36 har dem haft tekniker från Dell på plats för att försöka lösa problemet. Man har då bytt ut en hel del hårdvara i servern, samt börjat en systemåterställning på en virtuell server som ska ersätta den nuvarande servern.

En krasch av denna typen kan vara extremt kritiskt för en verksamhet som Binero. Det handlar inte bara om att få sina kunders sidor och mail tillbaka, utan att även göra det på så kort tid som möjligt. Man lever mycket på sitt rykte, och om befintliga kunder blir missnöjda minskar också chansen att få nya kunder till sin verksamhet.

Nu tror jag inte att denna krasch har någon störra påverkan på deras kundbas eftersom dem redan har ett så pass bra rykte. Under en längre tid har Binero  legat i toppen vad gäller kvalite, support och priser. Dem har även en väldigt framtidsinriktad mentalitet och är väldigt öppna i delar av sin verksamhet. När man blir kund hos dem blir det en form av ”kompis relation” mellan Binero och dig, vilket är unikt.

Uppdatering kl 22.10
Det verkar som att de flesta fått sin mail tillbaka nu. Många (alla?) kommer fortfarande inte åt sina sidor

Uppdatering kl 22.25

På forumet Webmaster Network har Jonathan Sulo (markandsansvarig hos Binero) nyligen kommenterat det som inträffade idag. Jonathan berättar lite kort vad som har hänt och vad dom gör för att åtgärda det, samt så berättar han lite om Bineros målsättning.

”Vår målsättning är inte bara att vara Sveriges vänligaste webbhotell. Vi ska likaså vara stabilast, säkrast, snabbast… ja, kort sagt bäst. Även om det inte är något som kommer att hända över en natt så är det något som definitivt är på gång.”

Uppdatering kl 22.55

Enligt Bineros driftinformation  ska servern VonAnka nu fungera korrekt och man håller på att uppdatera den med mer resurser. Man har temporärt inaktiverat Ruby On Rails av okänd anledning. Men man kommer aktivera det igen snarast möjligt. Man har även återställt all data från natten till onsdag och kommer återställa dagens data direkt från det gamla systemet under torsdagen.

Uppdatering kl 10.50 (6/3)

Arbetet fortsätetr med återställning av mail, samt andra komponenter som behövs installeras.

10 program & webbsidor jag inte klarar mig utan

mars 5th, 2008 by admin No comments »

Läste på någon löpsedel idag ”50 bästa programmen” eller något i den stilen. Det känns som denna typ av artikel återkommer minst en gång i månaden, och för det mesta är det ”meningslösa” program dem pratar om.

Hur som helst.. här kommer en lista över 10 program och webbsidor jag absolut inte kan klara mig utan.

Program

  1. Total Commander - Ett program likt utforskaren, fast på steroider.
  2. Notepad++ - Väldigt smidig programmeringsmiljö.
  3. WinRAR - ”arkiverings” program likt winzip. Klarar väldigt många format.
  4. MSN - Må vara lite töntigt. Men väldigt bra sätt att hålla kontakten med sina vänner.
  5. Winamp - Använder jag dagligen för att spela musik
  6. Outlook - Tillhör officepaketet och sköter allt i mailväg. Själv använder jag office 2007.
  7. MP Classic – Windows mediaplayer classic. Perfekt för filmer.
  8. CutePDF Writer – Skapar smidigt PDF filer av allt
  9. Ultra VNC – För fjärranslutning
  10. Daemon - För att skapa virtuella Enheter

Webbsidor

  1. Webmaster Network - Väldigt brett forum där många företag hänger. mer för dem som jobbar i branchen.
  2. Webforum - Otroligt bra forum för utvecklare (PHP, ASP, ASP.NET osv osv). Dem har även massa andra avdelnignar.
  3. IDG - Bra IT-tidning
  4. DomainTools - Tar reda på vem som äger vilken domän
  5. Binero - Alla våra projekt och webbsidor ligger hos binero. Väldigt bra webbhotell!
  6. Adamek - Genererar md5 hash av det man matar in. En sida som bara fastnat i huvudet.
  7. sr.se/p3 - Webbradio!
  8. Kristianstadsbladet - Gillar att hålla mig uppdaterad om min gammla hemstad
  9. Hallandsposten - Inte fel att hålla sig uppdaterad om stället där man bor
  10. SVD - Absolut inte fel att hålla sig uppdaterad om vad som händer i sverige och världen.

Väldigt simpel miniräknare

mars 5th, 2008 by admin No comments »

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 by admin No comments »

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.

Säkerhet i lager

mars 3rd, 2008 by admin No comments »

Det pratas idag extremt mycket om säkerhet i media på grund av alla hemsidor som blivit utsatta för attacker, webbhotell som släckts ner och massa annat.  ”Säkerhet” har blivit ett extremt hett ämne att diskutera, vilket jag faktisikt tycker är bra. Vi lär oss av våra misstag, vi får ta del av andras misstag, vilket gynnar oss som jobbar med säkerhet… oavsett inom vilket område du jobbar. Jag vill dela med mig av en liten ”modell” eller vad man vill kalla det där jag genom olika lager illustrerar hur man skulle kunna tänka när det gäller säkerhet. Mer specifikt, säkerhet för en server… detta eftersom servern, och dess innehåll oftast är det man vill skydda.

Det här med lager är inte mitt påhitt, men jag tycker det är ett bra sätt att visa hur jag menar.  Jag ”lånar” OSI modellen lite för att illustrera. Sen vet jag inte om det jag illustrerar existerar (ni får gärna rätta mig)… om det Inte gör det så döper jag modellen till BSPIL – Model (Basic Security Protection In Layers)

Lager 1 – Fysiska lagret
Begränsa fysisk åtkomst till din server. Hur du begränsar det beror på vad du ska skydda, men någon form av kontroll där man endast tillåter viss personal åtkomst till det man vill skydda. Det svåra är att bestämma vilka man ska lita på. Fel person och du kan råka ut för sabotage!

Lager 2 – Remote
Om din server tillåter fjärraccess är det extremt viktigt att även här kontrollera vilka som ska få åtkomst, samt vad de kan göra. Utöver detta är det även extremt viktigt hur anslutingen till servern ser ut. Trafiken bör köras genom en VPN tunnel, samt om det finns ett webbinterface så bör du köra med SSL. Kort sagt.. kryptera allting som man kan få åtkomst till externt!

Lager 3 – Portar och Processer
Väldigt viktigt att ha koll på vad som är öppet utåt(internet), och vilka processer(tjänster) som servern kör. I standard utförandet av en server (nyinstallerad) finns det en bunte öppna portar och körande processer. Portar man inte använder vill man stänga, processer som inte används vill man stoppa. Du bör använda dig av en brandvägg och router (fristående enheter, eller kombinerade) för att begränsa vad som är öppet utåt (portar mm). Att endast ha en mjukvaru-brandvägg på samma dator/server som du vill skydda är fel. Du bör ha båda delarna.. alltså en enhet som finns mellan datorn/servern och internet och en mjukvaru-brandvägg i datorn. Blockera alla portar som inte behövs utifrån (21, 22, 23, 25, 53 mm).

Låt oss anta att du vill ha åtkomst porten 23(TELNET) extern för att kunna styra routern. Det man kan göra då är att blockera alla portarna så att externa användare inte kan ansluta till dessa portarna. Du skapar sedan en VPN tunnel mellan dig och det lokala nätverk du vill ha åtkomst till, får en lokal ip-adress och på så sätt kan du lokalt få åtkomst till telnet.

När det gäller processer som körs bör man först och främst ha koll på vad man behöver. Du kan därefter ”döda” de processer som inte är av nytta (hur man gör det beror på operativet). Du bör endast köra de processer som behövs… Inte mer.

Lager 4 – Lösenord
Detta är oftast det sista hindret för en hackare och man bör därför ta lösenord och hantering av lösenord på fullaste allvar. Ett svagt lösenord (god, qwerty, dog, boll, anakin…..) är bland det farligaste som finns. Med punkterna nedan vill jag visa hur man bör (enligt mig) hantera lösenord.

  • Använd inte kända ord (katt, hus, mamma, anakin)
  • Blanda gärna bokstäver, siffror och specialtecken (LE_p4zz0, 1r1nzid3_, ytm0nt-3rIn.g)
  • Att ha längre lösenord är bra, men man behöver inte överdriva (8-16 tecken räcker)
  • Byt lösenord så ofta du kan (varje eller vart annan månad)
  • Skriv inte ner lösenord. Memorera dem!
  • Använd sunt förnufft vid lagring av dem på webbserver. (Hash+salt för att skydda mot bland annat brute force attacker)Detta är inte alt man bör ha i åtanke.. men det är en början när det gäller säkerhet.Jag kommer fylla på ”modellen” efterhand och kanske även göra någon slags grafisk illustrering.
  • install.php

    mars 3rd, 2008 by admin No comments »

    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]





    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 by admin No comments »

    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]