Stänga av session restore i Firefox

Jag har efter att min Firefox blivit uppdaterad fått en feature påslagen som jag INTE gillar. Nämligen att programmet ideligen vill återställa mina tidigare sessioner vid uppstart. Men varför skulle jag vilja trycka på ytterligare en knapp då jag ska köra igång min favoritwebbläsare? Som tur är går det att stänga av sådana här dumheter – session restore.

För att stänga av session restore gör man enligt följande:
1) Skriv about:config i adressfältet (URL) och tryck enter
2) Du får då upp alla inställningar för Firefox.
3) Leta reda på browser.sessionstore.enabled flaggan
4) Dubbelklicka på den så att den blir false

MySQL – replace – sök och ersätt

En smidig funktionalitet i MySQL för att göra enkla sökningar-ersättningar (find-replace) i texter är att använda sig av strängfunktionen replace. Den har visat sig väldigt användbar då jag av misstag fått in en massa junktext i databasen och måste rätta detta.

Syntax:
REPLACE(sträng,från_sträng,till_sträng)

Exempel:
mysql> SELECT REPLACE(’www.mysql.com’, ’w’, ’Ww’);
Resultat> ’WwWwWw.mysql.com’

Förhindra php mail injection

PHP’s mail-funktion (mail) ska man använda med viss försiktighet eftersom spambot’ar relativt enkelt kan utnyttja en inbyggd svaghet/feature/”kalla-det-vad-du-vill”. Det farliga är att många som utvecklar i php inte vet vad som kan hända med svaga osäkrade webbside-formulär som använder denna funktionalitet. Om en spambot hittar och utnyttjar ”svagheten” på dina webbsidor så kan du på ett ögonblick bli en storspammare och får då stå för konsekvenserna då du förr eller senare blir uppsökt av din internetleverantör eller webbhotell.

Vanligtvis har man ”kontakta oss” eller andra sidor där användare får skriva in sitt namn, e-postadress, ämne samt meddelande. Då man sedan skriver koden som ska maila till den som ska ha informationen så kontrollerar man vanligtvis  att e-postadressen är riktig samt att några av fälten inte är tomma. Eventuellt filtrerar man även meddelandet och tar bort html, konstiga tecken eller liknande. Då man processat variablerna så skickar man in dessa i mail-funktionen som skickar ut mail till den/de som ska få det.

Mail-funktionen anropas enligt följande:

bool mail ( string $to, string $subject, string $message [, string $additional_headers [, string $additional_parameters]] )

Exempel på användning:

$to = ”kontakt@person.se”
$subject = $[Ämne från webbformuläret];
$message = $[Meddelande från webbformuläret];
$additional_headers = ”From:”.$[sändaradress från webbformuläret];
mail($to,$subject,$message,$additional_headers);

Eftersom man hårdkodar mottagaradressen så kan man tro att det enbart är den personen som kommer att få mailet. Men så är INTE fallet utan mejlet kan skickas till ett mycket stort antal personer utan din vetskap (om du nu inte läst detta innan) med så kallad mail injection. Detta nämner inte php-manualen utan kodaren måste själv veta hur mail skickas och hur mail är formaterade. Med tanke på att nivån på php-programmerare varierar kraftigt så är det viktigt att man har koll på något sånt här.

Hur fungerar då detta?
Spambot’arna injicerar ytterligare mottagare i parametern för additional_header som kommer från formulärets sändaradress-input ruta. Genom att lägga till fler mottagare genom CC samt BCC i oskyddade formulär så agerar ditt webbformulär som en spam-proxy.

Exempel på mail injection av sändaradress:

sender@anonymous.www%0ACc:recipient@someothersite.xxx %0ABcc:somebloke@grrrr.xxx,someotherbloke@oooops.xxx

Lösning
Använd rigorösa kontroller även på simpla formulär. Kontrollera att det inte går att injicera mail headers. Använd exempelvis en mail-class som har skydd mot denna typ av problem eller något reguljärt uttryck.

Länkar
mailinjection.com – Mailinjection – Mer om problemet
SecurePhp – Email injection – Beskrivning av problemet och lösningar
Hardened PHP – Suhosin patch – Patch som bl.a används av freebsd ports

Minimera alla program från snabbstartsfältet

Den lilla behändiga ikonen som ”minimerar alla program” som finns i Windows XP’s snabbstartsfält råkade försvinna idag. Jag lyckades inte hitta den heller så vad gör man? Det visade sig att man enkelt kan återskapa ikonen. Öppna din favorit-texteditor och skriv in följande rader

[Shell]
Command=2
IconFile=explorer.exe,3
[Taskbar]
Command=ToggleDesktop

Till sist sparar du denna fil med namnet ShowDesktop.scf
Du har nu en sprillans ny quick launch ikon.

Vad är då filer med scf-filändelsen? Jo en ”Windows Explorer Command Shell Command File”. Dessa filer körs av SHELL32.dll och är en speciell filändelse som håller sig hidden även fast man i windows väljer att visa filändelser.

Gömma delar av sidan vid utskrift med CSS

Idag ställdes jag inför en liten men delikat uppgift. På en webbsida där det finns en ”skriv ut” knapp så skall denna knapp gömmas då man skriver ut sidan. Efter en stunds funderande så hade jag en krånglig lösning i huvudet och bestämde mig för att googla efter en bättre lösning. Och som vanligt så har någon haft samma problem.

Det jag inte visste var att det i CSS-2 finns direktiv för hur man lägger till olika stilar (styles) för en sida beroende på vilket medium som används för att titta på den. Så man kan alltså enkelt ha olika stilar för en bunt olika mediatyper. Läs mer om CSS och mediatyper. I mitt fall så var det print-mediatypen den som löste problemet.

