Entity framework
Transkrypt
Entity framework
Entity framework Przemysław Nowak CDV 2015 Czym jest? • Entity Framework ADO.NET jest narzędziem typu ORM (Object Relational Mapping), pozwalającym odwzorować relacyjną bazę danych za pomocą architektury obiektowej. Krok po kroku • tworzymy nowy projekt asp.net mvc (dla lepszej orientacji w używanych kontrolkach, obiektach itp. nie zmieniam domyślnych nazw elementów.) Model Database first • Dodajemy bazę danych typu sql w katalogu App_Data Dodajemy tabele w bazie i budujemy jej strukturę Zatwierdzamy przyciskiem update ADO.NET Entity Data Model Dodajemy do modelu klasę opisująca strukturę danych Dodajemy kontroler Zadanie • Zad1 • Rozbuduj powyższy przykład w ten sposób by do tabeli zapisywane były kolejne dane: • Adres • Data urodzenia • Numer telefonu • Zad 2 • Stwórz kolejne dwie tabele w bazie które będą katalogiem dowolnych towarów z 5 właściwościami np. książki (autor tytuł rok wydania ISBN cena). Zbuduj dla nich kontrolery oraz widoki je obsługujące. CRUD Create INSERT Read (Retrieve) SELECT Update UPDATE Delete (Destroy) DELETE Zadanie • Proszę stworzyć automatycznie Kontrolery CRUD dla wszystkich baz w projekcie Bezpieczeństwo aplikacji • SQL Injection • Cross-Site Request Forgery • Cross-Site Scripting. • Over-Posting - Parameter Binding SQL Injection • wstrzyknięcie dodatkowej części do zapytania SQL. • Ataki typu SQL injection polegają na dołączeniu dodatkowych parametrów do zapytania wykonywanego na bazie danych. Występuje zazwyczaj w przypadku przekazywania parametrów w adresie url. Najpopularniejszym sposobem jest dodanie do wyrażenia where id=1 dodatkowej części or 1=1, powoduje to, że wyrażenie jest zawsze prawdziwe i zamiast otrzymania tylko jednego wyniku dla konkretnego id, otrzymujemy wszystkie dane. Nowoczesne ORMy jak Entity Framework są zabezpieczone przed tego typu atakami. Dane przekazywane w parametrach muszą być konkretnego typu, co blokuje możliwość zastosowania SQL Injection. Nie oznacza to jednak pełnego bezpieczeństwa, niebezpieczeństwo nadal występuje przy zwykłych zapytaniach SQL oraz procedurach składowanych, które należy zabezpieczać w inny sposób. Atak Cross-Site Request Forgery w ASP.NET MVC Zabezpieczenie przy pomocy atrybutu: AntiForgeryToken. Cross-Site Request Forgery to atak mający na celu wykorzystanie uprawnień użytkownika do wykonania określonych operacji. Użytkownik loguje się do portalu, posiada uprawnienia do dodawania, usuwania lub edycji określonych danych. Osoba atakująca chce wykorzystać fakt, że użytkownik jest zalogowany i przesyła odnośnik, który po otwarciu wysyła określone żądanie do serwera. Ponieważ użytkownik jest zalogowany operacja wygląda prawidłowo i nie ma przeszkód, aby ją wykonać. Przygotowanie prowizorycznej strony jest bardzo proste, wystarczy skopiować kod autentycznej strony i ustawić wartości w formularzu. Po otwarciu fałszywego odnośnika w przeglądarce, dane przy pomocy skryptu JS, zostają automatycznie wysłane bez klikania jakiegokolwiek przycisku. Aby zapobiec tego typu atakom stosuje się jednorazowe tokeny zabezpieczające, które są przesyłane razem z formularzem. Przeglądarka nie pozwala (istnieje możliwość wykorzystania luki w przeglądarce, aby uzyskać dane z innej witryny jednak obecne przeglądarki są zabezpieczone przed tego typu atakami) na odczyt danych z innych zakładek. Aby żądanie było zaakceptowane przez serwer musi zawierać ten sam wcześniej wysłany token. • AntiForgeryToken • Aby zabezpieczyć metodę w ASP.NET MVC przed atakiem CSRF należy dodać przed metodą w kontrolerze atrybut [ValidateAntiForgeryToken]. Oczywiście tylko przy metodzie POST, metoda GET nie powinna i raczej nie jest używana do operacji na danych. Ograniczenia • wymaga włączonych plików cookies w przeglądarce, • tylko dla żądań POST, • łatwe do złamania gdy są inne luki w aplikacji (XSS). Atak Cross-Site Scripting (XSS) w ASP.NET MVC • • Dołączenie szkodliwego kodu do treści wpisywanych przez użytkownika. Cross-Site-Scripting polega na osadzeniu w treści strony niepożądanego kodu (najczęściej JS). Aby uchronić aplikacje od tego typu ataków należy śledzić treści wprowadzane przez użytkowników. W polach tekstowych wśród tekstu mogą znaleźć się również kody JS, które po zapisie do bazy danych i odczycie przez innego użytkownika zostają uruchomione. Aby kod został uruchomiony musi być traktowany, jako kod HTML. ASP.NET MVC ma domyślnie zaimplementowaną ochronę przed XSS, nie ma możliwości podawania kodu HTML jako tekst. Aby umożliwić użytkownikom dodanie kodu HTML należy użyć atrybutu [AllowHTML] jednak jest to bardzo ryzykowne. Aby zapobiec atakom należy zainstalować rozszerzenie AntiXSS poprzez platformę NuGet. AntiXSS nawet, jeśli kod zostanie przekazany do bazy danych to analizuje kod wynikowy przesyłany do klienta. Jeśli dany tekst zawiera złośliwy kod to automatycznie usuwa szkodliwą cześć. Ponieważ złośliwy kod nie jest wysłany do klienta, to nie ma możliwości, aby się wykonał. Atak Over-Posting - Parameter Binding w ASP.NET MVC • • Przekazywanie dodatkowych, niepożądanych parametrów W przypadku, gdy przekazujemy obiekt, jako argument w żądaniu POST przekazywane są tylko potrzebne przez nas dane, jednak istnieje możliwość podania większej ilości parametrów których nie chcemy. Z pomocą przychodzi parameter binding, który pozwala na określenie, jakiego parametru nie chcemy używać nawet, gdy będzie przekazany z formularza. Określamy, który parametr ma być ignorowany. Przykładowo przekazujemy obiekt typu kurs, który zawiera pola: skąd, dokąd, kiedy, oraz czy_zaakceptowany. Pole o akceptacji może zmieniać tylko admin, dlatego należy je zignorować w metodzie wykorzystywanej przez użytkownika. Jako parametr wykorzystywany jest model kurs, czyli wszystkie pola łącznie z polem czy_zaakceptowany. Aby zignorować dane pole należy użyć atrybutu Bind - Exclude.