2012-01-31 12 views
9

To mój pierwszy raz, kiedy pracuję nad MVC i chcę go zabezpieczyć.Sterowanie wstrzyknięciem SQL w MVC

Kiedy używam HtmlEncode, konwertuje String na równoważny ciąg HTML.

Użytkownik może wprowadzić do wyszukiwania na przykład ali 'lub ali-- i one istnieją w mojej bazie danych. Jak kontrolować moje wyszukiwanie i logowanie z SQL injection?

Czy istnieje również samouczek lub najlepsza praktyka zapobiegająca wstrzykiwaniu skryptu?

+0

w jaki sposób uzyskujesz dostęp do swojej bazy danych? LINQ? Entity Framework? –

+0

Używam normalnego, który wolisz LINQ lub Entity framework – AMH

+1

Sprawdź to [link SO] (http://stackoverflow.com/questions/8676/entity-framework-vs-linq-to-sql) ... Oba sprawdzą dla ciebie wtrysk sql .... –

Odpowiedz

15

LINQ i Entity Framework już sprawdzają dla SQL Injection dla ciebie.

Ale należy zapoznać się z dokumentacją Byle:

LINQ MSDN Link (sekcja SQL-Injection Attacks)

Entity Framework MSDN Link (sekcja względy bezpieczeństwa dla zapytań)

nadzieję, że to pomaga!

+0

co z wtryskiem skryptu? – AMH

+0

@AMH Uważam, że powinno to być inne pytanie, ale ten link może być pomocny: [asp tutorials] (http://www.asp.net/mvc/tutoriale/starsze wersje/zabezpieczenia/zapobieganie-javascript-injection-attacks-cs) –

+0

co wolisz proszę LINQ lub EF – AMH

4

Jeśli używasz LINQ do wykonywania zapytań do bazy danych, eliminuje to ryzyko wstrzyknięcia SQL.

+0

dziękuję, czy obsługuje bazy danych ROM, a co z wtryskiem skryptu? – AMH

7

Dopóki używasz sparametryzowanych zapytań lub ORM jak NHibernate lub Entity Framework, nie musisz robić nic, aby zapobiec iniekcjom SQL. Parametry są przekazywane do serwera poza faktyczną instrukcją SQL, w ramach wywołania RPC na serwerze. Większość ORM używa sparametryzowanych zapytań ze względu na przyczyny wydajności, więc nie są podatne na iniekcję SQL.

Injection SQL jest możliwy tylko wtedy, gdy utworzysz instrukcję SQL, łącząc wartości ciągów.

Powiedziawszy, nadal musisz być ostrożnym przed wprowadzaniem danych przez użytkownika, aby zapobiec atakom wtrysku skryptów. Na szczęście ASP.NET MVC zapewnia mechanizm sprawdzania żądań (patrz Understanding Request Validation).

+0

, ale mam dość, aby upuścić bazę danych, którą znam, przekazując wartości według parametrów – AMH

+0

Bez względu na to, co przekażesz do parametru (i przez parametr I meand obiekt pochodny DbParameter, taki jak SqlParameter (http://msdn.microsoft.com/en-us/library/system.data.common.dbparameter.aspx), zostanie przekazany do serwera jako prosty ciąg znaków, nigdy nie zostanie wykonany. Nadal można wpaść w kłopoty, jeśli użyje się przechowywanej wartości do skonstruowania instrukcji SQL przez konkatenację ciągów w innej części aplikacji. –

Powiązane problemy