Archive by Author

Timrå IK skärmsläckare

Nu har Timrå IK skärmsläckaren som jag arbetat med en längre tid blivit färdig för release. Det är en skärmsläckare som läser Timrå IK’s nyhetsfeed (RSS) och presenterar rubrikerna på en snygg bakgrund. Jag har stått för ideerna och kodningen medans tennisproffset Andreas Backlund gjort grafiken.

Timrå IK skärmsläckare

Vi kommer att släppa skärmsläckaren för allmänheten idag eller imorgon via Timrå IK’s hemsida. Anledningen till att utvecklingen drog ut på tiden är att jag gjorde den mer avancerad än det först var tänkt. Men nu känner jag att den är redo för att släppas och jag hoppas att den är så buggfri som den kan bli.

Timrå IK skärmsläckaren kan, exklusivt för läsare av denna blogg, laddas hem redan nu på denna adress.

Lägenhet säljes i Sundsvall

Nu har alltså min lägenhet på Hovrättsbacken i SUndsvall lagts ut till försäljning. Den som är nyfiken kan titta på annonsen hos Skandiamäklarna här – Etta med närhet till stan och universitetet. Jag tycker att annonsen blev bra och bilderna helt okey. Helt i linje med mina förvänitningar.

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

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

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
   }

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.

Focus till komponent vid postback utan SmartNavigation

Ett problem med web forms är att dom tappar focus då man gör en postback. Man kan däremot använda SmartNavigation för att lösa detta, men det finns situationer då detta inte fungerar tillfredställande. Då kan man använda sig av denna kodsnutt som sätter focus på den komponent som orsakade postbacken.

Lägg in i din Page_Load:

if(Page.IsPostBack)
{
SetFocusPostBackControl(this);
}

Samt lägg till metoden:

///
/// Sätter fokus vid postback på den kontroll som hade focus
///
///
public void SetFocusPostBackControl(System.Web.UI.Page webPage)
{
string[] ctlPostBack;

ctlPostBack = webPage.Page.Request.Form.GetValues(”__EVENTTARGET”);
if (ctlPostBack != null && ctlPostBack.Length > 0)
{
string ctlUniqueId;
ctlUniqueId = ctlPostBack[0];
System.Web.UI.Control findControl = webPage.Page.FindControl(ctlUniqueId);
if ((findControl != null) &&
(findControl is DropDownList ||
findControl is TextBox ||
findControl is RadioButton ||
findControl is RadioButtonList))
{
string ctlClientId;
ctlClientId = findControl.ClientID;
string jScript;
jScript = ””;;

webPage.Page.RegisterStartupScript(”focus”,jScript );

}
}
}

Tillbaka från fjällvärlden

Efter några sköna dagar i fjällen så är jag tillbaka i Sundsvall brunbränd och utvilad. Det blev 2 dagars slalomåkning samt 1 dags telemarkåkning för min del. Vi åkte heldagar i Ramundberget, Funädasdalsbacken samt Tänndalen och fick uppleva alla möjliga slags väderförhållanden. Det var blåsigt, snöigt och soligt om vartannat men mestadels kanonfint skidväder. Jag som länge gått och suktat efter en telemarkutrustning men som alltid blivit avskräckt av priset slog nu till. Jag köpte telemarkskidor + pjäxor i utförsäljningen på Ramundbergets skiduthyrning och kom undan väldigt billigt. Det är två år gamla skidor men nog fick jag fart på dom alltid. Det blev många mysiga svängar förutom den där nose-plant:en som jag råkade få strax ovanför den fullsatta fjällgrillen. Haha

Utsikt över Funäsdalen Ramundberget - Slalombacken