september 2006


Blake Handler presenterar en riktigt bra lista med gratis program och annat som Microsoft, genom bland annat MS Research, har släppt fritt och i vissa fall även genom deras ‘Shared Source’ initiativ.

När du skapar en metod i VB.Net blir parametrar ByVal om du inte anger någonting annat. Detta innebär att du vill få en lokal kopia av ditt objekt in till din metod. Det man ofta inte tänker på är att man inte får en kopia av eventuella underliggande objekt. Om inte dina objekt har en impelentation som automatisk hanterar det som kallas ’Deep cloning’.

Det som händer vid ett metodanrop med en ByVal-parameter är att en ’Shallow cloning’ görs. Detta innebär att ditt objekt kopieras, men eventuella underliggande objekt som det objektet pekar på kopieras inte, och alltså pekar på samma objekt. Vi kan exemplifiera detta med en Collection av typen Arraylist där varje element i listan innehåller ett objekt av typen MinKlass.

Klassen MinKlass består av två properties, ID och Namn. I Arraylist minLista har vi lagt två element, ett med namnet ”Stig” och ett med namnet ”Helmer”. ID skapas av klassen själv vid initiering.

Sedan skickas minLista in till en metod (sub)

private sub Check(ByVal ArrayList lista)

I metoden Check görs följande:

 

For Each min As MinKlass In lista
     min.Namn = ”Arne”
Next

Vad som man vill skall hända här är att den lokala listan lista’s objekt av typen MinKlass skall ändras. Det som händer är att när du anropar metoden ‘Check’ görs en ‘shallow clone’ på objektet minLista till lista, vilket innebär att endast själva objektet minLista kopieras till lista. De underliggade objekten MinKlass1 och MinKlass2 kopieras inte, utan lista pekar fortfarande på MinKlass1 och MinKlass2:

 

Har man jobbat med exempelvis C++ tidigare och man vet att de flesta objekt i .Net är referenstyper kan detta te sig självklart. Där är man van vid att hantera pekare och ‘adresserade’ objekt.

Orsaken till detta är att det som lagras i minLista endast är en pekare till objekten MinKlass1 och MinKlass2.

Även om man i funktionen Check gör en (tror man) lokal kopia på varje objekt (MinKlass1 och MinKlass2), är det också då själva adressen som pekar på objekten man gör en kopia på. För att man skall kunna göra en ‘Deep Clone’ måste man implementera stöd för det i sin klass, eller kopiera objekten property för property.

Så för att man skall kunna använda lokala kopier på MinKlass-objekten måste man alltså själv se till att det finns lokala kopier på objekten. Har du serialiserbara objekt kan du använda serialisering för att skapa en kopia och då ha en generell funktion som kan hantera kopiering av olika typer av objekt. Annars kan man applicera interfacet ICloneable på sin klass eller skapa copy-constructors.

Olika sätt att göra på finns exempelvis beskrivet på http://www.windojitsu.com/blog/copyctorvsicloneable.html.

Man kan även se att Brad Adams diskuterar om man skall använda ICloneable överhuvudtaget.

Eftersom jag får så otroooligt många träff på bloggen nu…….nej, det gör jag inte, men i alla fall så har jag nu lagt upp så man kan få uppdateringar från min blogg via Windows Live Alerts. Du klickar helt enkelt på knappen Windows Live Alerts och följer instruktionerna. Bra va? 🙂

Bink och flera refererar till ghacks.net som skriver om att man kan ladda ner mgadiag.exe och sedan ladda ner alla uppdateringar och andra downloads från Microsoft utan att behöva kontrollera att du har en ”Genuine” Windows. Jag har sett flera andra som tidigare har skrivit om det här också.

Nu har inte jag testat detta, men jag tycker då det ser ut som den kod du får när du kör mgadiag.exe är samma som den kod som troligen skickas till Microsoft när du kör ”Windows Genuine Advantage Check”. Varför skall man bland annat annars behöva ladda ner den och köra den på sin egen dator? Ja, jag har då i alla fall inte så stor tro på att det fungerar. Och det kan väl styrkas med att vissa får det att fungera, och andra inte. Och någon får det att fungera med en kod som en annan person har skapat på sin dator. Troligen har de personer som skapar koden på en dator med en ”riktig” Windows fått det att fungera, och det fungerar då även att ladda ner till andra datorer.

