Θα πρέπει να προσέξεις πολύ το θέμα του dynamic SQL, ειδικά αν ο κώδικας που γράφεις αφορά πραγματικά τράπεζα ή οποιαδήποτε μεγάλη εταιρεία. Ένας κακόβουλος web admin θα μπορούσε να πάει στο web.config σου και να αντικαταστήσει π.χ. το "AccountsTable" με "AccountsTable; delete from AccountsTable" και έτσι να σβήσει όλες τις εγγραφές την πρώτη φορά που θα εκτελεστεί το select σου. Αυτό είναι καααακό, ειδικά για τράπεζα!
Και επειδή μπορεί να πει κανείς ότι "αν ο admin το κάνει αυτό, έχεις χάσει έτσι κι αλλιώς", να παρατηρήσω ότι συνήθως στις τράπεζες άλλοι είναι υπεύθυνοι για τους web servers, άλλοι για τις βάσεις και άλλοι για τις εφαρμογές. Οι web admins δεν έχουν πρόσβαση στις βάσεις και οι application administrators δεν έχουν πρόσβαση στους web servers και τους database servers. Οι εφαρμογές τέλος επικοινωνούν με τις βάσεις μέσω συγκεκριμένων account με περιορισμένα δικαιώματα. Χρησιμοποιώντας όμως string concatenation και παραμέτρους χωρίς έλεγχο από το web.config, έδωσες ουσιαστικά πρόσβαση στα δεδομένα της εφαρμογής στους web admins.
Άλλο πιθανό πρόβλημα ασφάλειας δημιουργείται αν χρησιμοποιείς το Windows User name, καθώς δεν προσδιορίζει απόλυτα ένα account. Ένας κακόβουλος user admin μπορεί να διαγράψει ένα χρήστη, να τον ξαναδημιουργήσει με το ίδιο όνομα και έτσι να αποκτήσει πρόσβαση σε μία εφαρμογή στην οποία κανονικά δεν είχε δικαίωμα. Αντί για το username μπορείς να χρησιμοποιήσεις το WindowsIdentity.User property, το οποίο είναι το μοναδικό Security Identifier ενός Windows User. Ακόμα και αν δημιουργήσει κάποιος ένα χρήστη με το ίδιο όνομα, το SID θα είναι διαφορετικό.
Παναγιώτης Καναβός, Freelancer
Twitter: http://www.twitter.com/pkanavos