<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="wordpress/2.0" -->
<rss version="2.0" 
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	>

<channel>
	<title>digital venues.</title>
	<link>http://www.digitalvenues.se</link>
	<description>Webbdesign med fokus på användbarhet och tillgänglighet.</description>
	<pubDate>Thu, 03 Jan 2008 19:00:03 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.0</generator>
	<language>en</language>
			<item>
		<title>Ny webbplats för Safety Seal</title>
		<link>http://www.digitalvenues.se/blogg/2008/01/ny-webbplats-for-safety-seal/</link>
		<comments>http://www.digitalvenues.se/blogg/2008/01/ny-webbplats-for-safety-seal/#comments</comments>
		<pubDate>Thu, 03 Jan 2008 19:00:03 +0000</pubDate>
		<dc:creator>Jimmy</dc:creator>
		
	<category>projekt</category>
		<guid isPermaLink="false">http://www.digitalvenues.se/blogg/2008/01/ny-webbplats-for-safety-seal/</guid>
		<description><![CDATA[Vi mjukstartar det nya året här i bloggen med berätta att företaget Safety Seal har fått en ny webbplats som vi varit med om att utveckla. Arbetet utfördes i samarbete med allstars it &#38; media och vår del låg i att ta fram en ny design och producera ett antal HTML/CSS-mallar. Kolla in det färdiga [...]]]></description>
			<content:encoded><![CDATA[<p><span class="closing">Vi mjukstartar det nya året här i bloggen med berätta att företaget Safety Seal har fått en ny webbplats som vi varit med om att utveckla. Arbetet utfördes i samarbete med <a href="http://allstars.se">allstars it &amp; media</a> och vår del låg i att ta fram en ny design och producera ett antal HTML/CSS-mallar. Kolla in det färdiga <a href="http://www.safetyseal.se">resultatet här</a>.<a id="more-92" class="more"></a></span></p>

<img src="/images/posts/safetyseal.jpg" class="big" width="550" height="320" alt="Skärmdump på Safetyseal.se" />]]></content:encoded>
			<wfw:commentRSS>http://www.digitalvenues.se/blogg/2008/01/ny-webbplats-for-safety-seal/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Har du fastnat?</title>
		<link>http://www.digitalvenues.se/blogg/2007/10/har-du-fastnat/</link>
		<comments>http://www.digitalvenues.se/blogg/2007/10/har-du-fastnat/#comments</comments>
		<pubDate>Thu, 18 Oct 2007 21:13:28 +0000</pubDate>
		<dc:creator>Niklas</dc:creator>
		
	<category>humor</category>
	<category>användarvänlighet</category>
	<category>formulär</category>
		<guid isPermaLink="false">http://www.digitalvenues.se/blogg/2007/10/har-du-fastnat/</guid>
		<description><![CDATA[Tidigare i veckan gjorde jag ett litet test som bland annat innebar att jag behövde fylla i massa uppgifter i ett formulär. När jag fyllt i all information och tagit mig till slutet av sidan, så fanns tre knappar att trycka på: &#187;OK&#171;, &#187;Avbryt&#171; och &#187;Jag har fastnat&#171;.



Just det, en Jag har fastnat-knapp! Jag kunde [...]]]></description>
			<content:encoded><![CDATA[<p>Tidigare i veckan gjorde jag ett litet test som bland annat innebar att jag behövde fylla i massa uppgifter i ett formulär. När jag fyllt i all information och tagit mig till slutet av sidan, så fanns tre knappar att trycka på: &#187;<span class="caps">OK</span>&#171;, &#187;Avbryt&#171; och &#187;Jag har fastnat&#171;.<a id="more-90" class="more"></a></p>

<img src="/images/posts/konstig-knapp.jpg" class="big" width="550" height="250" alt="Formulär med 'Jag har fastnat'-knapp" />

<p>Just det, en <em>Jag har fastnat-knapp</em>! Jag kunde självklart inte hålla fingrarna borta, utan testade att klicka för att se vad som hände. Men tyvärr var det inget sexigare än en knapp som tömde formuläret &#8212; och jag fick börja om från början igen.</p>

<p><span class="closing">Har aldrig förstått meningen med att ha en knapp som rensar formuläret. Och om man nu nödvändigtvis måste ha en sådan bör man i alla fall tydligt ange vad knappen gör. För övrigt kan man ju också fundera över hurvida en knapp som tömmer formuläret är till någon hjälp eller ej om man nu verkligen <em>har</em> fastnat (vad det nu innebär?). </span></p>]]></content:encoded>
			<wfw:commentRSS>http://www.digitalvenues.se/blogg/2007/10/har-du-fastnat/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Använd din egen URL som OpenID</title>
		<link>http://www.digitalvenues.se/blogg/2007/10/anvand-din-egen-url-som-openid/</link>
		<comments>http://www.digitalvenues.se/blogg/2007/10/anvand-din-egen-url-som-openid/#comments</comments>
		<pubDate>Thu, 04 Oct 2007 10:43:00 +0000</pubDate>
		<dc:creator>Niklas</dc:creator>
		
	<category>openid</category>
		<guid isPermaLink="false">http://www.digitalvenues.se/blogg/2007/10/anvand-din-egen-url-som-openid/</guid>
		<description><![CDATA[

Jag älskar idén med OpenID och hoppas verkligen att det slår igenom på allvar. Det vore minst sagt skönt att kunna använda samma inloggning på alla webbplatser. Den senaste tiden har jag satt mig in i den tekniska biten bakom OpenID lite mer, eftersom vi valt att integrera OpenID-stöd på Wishlistr. Och nu tänkte jag [...]]]></description>
			<content:encoded><![CDATA[<img src="/images/posts/oidlogo.gif" width="120" height="88" class="intro" alt="OpenID" />

<p>Jag älskar idén med <a href="http://openid.net">OpenID</a> och hoppas verkligen att det slår igenom på allvar. Det vore minst sagt skönt att kunna använda samma inloggning på alla webbplatser. Den senaste tiden har jag satt mig in i den tekniska biten bakom OpenID lite mer, eftersom vi valt att integrera <a href="http://www.wishlistr.se/blogg/arkiv/enklare-inloggning-med-openid/">OpenID-stöd på Wishlistr</a>. Och nu tänkte jag bjuda på ett enkelt sätt att använda din egen <abbr title="Uniform Resource Locator">URL</abbr> som ditt OpenID.<a id="more-89" class="more"></a></p>

<p>Låt säga att jag vill ha adressen &#187;http://digitalvenues.se&#171; som mitt OpenID. Egentligen innebär det då att jag måste implementera en egen OpenID-server för att hantera verifieringen av min indentitet. Vilket kan vara lite krångligt och omständligt, även fast det idag finns <a href="http://openid.net/wiki/index.php/Libraries">bra ramverk för detta</a>.</p>

<p>Ett enklare sätt är att använda en extern part som tillhandahåller en OpenID-tjänst, så som till exempel <a href="https://www.myopenid.com/">MyOpenID</a> och sedan delegera autentiseringsförfrågningarna dit, när de kommer till digitalvenues.se. Det enda som behövs för detta är följande kodsnutt i <abbr title="Hypertext Markup Language">HTML</abbr>-dokumentets <code>&lt;head&gt;</code>-sektion på digitalvenues.se:</p>

<pre>
<samp>
<span class="tags">&lt;link rel=<span class="strings">"openid.server"</span> href=<span class="strings">"http://www.myopenid.com/server"</span> /&gt;</span>
<span class="tags">&lt;link rel=<span class="strings">"openid.delegate"</span> href=<span class="strings">"http://mittkonto.myopenid.com/"</span> /&gt;</span>
</samp>
</pre>

<p><span class="closing">Fördelen med detta är &#8212; förutom att jag enkelt kan använda en <span class="caps">URL</span> jag själv äger &#8212; att jag får mer kontroll över mitt OpenID. Om jag någon gång skulle vilja byta till en annan OpenID-tjänst av någon anledning så behöver jag bara uppdatera koden på min sida som talar om till vem jag vill överlämna autentiseringen. Vilket är bra mycket enklare än att uppdatera eller skaffa nya konton på alla de webbplatser där jag identifierar mig med mitt OpenID.</span></p>

]]></content:encoded>
			<wfw:commentRSS>http://www.digitalvenues.se/blogg/2007/10/anvand-din-egen-url-som-openid/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Skriv bra introtexter</title>
		<link>http://www.digitalvenues.se/blogg/2007/10/skriv-bra-introtexter/</link>
		<comments>http://www.digitalvenues.se/blogg/2007/10/skriv-bra-introtexter/#comments</comments>
		<pubDate>Tue, 02 Oct 2007 09:43:15 +0000</pubDate>
		<dc:creator>Niklas</dc:creator>
		
	<category>länkar</category>
	<category>användarvänlighet</category>
	<category>copywriting</category>
		<guid isPermaLink="false">http://www.digitalvenues.se/blogg/2007/10/skriv-bra-introtexter/</guid>
		<description><![CDATA[Jakob Nielsen skriver om vikten av att skära ner på bla-bla-språket och få till bra introtexter i sin senaste kolumn &#187;Blah-Blah Text: Keep, Cut, or Kill?&#171;]]></description>
			<content:encoded><![CDATA[<p>Jakob Nielsen skriver om vikten av att skära ner på bla-bla-språket och få till bra introtexter i sin senaste kolumn &#187;<a href="http://www.useit.com/alertbox/intro-text.html">Blah-Blah Text: Keep, Cut, or Kill?</a>&#171;</p>]]></content:encoded>
			<wfw:commentRSS>http://www.digitalvenues.se/blogg/2007/10/skriv-bra-introtexter/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Grid Layout</title>
		<link>http://www.digitalvenues.se/blogg/2007/09/grid-layout/</link>
		<comments>http://www.digitalvenues.se/blogg/2007/09/grid-layout/#comments</comments>
		<pubDate>Thu, 27 Sep 2007 16:37:11 +0000</pubDate>
		<dc:creator>Jimmy</dc:creator>
		
	<category>javascript</category>
	<category>länkar</category>
	<category>webbdesign</category>
		<guid isPermaLink="false">http://www.digitalvenues.se/blogg/2007/09/grid-layout/</guid>
		<description><![CDATA[Här är en trevlig present till alla webbdesigners: Grid Layout &#8212; ett anpassningsbart JavaScript som hjälper dig passa in din design på ett rutnät.]]></description>
			<content:encoded><![CDATA[<p>Här är en trevlig present till alla webbdesigners: <a href="http://gridlayouts.com/">Grid Layout</a> &#8212; ett anpassningsbart JavaScript som hjälper dig passa in din design på ett rutnät.</p>]]></content:encoded>
			<wfw:commentRSS>http://www.digitalvenues.se/blogg/2007/09/grid-layout/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Tillgänglighet inget för Femman</title>
		<link>http://www.digitalvenues.se/blogg/2007/09/tillganglighet-inget-for-femman/</link>
		<comments>http://www.digitalvenues.se/blogg/2007/09/tillganglighet-inget-for-femman/#comments</comments>
		<pubDate>Sat, 22 Sep 2007 11:07:14 +0000</pubDate>
		<dc:creator>Jimmy</dc:creator>
		
	<category>tillgänglighet</category>
	<category>webbutveckling</category>
		<guid isPermaLink="false">http://www.digitalvenues.se/blogg/2007/09/tillganglighet-inget-for-femman/</guid>
		<description><![CDATA[

I veckan lanserade Kanal 5 sin nya webbplats. En webbplats som enligt dem själva kommer att bli &#187;Sveriges bästa tv-sajt&#171;. Istället för att enbart fokusera på sitt eget tv-utbud vill Femman skapa en mötesplats för alla som älskar tv &#8212; i alla former. Konkurrenter som SVT, TV4 och TV3 ges nästan lika mycket utrymme på [...]]]></description>
			<content:encoded><![CDATA[<img src="/images/posts/kanal5logo.gif" width="120" height="100" class="intro" alt="Kanal 5" />

<p>I veckan lanserade Kanal 5 sin <a href="http://www.kanal5.se">nya webbplats</a>. En webbplats som enligt dem själva kommer att bli &#187;Sveriges bästa tv-sajt&#171;. Istället för att enbart fokusera på sitt eget tv-utbud vill Femman skapa en mötesplats för alla som älskar tv &#8212; i alla former. Konkurrenter som <span class="caps">SVT</span>, <span class="caps">TV4</span> och <span class="caps">TV3</span> ges nästan lika mycket utrymme på webbplatsen som Kanal 5 själva och man lockar besökare genom att utlova en daglig dos av tv-relaterade nyheter.<a id="more-86" class="more"></a> Ett intressant och modigt upplägg, utan tvekan. Men jag vet inte jag, hittills har nyheterna mest bestått av kändisskvaller och den nya designen med sina grälla färger och gigantiska reklambanners är ett steg tillbaka jämfört med den gamla.</p>

<p>Men det är först när man tar en titt under huven som den riktiga besvikelsen infinner sig. Femman anger att det är ett <abbr title="eXtenstible HyperText Markup Language">XHTML</abbr> Transitional-dokument, men <abbr title="World Wide Web Consortium">W3C</abbr>:s validator håller inte riktigt med, &#187;<span lang="en">Failed validation, 1449 Errors</span>&#171;, säger den. Och koden är faktiskt en enorm röra av <code>&lt;div&gt;</code>, <code>&lt;span&gt;</code> och <code>&lt;table&gt;</code>. Någon form av semantik är svårt att hitta överhuvudtaget, och slår man av <abbr title="Cascading Style Sheets">CSS</abbr>-filerna ser man att sidan helt saknar en logisk uppbyggnad. En snabbcheck med <a href="http://www.standards-schmandards.com/projects/fangs/">Fangs</a> skvallrar också om hur jobbigt det blir om man skulle försöka sig på att surfa på sidorna med en skärmläsare. När man dessutom använder sig av en <abbr title="Uniform Resource Locator">URL</abbr>-struktur som tycks arbeta efter principen &#187;ju längre och mer kryptisk desto bättre&#171; är det inte svårt att lista ut att nya Kanal5.se knappast kommer bli en favorit hos Google och andra sökmotorer.</p>

<img src="/images/posts/femman.jpg" class="big" width="550" height="330" alt="Skärmdump på nya Kanal5.se" />

<p class="caption">Ovan: Kanal 5:s nya webbplats, lanserad under devisen &#187;<span lang="en">We Love TV</span>&#171;.</p>

<p>Något annat som slår en är mängden JavaScript. Hela 51 externa skript och nästan lika många direkt i <abbr title="eXtenstible Hypertext Markup Language">XHTML</abbr>-koden. Tillsammans med 5 flashobjekt, 99 bilder, 12 <span class="caps">CSS</span>:er blir det en del att hämta för webbläsaren för att kunna visa sidan. Med den mängden JavaScript blir man ju genast nyfiken på hur det fungerar om man slår av JavaScript-stödet i webbläsaren. Relativt okej faktiskt (<a href="http://parseerror.blogg.se/1190056431_kanal5se__katastrof.html">vilket inte var fallet tidigare i veckan</a>). Saker som webb-tv och kommentarer fungerar visserligen inte men jag upplever ändå sidan som bättre utan JavaScript för jag slipper reklam och sidorna laddar snabbare. Så frågan man ställer sig är självklart: är verkligen alla drygt 700 <abbr title="Kilobyte">kB</abbr> av JavaScript som finns nödvändig?</p>

<p><span class="closing">Femman kanske älskar tv. Men någon större kärlek till webben verkar de ju inte ha. Det är sorgligt att se att man fortfarande, år 2007, kan komma undan med att koda en webbplats så illa.</span></p>

<p class="amendment">Uppdatering 2007-10-04: Femman verkar gjort en del uppdateringar senaste tiden. Mängden JavaScript har bland annat reducerats till 8 externa filer nu. Ett steg i rätt riktning!</p>]]></content:encoded>
			<wfw:commentRSS>http://www.digitalvenues.se/blogg/2007/09/tillganglighet-inget-for-femman/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Extern papperskorg</title>
		<link>http://www.digitalvenues.se/blogg/2007/09/extern-papperskorg/</link>
		<comments>http://www.digitalvenues.se/blogg/2007/09/extern-papperskorg/#comments</comments>
		<pubDate>Tue, 04 Sep 2007 08:05:41 +0000</pubDate>
		<dc:creator>Niklas</dc:creator>
		
	<category>humor</category>
	<category>länkar</category>
		<guid isPermaLink="false">http://www.digitalvenues.se/blogg/2007/09/extern-papperskorg/</guid>
		<description><![CDATA[Mysig idé: En extern papperskorg till din dator. Det vore väl nått?]]></description>
			<content:encoded><![CDATA[<p>Mysig idé: <a href="http://www.cagninadesign.com/proyectos/2007/tempo.html">En extern papperskorg till din dator</a>. Det vore väl nått?</p>]]></content:encoded>
			<wfw:commentRSS>http://www.digitalvenues.se/blogg/2007/09/extern-papperskorg/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Så förhindrar du CSRF-attacker</title>
		<link>http://www.digitalvenues.se/blogg/2007/08/sa-forhindrar-du-csrf-attacker/</link>
		<comments>http://www.digitalvenues.se/blogg/2007/08/sa-forhindrar-du-csrf-attacker/#comments</comments>
		<pubDate>Tue, 28 Aug 2007 10:17:10 +0000</pubDate>
		<dc:creator>Niklas</dc:creator>
		
	<category>säkerhet</category>
	<category>csrf</category>
	<category>php</category>
		<guid isPermaLink="false">http://www.digitalvenues.se/blogg/2007/08/sa-forhindrar-du-csrf-attacker/</guid>
		<description><![CDATA[Cross-Site Request Forgeries (CSRF) är en form av attack, riktad mot webbplatser, som hamnat lite i skuggan av den mer kända metoden Cross-Site Scripting (XSS). Men det kanske den inte borde ha gjort. CSRF-attacker kan både vara svårare att stoppa och göra mer skada än XSS-attacker. Dessutom är de flesta webbsidor sårbara när det kommer [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://en.wikipedia.org/wiki/CSRF" lang="en">Cross-Site Request Forgeries</a> (<abbr title="Cross-Site Request Forgeries">CSRF</abbr>) är en form av attack, riktad mot webbplatser, som hamnat lite i skuggan av den mer kända metoden <a href="http://en.wikipedia.org/wiki/Cross-site_scripting" lang="en">Cross-Site Scripting</a> (<abbr title="Cross-Site Scripting">XSS</abbr>). Men det kanske den inte borde ha gjort. <span class="caps">CSRF</span>-attacker kan både vara svårare att stoppa och göra mer skada än <span class="caps">XSS</span>-attacker. Dessutom är de flesta webbsidor sårbara när det kommer till <span class="caps">CSRF</span>.<a id="more-84" class="more"></a> <a href="http://shiflett.org/blog/2007/mar/my-amazon-anniversary">Amazon är till exempel det</a>, <a href="http://4diggers.blogspot.com/">Digg har likaså varit det</a> precis som <a href="http://0x000000.com/?i=213">Google Adsense</a>. Så om du inte aktivt jobbat med att förhindra <span class="caps">CSRF</span>-attacker är din webbtjänst med största sannolikhet också sårbar.</p>

<h3>Vad är CSRF?</h3>
<p>Man kan säga att <span class="caps">CSRF</span> är en form av attack som utnyttjar förtroendet en webbplats har gentemot en användare. Det är alltså lite av motsatsen till vad <span class="caps">XSS</span> är, där en användares förtroende till en webbplats istället utnyttjas.</p>

<p>Rent praktiskt fungerar en <span class="caps">CSRF</span>-attack som så att en angripare kan få din webbapplikation att utföra funktioner som om det var en anförtrodd (det vill säga inloggad) användare som startade funktionen. Faktum är att själva funktionen startas av den anförtrodda användaren, fast utan dennes vetskap. Angriparen skickar nämligen den förfalskade begäran om att starta funktionen genom att tvinga en anförtrodd användares webbläsare att göra förfrågan.</p>

<p>Jag vet, det här låter ju riktigt avancerat. Men med lite grundkunskaper om hur <abbr title="Hypertext Transfer Protocol">HTTP</abbr> fungerar och ett lagom dumt och förenklat exempel är det enklare att förstå.</p>

<p>Låt säga att det finns en webbplats där du som inloggad medlem kan beställa bananer och äpplen. Koden för beställningsformuläret ser ut så här:</p>

<pre>
<samp>
<span class="tags">&lt;form action=<span class="strings">"/kop.php"</span> method=<span class="strings">"post"</span>&gt;</span>
<span class="tags">&lt;select name=<span class="strings">"frukt"</span>&gt;</span>
    <span class="tags">&lt;option name=<span class="strings">"banan"</span>&gt;</span>Bananer<span class="tags">&lt;/option&gt;</span>
    <span class="tags">&lt;option name=<span class="strings">"applen"</span>&gt;</span>Äpplen<span class="tags">&lt;/option&gt;</span>
<span class="tags">&lt;/select&gt;</span>
Antal: <span class="tags">&lt;input type=<span class="strings">"text"</span> name=<span class="strings">"antal"</span> /&gt;</span>
<span class="tags">&lt;input type=<span class="strings">"submit"</span> value=<span class="strings">"Köp!"</span> /&gt;</span>
<span class="tags">&lt;/form&gt;</span>
</samp>
</pre>

<p>Och sidan som processar beställningen, skriven i <span class="caps">PHP</span>, ser förenklat ut ungefär så här:</p>

<pre>
<samp>
<span class="keywords">if</span>(<span class="functioncalls">user_is_loggedin</span>()) {

    <span class="functioncalls">buy_fruits</span>(<span class="variables">$_REQUEST</span>[<span class="strings">'frukt'</span>], <span class="variables">$_REQUEST</span>[<span class="strings">'antal'</span>], <span class="variables">$_SESSION</span>[<span class="strings">'userid'</span>]);

}
</samp>
</pre>

<p>Innan beställningen läggs kollar vi alltså att användaren är inloggad, så man kan koppla beställningen till en användare. Säkrare en så kan det väl inte bli &#8212; varje gång vet vi att det är en inloggad och godkänd användare som lagt beställningen, eller? Nej, exemplet ovan är så klart skapat för att visa på hur enkelt man kan utföra en <span class="caps">CSRF</span>-attack. I det här fallet räcker det med att en person besatt av att beställa tonvis med bananer åt folk infogar följande kod på sin egen webbplats:</p>

<pre>
<samp>
<span class="tags">&lt;img src=<span class="strings">"http://www.fruktsajten.se/kop.php?frukt=bananer&#038;antal=10000"</span> /&gt;</span>
</samp>
</pre>

<p>Om du besöker attackerarens webbplats, där kodraden ovan finns, samtidigt som du är inloggad på fruktbeställningswebbplatsen kommer alltså din webbläsare, utan din vetskap, beställa ett gäng bananer.</p>

<p>Som du kanske förstår så blir sådana här typer av attacker svåra att upptäcka och stoppa. Eftersom själva förfrågan faktiskt kommer från en betrodd användares webbläsare. Dessutom är ju såklart inte <span class="caps">CSRF</span>-attacker begränsade till bananbeställning utan praktiskt taget allt som en inloggad användare kan göra skulle också attackeraren kunna utföra &#8212; posta kommentarer, sätta betyg, byta lösenord, beställa saker och så vidare.</p>

<p>Speciellt viktigt att skydda sig mot sådana här typer av attacker blir det för webbplatser som erbjuder någon form av mer permanent inloggning, som till exempel <a href="http://www.amazon.com/" lang="en">Amazon</a> och <a href="http://www.flickr.com/" lang="en">Flickr</a> har, där användaren kan vara inloggad på en webbplats även om det var en månad sedan han/hon senast besökte tjänsten.</p>

<h3>Hur skyddar man sig?</h3>
<p>Det är svårt att ge ett hundraprocentigt skydd mot sådana här typer av attacker. Men det finns mycket man kan göra för att minska risken.</p>

<p>Till att börja med bör man se till att man alltid använder <span class="caps" lang="en">POST</span> istället för <span class="caps" lang="en">GET</span> i formulär och Ajax-anrop, så långt det är möjligt. Samt att man i sin kod ser till att det är en <span class="caps" lang="en">POST</span>-förfrågan som kommer och inget annat. Detta ger inte på något sätt ett tillfredsställande skydd, men försvårar det något för den som tänker utföra en attack, och skulle faktiskt vara skydd nog för att förhindra den enkla attacken i exemplet ovan.</p>

<p>Ett bättre skydd mot <span class="caps">CSRF</span>-attacker får man genom att försöka säkerställa att användaren använt formuläret i fråga för att skicka förfrågningen till servern. Det kan man göra genom att alltid generera en ny slumpad sträng när sidan laddas, som man sedan både sparar i en session och skickar med i formuläret när det postas. Innan man processar formuläret kollar man sedan att strängen i sessionen överensstämmer med den som kom via postningen av formuläret.</p>

<p>Så om vi återigen tar exemplet ovan och försöker göra det lite mer säkert skulle koden för formuläret kunna se ut så här:<sup id="kod"><a href="#fotnot-kod">1</a></sup></p>

<pre>
<samp>
<span class="phpdelimiters">&lt;?php</span>
<span class="comments">// Generera en slumpad sträng</span>
<span class="variables">$token</span> = <span class="functioncalls">md5</span>(<span class="functioncalls">uniqid</span>(<span class="functioncalls">rand</span>(), <span class="keywords">true</span>));
<span class="comments">// Spara strängen i sessionen</span>
<span class="variables">$_SESSION</span>[<span class="strings">'token'</span>] = <span class="variables">$token</span>;
<span class="phpdelimiters">?&gt;</span>

<span class="tags">&lt;form action=<span class="strings">"/kop.php"</span> method=<span class="strings">"post"</span>&gt;</span>
<span class="tags">&lt;select name=<span class="strings">"frukt"</span>&gt;</span>
    <span class="tags">&lt;option name=<span class="strings">"banan"</span>&gt;</span>Bananer<span class="tags">&lt;/option&gt;</span>
    <span class="tags">&lt;option name=<span class="strings">"applen"</span>&gt;</span>Äpplen<span class="tags">&lt;/option&gt;</span>
<span class="tags">&lt;/select&gt;</span>
Antal: <span class="tags">&lt;input type=<span class="strings">"text"</span> name=<span class="strings">"antal"</span> /&gt;</span>
<span class="tags">&lt;input type=<span class="strings">"hidden"</span> name=<span class="strings">"token"</span> value=<span class="strings">"</span><span class="phpdelimiters">&lt;?= <span class="variables">$token</span> ?&gt;</span><span class="strings">"</span> /&gt;</span>
<span class="tags">&lt;input type=<span class="strings">"submit"</span> value=<span class="strings">"Köp!"</span> /&gt;</span>
<span class="tags">&lt;/form&gt;</span>
</samp>
</pre>

<p>Och sidan som processar beställningen skulle förenklat kunna se ut som så här:</p>

<pre>
<samp>
<span class="keywords">if</span>(<span class="functioncalls">user_is_loggedin</span>()) {

    <span class="comments">// Kolla att strängen som finns i sessionen överensstämmer med den som kom via formuläret</span>
    <span class="keywords">if</span>(<span class="functioncalls">isset</span>(<span class="variables">$_SESSION</span>[<span class="strings">'token'</span>]) &amp;&amp; <span class="variables">$_SESSION</span>[<span class="strings">'token'</span>] === <span class="variables">$_POST</span>[<span class="strings">'token'</span>]) {

         <span class="functioncalls">buy_fruits</span>(<span class="variables">$_POST</span>[<span class="strings">'frukt'</span>], <span class="variables">$_POST</span> [<span class="strings">'antal'</span>], <span class="variables">$_SESSION</span>[<span class="strings">'userid'</span>]);

     }

}
</samp>
</pre>

<p>Genom att införa dessa ändringar kan vi med större säkerhet veta att förfrågningen kommer från en betrodd användare som använt &#187;rätt&#171; formulär &#8212; och på så sätt har vi skyddat oss bättre mot <span class="caps">CSRF</span>.</p>

<h3>Slutligen: Kan man bli ännu säkrare?</h3>
<p>Det finns utan tvivel många saker man kan göra för att förbättra säkerheten ytterligare. Till exempel kan man tidsbegränsa formuläret så att det inte får gå mer än 5 minuter från det att formuläret laddats till dess att postningen av den samma sker. Vilket är vanligt vid inloggning på Internet-banker till exempel. Men vill man vara riktigt säker kan man använda sig av <a href="http://en.wikipedia.org/wiki/CAPTCHA"><abbr title="Completely Automated Public Turing test to tell Computers and Humans Apart" lang="en">CAPTCHA</abbr>&#8217;s</a> eller ännu bättre: be användaren om lösenordet för att kunna posta formuläret.</p>

<p><span class="closing">Hur som helst. Någon form av skydd bör man implementera varje gång man låter en användare lägga till, ta bort och redigera saker på en webbplats. Vissa saker är dock mer känsliga än andra och kanske behöver ägnas en extra tanke.</span></p>

<br /><br />

<ol id="footnotes">
<li id="fotnot-kod">Raden som genererar en slumpad sträng är lånad från <a href="http://shiflett.org/">Chris Shiflett</a> som bland annat skrivit boken <a href="http://www.amazon.com/Essential-PHP-Security-Chris-Shiflett/dp/059600656X/" lang="en">Essential <span class="caps">PHP</span> Security</a>.&nbsp;<a href="#kod" title="Hoppa tillbaka till fotnot 1 i texten">&#8617;</a></li>
</ol>]]></content:encoded>
			<wfw:commentRSS>http://www.digitalvenues.se/blogg/2007/08/sa-forhindrar-du-csrf-attacker/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Gratis övervakning av din webbplats</title>
		<link>http://www.digitalvenues.se/blogg/2007/08/gratis-overvakning-av-din-webbplats/</link>
		<comments>http://www.digitalvenues.se/blogg/2007/08/gratis-overvakning-av-din-webbplats/#comments</comments>
		<pubDate>Fri, 24 Aug 2007 08:42:31 +0000</pubDate>
		<dc:creator>Niklas</dc:creator>
		
	<category>firefox</category>
	<category>upptid</category>
		<guid isPermaLink="false">http://www.digitalvenues.se/blogg/2007/08/gratis-overvakning-av-din-webbplats/</guid>
		<description><![CDATA[Just nu kan du få ett års medlemskap på Pingdom helt gratis. Pingdom är en tjänst, skapad av Sam Nurmi (samme man som grundade Loopia) som övervakar webbplatser och informerar dig, via e-post eller SMS, så fort någon av dina övervakade webbplatser ligger nere. Vi använder själva Pingdom för att övervaka våra webbplatser och kan [...]]]></description>
			<content:encoded><![CDATA[<p>Just nu kan du få ett års <a href="http://royal.pingdom.com/?p=174">medlemskap på Pingdom helt gratis</a>. Pingdom är en tjänst, skapad av Sam Nurmi (samme man som grundade <a href="http://www.loopia.se">Loopia</a>) som övervakar webbplatser och informerar dig, via e-post eller SMS, så fort någon av dina övervakade webbplatser ligger nere. <a id="more-83" class="more"></a>Vi använder själva Pingdom för att övervaka våra webbplatser och kan varmt rekommendera tjänsten om du har en eller flera webbplatser där upptiden är av stor vikt. Normalt sätt kostar tjänsten drygt 800 kronor per år, men nu kan du alltså få första året gratis. Och det finns ingen hake heller. Eller ja, du måste använda <a href="http://www.mozilla.com/en-US/firefox/" lang="en">Firefox</a>. Använder du någon annan webbläsare så får du snällt betala&nbsp;&hellip; (Men skynda på, erbjudandet gäller bara en dag till och max 1000 personer).</p>

<p><span class="closing">När vi ändå är inne på Sam Nurmi och Pingdom måste jag också passa på att tipsa om <a href="http://mruptime.pingdom.com/"><span lang="en">Firefox</span>-tillägget <span lang="en">Mr Uptime</span></a> från samma företag. <span lang="en">Mr Uptime</span> är perfekt att ha vid tillfällen då du gång på gång försöker komma åt en webbplats som verkar ligga nere. Med <span lang="en">Mr Uptime</span> behöver du inte längre ödsla tid på sådant eftersom detta tillägg då kan lägga sig i bakgrunden och försöka nå webbplatsen åt dig. När webbplatsen är uppe och snurrar igen säger <span lang="en">Mr Uptime</span> till och du har förhoppningsvis fått massa annat nyttig gjort under tiden.</span></p>
]]></content:encoded>
			<wfw:commentRSS>http://www.digitalvenues.se/blogg/2007/08/gratis-overvakning-av-din-webbplats/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Kom igång med jQuery</title>
		<link>http://www.digitalvenues.se/blogg/2007/08/kom-igang-med-jquery/</link>
		<comments>http://www.digitalvenues.se/blogg/2007/08/kom-igang-med-jquery/#comments</comments>
		<pubDate>Wed, 22 Aug 2007 13:23:06 +0000</pubDate>
		<dc:creator>Niklas</dc:creator>
		
	<category>javascript</category>
	<category>länkar</category>
		<guid isPermaLink="false">http://www.digitalvenues.se/blogg/2007/08/kom-igang-med-jquery/</guid>
		<description><![CDATA[Inte testat jQuery än? Eller haft svårt att komma igång? Då vill jag varmt rekommendera Simon Willisons utmärkta genomgång av JavaScript-biblioteket jQuery. Sättet du skriver JavaScript på kommer aldrig bli sig likt igen.]]></description>
			<content:encoded><![CDATA[<p>Inte testat jQuery än? Eller haft svårt att komma igång? Då vill jag varmt rekommendera <a href="http://simonwillison.net/2007/Aug/15/jquery/">Simon Willisons utmärkta genomgång av JavaScript-biblioteket jQuery</a>. Sättet du skriver JavaScript på kommer aldrig bli sig likt igen.</p>]]></content:encoded>
			<wfw:commentRSS>http://www.digitalvenues.se/blogg/2007/08/kom-igang-med-jquery/feed/</wfw:commentRSS>
		</item>
	</channel>
</rss>