Så för att detta skall vara ett riktigt ‘Hack’, så kan ju någon med en giltig Windows tillhandahålla en webbsida som dagligen publicerar koden….eller hur ofta den nu ändras…..jag vet inte riktigt hur det där beräknas.

Jag har testat på SQL Server 2005

Lista databaser:

  • sp_databases

Lista tabeller:

  • sp_tables
  • select * from <tabellnamn>..sysobjects where xtype=’u’ and status >=0

Kolumner:

  • sp_columns ‘<tabellnamn>’

Det finns helt säkert flera sätt (titta exempelvis i procedurerna), men det här räcker i första omgång.

Vad har egentligen Sentor haft för roll gentemot socialdemokraterna (s)? Har dom precis kommit in som en spelare efter att (s) på egenhand har upptäckt att dom har haft intrång? Det låter ju lite konstigt, men man skall ju alldrig säga alldrig.

Samtidigt står det i vissa medier att ‘(s) har anlitat sin säkerhetspartner för att spåra inloggade personer i Stig-Olof Fribergs konto i Sapnet’……. Hur har dom efter så lång tid själva plötsigt sett att det försiggår någonting fuffens? Lite konstigt är det ju.

På den andra sidan, om dom har vetat om det här sedan länge, varför ha dom inte bytt lösenord på kontot? Är dom verkligen så uträknande att dom vile vänta till rätt tid med att gå ut med detta? Har dom vetat att det har varit ett annat parti som har varit inne på nätet?

Om vi lämnar socialdemokraterna och politik, så har jag en annan och för mig mycket mera intressant fråga: om Kentor är (s) ‘säkerhetspartner’, varför har dom tillåtit en lösenordspolicy som tillåter en användare att ha samma lösenord som användarnamn?? Och under så lång tid?

Om jag själv tänker mig in i situationen att någon skulle använda mitt konto, mailkonto eller annat tillsvarade skulle jag nog inte omedelbart märka någonting. Lättast märker man det nog om mail man inte har läst plötsligt är markerade som lästa. Och det är väl den troligaste orsaken till att i alla fall jag skulle upptäcka någonting. Annars kan det vara att en inloggningshistorik syns för mig som användare. Men hur vanligt är det? Annars måste man ta hjälp av någon expert för att titta på loggar. Och att se ett ändrat beteende i en användares profil gör väl inte en expert heller sånn utan vidare. Då måste man väl mistänka något redan? Eller? I alla fall, i takt med att flera och flera har fått inloggningsuppgifterna, vilket verkar vara tillfället, har ju troligen slarvet med att täppa till spåren efter sig ökat. Och även kan det ju vara så att man upptäcker att beteendet för en specifik användare ändras såpass mycket att det MÅSTE vara nåt fel.

Så visst, jag tror att man kan upptäcka det här efter en ganska lång tid. Men utifrån ett IT-perspektiv tycker jag det är allvarligare att Sentor förespråkar införande av system för intrångsdetektering (IDS) i stället för att införa en bättre lösenordspolicy. Inte för att det är fel på att införa IDS, men det kanske inte är det primära fokus om man har så stora problem med den primära hanterande av nät (trådlösa) och användare.

Nu skriver inte jag det här för att jag är för eller mot vare sig socialdemokraterna eller folkpartiet, utan mera för att det är ett spännande fall. Som så många andra har uttalat har det ju alldrig förut inträffat i svensk politik, utan mera liknar en amerikansk film. Men det är ju så att smutskastning, även om det alltid har varit ett vapen för politiker, blir mer och vanligt. Och IT är ett medel som underlättar för det.

Men om det här inträffar hos ett politisk parti, inträffar det då också hos andra? Och i vilken utsträckning? Det borde ju finnas företag med bra mycket mera intressant information än ett politisk parti……..

I dag ramlade jag över ett bra exempel på hur man kan exponera lagrade procedurer i SQL Server 2005 som webbtjänster. Det är David Hayden som har skrivit inlägget på sin blog, där han även har en hel drös med andra intressanta tips.

Att ta emot data i Visual Studio gick också väldigt smärtfritt, och vill du använda något annat för att ta emot datat har faktisk Microsoft dokumenterat rätt väl de SOAP-meddelanden som skall skickas in och som returneras. Här finns även information om hur man exempelvis gör för att skicka dynamisk SQL till databasen genom att använda en webbtjänst.