Enkelt exempel nedan:

<HTML>
<HEAD>
<STYLE type=”text/css”>

@media print {
.printOnly {display:block;}
.screenOnly {display:none;}
}

@media screen {
.screenOnly {display:block;}
.printOnly {display:none;}
}
</STYLE>
</HEAD>
<BODY>
Sidans innehåll som visas på både skärm samt då sidan skrivs ut
<div class=”screenOnly”>På skärmen enbart, ||min-knapp||</div>
<div class=”printOnly”>På utskriften enbart</div>
</BODY>
</HTML>

Enkelt sätt att undvika spam från webbformulär

Jag har på ett flertal sajter haft problem med att spam-robotar letar upp ”oskyddade” formulär och fyller i dessa med en massa junk som sedan submittas. En lösning på problemet skulle vara att använda någon slags Captcha som är ett slags turing-test som avgör om användaren är människa eller spam-bot. Men detta känns som lite väl mycket overkill för mina sajter.

En lösning som jag använt mig av är att användaren får en input box där de måste fylla i årets år, ex: 2007, för att få gå vidare. Den lösningen har fungerat bra och innebär inte särskilt mycket kod för mig som utvecklare. Men det innebär ett extra steg för användaren som kan upplevas som jobbig eller onödig. Så jag undersökte om det finns ett alternativ som innebär lite kod samt att användaren slipper mata in ytterligare uppgifter.

Den enkla lösningen är att lägga in en extra textarea-kontroll i formuläret som inte visas för användaren genom CSS. Självklart så kan inte spam-roboten hålla sig ifrån att fylla även denna med junk eftersom dom vanligtvis inte förstår sig på CSS. När formuläret sedan valideras på server-sidan så kontrollerar man om fältet är ifyllt eller inte. Om det är ifyllt så är det en spam-robot på sidan och annars är det en människa. 

I formuläret:

<textarea name=”to_adress” style=”display: none;”></textarea>

I formulär-kontrollen

if($_REQUEST[”to_adress”] == ””)
{
// Människa
} else if($_REQUEST[”to_adress”] != ””)
{
// Robot
}

Detta är en fast-and-dirty lösning och se det som en sådan. Använd Captcha eller något mer avancerat om du vill ha en mer avancerad kontroll. Men till enkla low-profile formulär så funkar detta alldeles ypperligt.

Samma lösning i .NET bör fungera enligt följande:

I formuläret:

<textarea runat=”server” id=”to_adress” name=”to_adress” style=”display: none;”></textarea>

eller

<style type=”text/css”>    .gommig {display: none;}</style>
<textbox Runat=”server” CssClass=”gommig” TextMode=”MultiLine” id=”to_adress2″></textbox>

I formulär-kontrollen;

   // Alt textarea
   if( to_adress.Value == ”” )
   {
    // Människa
   }
   else
   {
    // Robot
   }

 // Alt textbox
   if( to_adress2.Text == ”” )
   {
    // Människa
   }
   else
   {
    // Robot
   }

Hur man blir kvitt det störande ”starta om datorn” meddelandet i Windows

Givetvis poppar det förhatliga meddelandet om att jag måste starta om datorn precis då jag är mitt i nått viktigt arbetsmoment. Känner ni igen er? Den säger: Automatiska uppdateringar. Installationen har nästan slutförts. Datorn måste startas om innan uppdateringarna börjar gälla. Vill du starta om nu? ”Starta om nu” eller ”starta om senare”

 Starta om datorn

Om jag råkar fortsätta skriva så kan det bli så att jag automatiskt väljer ”starta om nu” med konsekvensen att windows stänger ner mina program och startar om datorn. Eftersom jag har ett 20-tal applikationer igång med en massa data i dessa så tar denna procedur säkert 10-15 minuter.

Om du väljer ”starta om senare” så tror du att du ska slippa meddelandet. Men icke, det dyker upp igen då man minst av allt vill se det. Om du sedan försöker döda processen wuauclt.exe i aktivitetshanteraren så går det bra men inom kort så börjar dialogen poppa upp igen.

Men det finns ett sätt att få stopp på eländet på ett enkelt sätt. Det gör man genom att stänga av tjänsten som sköter detta. Klicka på Start -> Kör… för att få upp en kommandoprompt. Väl där skriver du:

sc stop wuauserv

Om du tittar i tasktray (meddelandefältet) så ser du att den förhatliga ikonen är borta och du slipper popupen. Voila! Men kom ihåg att du förmodligen bör starta om datorn inom den närmsta tiden. För att lättare komma ihåg det här kommandot så kan du skapa en bat-fil med detta kommando.

Marcus Nyberg på google

Ett av målen med hemsidan var att folk skulle hitta mig på nätet genom att söka på Marcus Nyberg. Om man söker på Marcus Nyberg på svenska google så kommer min hemsida på tredje plats i sökresultatet. Men tredje plats är väl inget för mig. Målet är givetvis att komma överst i sökresultatet och komma före racingkillen och hockeyspelaren. Tiden får utvisa om jag lyckas.

DateTime till yyyy-MM-dd

En användbar kodsnutt för att få dagens datum på formatet yyyy-MM-dd (ex 2007-04-27):

string dagensDatum = DateTime.Now.ToString(”yyyy-MM-dd”);

Det går givetvis att använda det på vilket DateTime som helst:

DateTime datum = new DateTime(2007,4,27);
string nagatDatum = datum.ToString(”yyyy-MM-dd”);

För att veta vilka fler formateringar som går att göra så kan man läsa mer på DateTime.ToString Method (String) på MSDN.