2009-03-17 16 views
7

Jako względny nowicjusz zarówno w Internecie, jak i MVC, szukam dobrego podsumowania najlepszych praktyk bezpieczeństwa, które powinienem wdrożyć.Zabezpieczanie witryny ASP.Net MVC

Witryna będzie dostępna publicznie z "umiarkowanie wrażliwymi danymi" (co oznacza, że ​​nie możemy zostać pozwani, ale prawdopodobnie nie pozyskalibyśmy wielu znajomych, gdyby dane wyszły z użycia!) I zostaną podjęte następujące kroki bezpieczeństwa: a: Uwierzytelnianie i autoryzacja formularzy/autoryzacji b: Sparametryzowane zapytania zapobiegające iniekcji sql. c: Automatyczny limit czasu z x min nieaktywności c: SSL dla szyfrowania klienta na serwerze

Co jeszcze polecacie?

* Zabezpieczanie usług IIS i sieci nie należy do mojej domeny, więc bardziej interesują mnie rzeczy, które muszę zrobić z oprogramowaniem

+0

Doskonałe pytanie, zwłaszcza jeśli pochodzi z prostego ASP.NET. – Soviut

+0

Dzięki. Wierzcie lub nie, ale większość mojej aktywności w sieci pojawiła się około 10 lat temu z klasycznym aspem. Mam dużo do nadrobienia! – Aaron

Odpowiedz

4
  • Jeśli używasz cookies do rozpoznawania użytkowników, należy użyć dowolny znak (np GUID), aby zapisać na kliencie w celu identyfikacji. Widziałem zbyt wiele stron internetowych, które przechowują mój adres e-mail lub nazwę użytkownika w moim pliku cookie ... po prostu trzeba to zmienić na inny!

  • Napisz swoje oprogramowanie, aby działało pod numerem medium trust.

+0

Pierwszy komentarz jest tak oczywisty i łatwy, że jest genialny! Nigdy nie pomyślałbym o tym od 100 lat :) Medium zdecydowanie dotyczy i zrobię. Dzięki! – Aaron

+0

Zachęcamy do przyjęcia odpowiedzi, jeśli uzna to za pomocne. Może nawet zaakceptuj to, jeśli okaże się najlepsze. –

3

Jeśli jesteś nowy na tworzenie stron internetowych powinni być świadomi cross site scripting (XSS). Można użyć metody pomocnika Http.Encode w celu ochrony przed nią w ASP.NET MVC.

1
  1. Może należy wybrać metody, które można przywoływać z zewnątrz, czy nie. Na przykład należy zachować ostrożność, aby usunąć dowolne tabele, takie jak http://yourhost.com/edit/deletealltable. Upewnij się, że projektujesz klasę i metody. I podaj atrybuty [NonAction], aby uniemożliwić wywołanie metody publicznej.

  2. Upewnij się, że wyświetlasz dane (szczególnie poufne) według potrzeb przy minimalnym fantazyjnym wyglądzie i stosuj skrypt klienta tak długo, jak to konieczne.

  3. Usuń nieużywane pliki kosza, takie jak nieużywane pliki w folderze rozwiązania.

  4. Sprawdź i sprawdź i sprawdź poprawność dowolnych elementów sterujących, takich jak pole tekstowe. Po prostu mogę podać coś w polu tekstowym, aby zhackować twój system.
  5. Jeśli używasz miksu pomiędzy MVC i zwykłym ASP.NET, usuń wszelkie zależności między nimi.
+0

Czy możesz wyjaśnić usuwanie zależności między mvc a zwykłym formularzem internetowym? Nie jestem pewien, co masz na myśli. Dzięki! – Aaron

+0

na przykład zwykły aspx wyświetli fantazyjne elementy sterujące, a następnie pobierze dane z mvc http: // twójhost/customer/getall i wyrenderuje wynik za pomocą javascript. Jest ok, ale masz więcej kodu konserwacyjnego w obu – nickotech2000

0

Upewnij się, że dokładnie omawiasz podstawy, niezależnie od ASP.NET. Upewnij się, że Twój DBMS ma oddzielnego użytkownika z minimalnymi wymaganymi uprawnieniami (np. CRUD i wykonywanie sproc z określonych baz danych) skonfigurowanymi w celu uzyskania dostępu do bazy danych z aplikacji internetowej.Parametryzowanie zapytań jest świetnym pomysłem, ale ZAWSZE PRZESZUKAJ SWOJEGO INPUTU: nie jest to kompletna obrona przed wtryskiem sql.

Zachowaj swój projekt czyste i łatwe do zrozumienia. Dokumentuj cokolwiek robisz wyraźnie, szczególnie po stronie bazy danych. Byłoby źle, gdyby cała twoja dobra praca została zniszczona przez dwóch programistów miesięcy lub lat później - takiego, który nie zdawał sobie sprawy, powiedzmy, że użytkownik bazy danych dla aplikacji internetowej (teraz uzyskuje dostęp do bazy danych na innym serwerze) nie powinien mieć uprawnień roota, a inny, który dodał kontrolkę, która nie wyczyściła poprawnie danych wejściowych. Jest tylko tyle rzeczy, które można zrobić w tej sprawie, ale zaprojektowanie możliwości, że głupcy utrzymają twój kod, nie jest takie, żeby koderowie pomyśleli, że jesteś słodki - to jest tak, że głupcy cię nie wyprowadzą biznesu.

2

Upewnij się, że nie chcesz wykonywać zamówień poza kolejnością. Upewnij się, że klient jest uwierzytelniony przed zezwoleniem na dostrzeżenie wrażliwych danych, lub w niektórych przypadkach upewnij się, że klient przeszedł przez właściwy kanał, zanim zezwolisz na manipulację danymi. Możesz na przykład zezwolić na dodanie przedmiotu do koszyka, jeśli prośba pochodzi ze strony szczegółów produktu. Jeśli nie sprawdzisz, każdy może poradzić sobie z akcją. Adres URL będzie podobny do http://server/cart/add/XYZ123 i każdy może po prostu dostosować parametr "id".

+0

Jestem trochę zakłopotany pytaniem, wiem, że to łatwe ... ale jak mogę uzyskać nazwę strony z prośbą (aby zapewnić, że pochodzi z właściwego kanału)? Czy jest to część obiektu żądania? Dzięki! – Aaron

+0

Możesz użyć zmiennej cookie/sesji, aby zidentyfikować podmiot, z którym pracujesz. Następnie zezwól na działanie tylko na tę jednostkę. Ty "poprzedni" oznaczałoby to, co oznacza, że ​​już tam byłeś. –