Databasdesign för uppmärkning med taggar

Social bokmärkning ha slagit igenom stort och de flesta av dessa tjänster använder sig av något slags användargenererat klassificeringssystem.

Om du sitter där hemma och funderar på att lansera nästa del.icio.us- eller digg-klon kan det vara bra att veta hur man designar databas-schemat på bästa sätt. Philipp Keller visar lite varianter i artikeln "Tags: Database schemas" och får enorm respons i kommentarer.

Läs även "Explaining and Showing Broad and Narrow Folksonomies" av Thomas Vander Wal (mannen som myntade begreppet "folksonomi"). Intressant läsning om "smal" och "bred" typ av användar-taggning.

By Jesper Lind

Källkod för blogg-system från Castleproject.org

För ett tag sen läste jag att Castle Project går in i version beta 2, blev nyfiken och kollade hemsidan som finns på Castleproject.org. Som ofta när det gäller öppen källkod finns det mycket roligt att läsa om och välarbetade exempel.

På sidan presenteras project som t ex MonoRail (AJAX-ramverk inspirerat av Actionpack Ruby on rails) och ActiveRecord (Implementering av Wiki: Active record pattern).

Just Caste ActiveRecord tyckte jag var väldigt intressant och i handledningen visas ett riktigt bra exempel på hur en blogg-applikation kan konstrueras. Rekommendas till dig som vill lära dig mer om active records eller se hur en bra databasdesign för ett blogg-system kan se ut. Man visar sen klasserna och även hur man lägger till relationerna.

By Jesper Lind

Vackra URL:er med ASP.NET (en bit kvar)

För ett tag sen skrev jag inlägget om hur man kan skriva om webbadresser med Asp.Net (eller snarare om alla de svårigheter som är involverade). Många utvecklare har tacklats med problemet och jag tänker inte gå något djupare på de tekniska detaljerna nu. Ska dock spara lite nya länkar här som jag hittat.

Först en artikel som inte har med just ASP.NET att göra men visar exempel på hur bra och beskrivande webbadresser bör se ut.

Sen en adress till en Wiki helt dedikerad åt välskrivna url:er, där man kan läsa "ASP.NET - Well Designed Urls Wiki", och innehåller många relaterade länkar.

Vad jag kommit fram till är att det nog är smartast att vänta tills IIS 7 finns att installera till Window 2003 (om detta någonsin blir möjligt, uppgradera till Longhorn Server blir nog det som gäller). IIS 7 kommer nämligen innefatta ett mycket bättre stöd för detta som man kan läsa på Scott Guthrie's blogg:

Several people have asked why the built-in URL Mapper in ASP.NET 2.0 doesn't support regular expressions. There were actually a few reasons for this -- one of the big ones being that just about the time we were about to consider adding it my team started also working on IIS7. We realized that a full-featured version would want/need to take advantage of some of the new features in IIS7 as well as the support all content types (in particular -- images and directories). So we postponed making it feature rich until a future version.

Själv är jag glad att jag inte har börjat försöka skriva om url:er på IIS 6 ännu, speciellt när man läser inlägg som "Making URL rewriting on IIS 7 work like IIS 6". Frågan är bara om man kan vänta, att ha snygga webbadresser känns ganska lockande, speciellt ur sökoptimerings-synpunkt. Men tänkt bara på att när IIS 7 släpps som riktig server-version så kan du tvingas att göra om det hela igen.

Om du vill ha några begynnande tankar från en som börjat testa url-omskrivning med IIS 7 på Vista, kan du läsa Dennis' blog.

By Jesper Lind

Allvarligt säkerhetsproblem med PDF-filer

Idag skriver IDG.se artikeln "Pdf-filer är hackarnas nya farliga vapen - så skyddar du dig" och förklarar det nya säkerhetsproblemet som uppdagats. Adobe uppmanar användare att snabbast möjligt ladda hem den nya versionen Adobe Reader 8 (engelska), där problemet är löst. Den svenska versionen verkar precis vara släppt, när jag kollade för en liten stund sen hittade jag den inte. Att man lanserar den med sådan hast, är i så fall ett tecken på, hur allvarligt Adobe anser problemet vara.

Huvudproblemet kan visas genom exempel nedan. På följande sätt kan man köra vilken javascript-kod som man vill på klienten. Och detta medan användaren befinner sig på den domän där PDF-filen befinner sig. En öppen vektor för cross-site-scripting-attacker, nätfiske, stöld av sessionsvariabler och cookies eller för att sprida XSS-maskar med andra ord.

http://www.entersomedomain.com/thepdfyoufound.pdf#blah=javascript:alert("This is an XSS-attack example");

Detta fungerade så länge jag hade version 7.0.8 installerad, efter jag lagt in version 8 så fungerade inte attacken längre.

De som först hittade den nya attack-vektorn var Stefano Di Paola och Giorgio Fedon. Vidare har GnuCitizen.org också gjort en bra beskrivning med inlägget "DANGER, DANGER, DANGER". Hac.kers.org är webbplatsen jag såg informationen på först, och skribenten RSnake uttryckte sig så här, om upptäckten.

IDG skriver i artikeln att säkerhetshålet bara har upptäckts i Adobes insticksmodul, men andra uppgifter tyder på att set inte slutar där. Hac.kers.org har forskat vidare på sårbarheten och menar nu att det inte bara är genom en webbläsare som en attack kan ske. Det hela diskuteras vidare på Sla.ckers.org forumet och några begynnande exempel visar upp hur även PDF:er kan utnyttjas, som ligger på användarnas datorer. Farliga länkar kan sedan spridas via skräppost eller chatt-program.

