Angående den nya bot:en som härjar på nätet (http://www.f-secure.com/weblog/archives/00001427.html) och som har påverkat hundratusentals siter runt om i världen så dyker det ju upp en del panikåtgärder.
Många har kört den vanliga ersätt " med ' i sql-datat för att hindra sql-injection och trott att det räcker.
Det finns ju flera metoder att mota det här med, validera indata, casta till rätt datatyp osv. Men om man låter sql-användaren som är kopplad till siten komma åt systemtabeller så är man fel ute redan från början.
Vill man snabbt säkra upp utan att behöva gå in och rätta eventuellt sina gamla siter med osäker kod så kan man superlätt sätta ner rättigheterna för sql-användaren som man använder för siten (detta kan man ju med fördel ändå göra oavsett om man har en säker kod):
- Neka sql kontot att köra select på sysobjects
- Neka sql kontot att köra select på syscomments
- Neka sql kontot att köra select på syscolumns
- Neka sql kontot att köra select på systypes
Så kommer inga elaka script att kunna köras mot systabellerna, vilket försvårar för alla framtida hackförsök.
Stäng gärna ner mer men ha detta som ett minimum.
Sen skadar det ju inte att se över sin gamla kod i alla fall. Använd med fördel Stored Procedures med SQL commands & commandoparameterobjekt, då hanteras indatat som sträng oavsett innehåll. Eller kör med .Net och datasets & tableadapters.
Så här gör du för att fixa till rättigheterna:
- Se först till att du kan se systemtabellerna genom att i SQL Server Enterprise Manager högerklicka på serverikonen och högerklicka, välj Edit SQL Server Registration properties...
- I dialogrutan som kommer upp, se till att Show system databases and system objects är ikryssat.
- Välj databasen du vill säkra upp, visa tabellerna, där ser du nu även systemtabellerna.
- Högerklicka på t.ex. tabell sysobjects och välj egenskaper (eller properties om det står på engelska), du får då upp denna dialogruta:
- Klicka på knappen Permissions... och du får upp en till dialogruta:
Om du nu har satt att din website ska få komma åt databasen via kontot WebSiteSQLaccount (eller vad du nu döpt kontot till som du använder i din connectionsträng) så ser du det kontot i listrutan som kommer upp.
- Klicka två gånger på kryssrytan för select-kolumnen i samma rad som kontot din website använder och sedan Verkställ (Apply):
- Upprepa nu samma sak för systemtabellerna syscolumns, syscomments och systypes.
- Klart.