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.