Detta verkar vara ett av de farligaste säkerhetshålen som hittats på länge, och eftersom många användare kommer ha kvar version 7 eller äldre ett bra tag, så kan vi förvänta oss att det kommer skapa problem långt framöver. Är du en webbmaster som har många PDF-filer på dina sajter, och dessutom använder AJAX av någon form, bör du genast sätta dig in i vilka riskerna är. Läs även "What you need to know about the UXSS in the Acrobat Plugin" av Jeremiah Grossman.

By Jesper Lind

XSS-mask härjade på Gaiaonline.com

Tekniken AJAX (Asynkron JavaScript och XML) används i allt större utsträckning på webbplatser. Baksidan är att detta öppnar upp för en ny typ av attacker kallade XSS (Cross-site scripting).

Idag släpptes en XSS-mask loss på community-sidan Gaiaonline.com och på bara 3-4 timmar infekterades 1500 användare. Läs mer om detta på ha.ckers.org där även källkoden för masken finns att studera.

Att förstå hur dessa XSS-attacker fungerar är väldigt viktigt för alla som jobbar med att utveckla applikationer med AJAX-funktionalitet.

By Jesper Lind

Välj ur select-lista med två knapptryckningar

Långa select-listor kan vara jobbiga för användarna, speciellt om många av valen börjar på samma bokstav. För att snabbhoppa till rätt val kan man ju skriva in ett första tecken. Då får man endast upp det första valet i listan på det tecken man matat in. Sen känns det naturligt att kunna ange ett tecken till, och fortsätta selekteringen. Men det går ju inte... Då hoppar man till en annan sektion av listan som börjar på den nya bokstaven.

Hittade dock en artikel som säger sig ha en lösning: Selecting an option in dropdownlist using more than one Character

By Jesper Lind

Få fram antal rader i en GridView

En kort beskrivning hur man kan få fram antal raden som visas i en GridView, som är kopplat till en SqlDataSource, genom OnSelected event. Och då snackar vi som vanligt .NET. Koden för GridView och SqlDataSource:

<asp:Label id="lblProductTitle"><asp:GridView ID="gvProduct" EnableViewState="true"
DataSourceID="sdsProduct"
DataKeyNames="Id"
AllowPaging="true"
AllowSorting="true"
AutoGenerateColumns="false"
runat="server">

<Columns>
<asp:TemplateField HeaderText="Bild">
<ItemTemplate>
<asp:PlaceHolder ID="phThumb" runat="server" />
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField HeaderText="Artnr" DataField="Id" ItemStyle-Wrap="false" SortExpression="Id" />
<asp:BoundField HeaderText="Produktnamn" DataField="ProductName" ItemStyle-Wrap="false" SortExpression="ProductName" />
<asp:BoundField HeaderText="Märke" DataField="Brand" ItemStyle-Wrap="false" SortExpression="Brand" />
<asp:BoundField HeaderText="Kategori" DataField="Category" ItemStyle-Wrap="false" SortExpression="Category" />
<asp:BoundField HeaderText="Pris" DataField="Price" ItemStyle-Wrap="false" SortExpression="Price" DataFormatString="{0:c0} kr" />
</Columns>
</asp:GridView>

<asp:SqlDataSource
ID="sdsProduct"
runat="server"
EnableViewState="true"
SelectCommand="SELECT * FROM Product"
OnSelected="sdsProduct_Selected"
ConnectionString="<%$ appSettings:ConnectionString %>"
DataSourceMode="DataSet">
</asp:SqlDataSource>

 

Och koden bakom som skriver ut antalet rader i gridden:

protected void sdsProduct_Selected(object sender, SqlDataSourceStatusEventArgs e)
{
int intTotalRecord = Convert.ToInt32(e.AffectedRows.ToString());
if (intTotalRecord > 0)
{
lblProductTitle.Text = intTotalRecord.ToString() + " produkter hittades";
}
else
{
lblProductTitle.Text = "Inga produkter hittades";
}
Trace.Write("intTotalRecord = " + intTotalRecord);

}

By Jesper Lind

Spammare tjuvar på mitt innehåll

http://www.codeodyssey.se/upload/resource/blog/CodeOdyssey-spampirates.png

Jag söker ibland efter innehåll från min egen webbplats på Google för att se om någon använder material från min webbplats. Nyligen tycker jag mig ha sett en ganska kraftig ökning av sidor som snor innehåll och publicerar det på spam-sajter. Just nu finns det bland annat några sökresultat med Poker-relaterade rubriker i Googles cache-sidor som har snyltat på mitt innehåll. Själva sidorna finns dock inte längre kvar. En sida med titeln "Feed FeedBurner On Google" finns dock i skrivandes stund fortfarande uppe på nätet och använder sig av lite innehåll från min webbplats. När jag först hittade länken blev jag nästan lite glad eftersom, sidans titel antyder på att den använder RSS-flöden, vilket dock visade sig vara felaktigt. Den har helt enkelt återanvänt SERPs från Google eller på annat sätt skannat min webbplats. Jag väntar nämligen på att någon ska använda mitt RSS-flöde i spammningssyfte, så att jag får ett skäl att gå till motattack. Den metod som jag då tänker prova är att förgifta RSS-flödet ungefär som ha.ckers.org gjorde.
By Jesper Lind