Varför inte PHP?
Den frågan har Mikk Cederroth fått svara på fler gånger än han kan räkna, internt, av kunder och av andra utvecklare.– Jag förstår den. Med PHP och ett färdigt tema har man något snyggt på en eftermiddag, säger han.
Qimtekgruppen har i stället byggt på Microsofts plattform .NET och programmeringsspråket C#, och har betalat ett pris för det. Utvecklingen har gått långsammare, särskilt i gränssnittet mot kunderna, och produkterna har ibland sett enklare ut än konkurrenternas.– Det ska vi vara ärliga med. Men vi har valt att lägga krutet under ytan.
Frågan blev aktuell igen den här veckan. Den 21 oktober släppte PHP akuta säkerhetsuppdateringar för två kritiska sårbarheter, kallade PHP2Shell. De kan låta en angripare köra egen kod på en webbserver utan att logga in. Felen berör i princip alla PHP-installationer som tar emot webbtrafik och det är nästan 70% av alla världens hemsidor.– Alla plattformar har sårbarheter, även vår. Men vi vill ha få beroenden och full kontroll över vår egen kod, säger Mikk Cederroth.
Gränssnittet och servern talar med varandra via ett skriftligt kontrakt som beskriver exakt vilka uppgifter som skickas, och koden på båda sidor utgår från det.– Om någon ändrar formatet på en uppgift i ena änden slutar koden i andra änden att kompilera. Felet hittas på utvecklarens skärm, inte hos kunden.
Även hastigheten har fasta krav. Varje sida får ladda högst 300 kilobyte kod, sidans huvudinnehåll ska synas inom två sekunder och servern ska svara inom 0,3 sekunder i 95 fall av 100. Kraven mäts innan en ändring godkänns.
Ingenting går ändå ut ogranskat. En AI-modell skriver koden och en annan granskar den, och särskilda AI-granskare letar efter säkerhetshål och prestandaproblem. Varje funktion levereras med automatiska tester, både för enskilda delar och för hela flöden där testet klickar sig igenom tjänsten som en riktig användare.– Vi har en regel inskriven: AI:n får aldrig ändra ett test för att få det att gå igenom. Ett test som faller är ett fynd, inte ett hinder, säger Mikk Cederroth.
Den sista spärren är en människa. Agenterna får spara sina ändringar, men bara en utvecklare kan skicka ut dem till testmiljön, och produktionsmiljön rör AI aldrig.Även besluten är nedskrivna så att AI kan läsa dem. Arkitekturval, regler och lärdomar från tidigare incidenter finns i versionerade dokument som agenterna läser innan de börjar. Produktägare och designer läser samma dokument.– Ett litet team kan i dag bygga det som tidigare krävde en hel avdelning, men bara om spärrarna finns på plats. AI utan spärrar är bara ett snabbare sätt att bygga in fel.
AI skär dessutom åt båda håll. PHP2Shell-sårbarheterna upptäcktes med hjälp av AI, i ett arbete där bland andra säkerhetsföretaget Wiz deltog. Det är ett tecken på att svagheter i äldre kod nu hittas snabbare än någonsin, av både försvarare och angripare.
Qimtekgruppen har i stället byggt på Microsofts plattform .NET och programmeringsspråket C#, och har betalat ett pris för det. Utvecklingen har gått långsammare, särskilt i gränssnittet mot kunderna, och produkterna har ibland sett enklare ut än konkurrenternas.– Det ska vi vara ärliga med. Men vi har valt att lägga krutet under ytan.
Frågan blev aktuell igen den här veckan. Den 21 oktober släppte PHP akuta säkerhetsuppdateringar för två kritiska sårbarheter, kallade PHP2Shell. De kan låta en angripare köra egen kod på en webbserver utan att logga in. Felen berör i princip alla PHP-installationer som tar emot webbtrafik och det är nästan 70% av alla världens hemsidor.– Alla plattformar har sårbarheter, även vår. Men vi vill ha få beroenden och full kontroll över vår egen kod, säger Mikk Cederroth.
En ny plattform bredvid den gamla
Den kontrollen är tanken bakom Q2. Plattformen växer parallellt med dagens system, och tjänsterna flyttas över en funktion i taget, när den nya versionen är minst lika bra som den gamla. Inget stängs av förrän ersättaren finns.Q2 byggs som en enda kodbas för hela koncernen. Qimtek, Svensk Verkstad, BRFmappen och Byggbasen ska dela samma kod. Det som skiljer varumärkena åt, som färger, typsnitt och vilka funktioner som är påslagna, är inställningar och inte kopior.– När en funktion blir bättre blir den bättre överallt samtidigt. Vi rättar ett fel en gång, inte tre gånger, säger Mikk Cederroth.Typat hela vägen
Servern är skriven i C# på .NET 10, Microsofts senaste version. Gränssnittet byggs i Angular och TypeScript, med ett eget komponentbibliotek i stället för färdiga teman. Datan ligger i Azure SQL, Microsofts relationsdatabas i molnet. Där är kopplingarna mellan inköpare, leverantörer, förfrågningar och order strikt definierade.– När tusentals inköpare och leverantörer gör affärer genom oss kan data inte glida isär. Med en riktig relationsdatabas har vi kontroll i varje led.Gränssnittet och servern talar med varandra via ett skriftligt kontrakt som beskriver exakt vilka uppgifter som skickas, och koden på båda sidor utgår från det.– Om någon ändrar formatet på en uppgift i ena änden slutar koden i andra änden att kompilera. Felet hittas på utvecklarens skärm, inte hos kunden.
Även hastigheten har fasta krav. Varje sida får ladda högst 300 kilobyte kod, sidans huvudinnehåll ska synas inom två sekunder och servern ska svara inom 0,3 sekunder i 95 fall av 100. Kraven mäts innan en ändring godkänns.
Säkerheten sitter i grunden
Inloggningen i Q2 har inga lösenord. Användaren får en länk eller en sexsiffrig kod till sin e-post, så det finns inget lösenord att stjäla eller gissa. Apparna har inte heller några lösenord till databasen, eftersom de identifierar sig med en identitet som Azure hanterar. Vem som får se vilket företags uppgifter kontrolleras i själva databasfrågan, inte i ett separat steg som kan glömmas bort.– Det mesta av det här märker kunden aldrig. Det är meningen.AI som utvecklare – med spärrar
Det som länge var .NET-vägens svaghet var tiden det tar att bygga snygga och användarvänliga gränssnitt. Den svagheten håller nu på att försvinna. I Q2 skriver AI-agenter en stor del av koden. De läser planerna, skriver koden och testerna och kör kontrollerna.Ingenting går ändå ut ogranskat. En AI-modell skriver koden och en annan granskar den, och särskilda AI-granskare letar efter säkerhetshål och prestandaproblem. Varje funktion levereras med automatiska tester, både för enskilda delar och för hela flöden där testet klickar sig igenom tjänsten som en riktig användare.– Vi har en regel inskriven: AI:n får aldrig ändra ett test för att få det att gå igenom. Ett test som faller är ett fynd, inte ett hinder, säger Mikk Cederroth.
Den sista spärren är en människa. Agenterna får spara sina ändringar, men bara en utvecklare kan skicka ut dem till testmiljön, och produktionsmiljön rör AI aldrig.Även besluten är nedskrivna så att AI kan läsa dem. Arkitekturval, regler och lärdomar från tidigare incidenter finns i versionerade dokument som agenterna läser innan de börjar. Produktägare och designer läser samma dokument.– Ett litet team kan i dag bygga det som tidigare krävde en hel avdelning, men bara om spärrarna finns på plats. AI utan spärrar är bara ett snabbare sätt att bygga in fel.
Kompilatorn som första granskare
Här menar Mikk Cederroth att valet av C# betalar sig. Ett starkt typat språk som kompileras passar AI särskilt bra, eftersom kompilatorn granskar varje rad som genereras innan den ens körs.– AI har tagit bort vår största nackdel. Vi får PHP-världens fart men behåller säkerheten och stabiliteten.AI skär dessutom åt båda håll. PHP2Shell-sårbarheterna upptäcktes med hjälp av AI, i ett arbete där bland andra säkerhetsföretaget Wiz deltog. Det är ett tecken på att svagheter i äldre kod nu hittas snabbare än någonsin, av både försvarare och angripare.
Mot svenska datacenter
Qimtekgruppens tjänster körs i Microsoft Azure i datacenter inom EU, och en del redan i Sverige. Q2 är byggd så att resten, även databaserna, kan flyttas till Azures svenska datacenter. Det blir allt viktigare för industriföretag med känsliga ritningar och affärsuppgifter.Lanseringar 2027
Under 2027 planerar koncernen en rad lanseringar byggda på den nya plattformen.– Målet är enkelt: svenska företag ska lägga mindre tid på administration och mer tid på att vara konkurrenskraftiga. Nu har vi grunden för att leverera det i en takt vi aldrig haft tidigare, säger Mikk Cederroth.Sources:
- BleepingComputer – PHP ships emergency patches for critical PHP2Shell flaws
- Help Net Security – PHP2Shell: Critical PHP vulnerabilities patched
- Sansec – PHP2Shell research
- The Next Web – PHP rushes out emergency patches for two critical bugs AI found first
- Recorded Future – PHP2Shell exploitation
- Wikipedia – PHP2Shell

