Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Zapobieganie wstrzykiwaniu SQL w ASP.Net

Spróbuj użyć sparametryzowanego zapytania, tutaj jest łącze http://www.aspnet101.com/2007/03/parameterized-queries-in-asp-net/

Nie używaj też OpenQuery... użyj this do uruchomienia wyboru

SELECT * FROM db...table WHERE ref = @ref AND bookno = @bookno

Więcej artykułów opisujących niektóre opcje:

http://support.microsoft.com/kb/314520

Jaka jest składnia T-SQL do łączenia się z innym serwerem SQL?

Edytowane

Uwaga:Twoje pierwotne pytanie dotyczyło zapytań rozproszonych i serwerów połączonych. Ta nowa instrukcja nie odwołuje się do zapytania rozproszonego. Mogę tylko założyć, że teraz łączysz się bezpośrednio z bazą danych. Oto przykład, który powinien działać. Oto kolejna witryna referencyjna dotycząca używania SqlCommand.Parameters

SqlCommand cmd = new SqlCommand("Select * from Table where [email protected]", con); 
cmd.Parameters.Add("@ref", SqlDbType.Int);
cmd.Parameters["@ref"] = 34;

Edytowane:

Ok Jamie Taylor, spróbuję jeszcze raz odpowiedzieć na twoje pytanie.

Używasz OpenQuery, ponieważ prawdopodobnie używasz połączonej bazy danych

Zasadniczo problem polega na tym, że metoda OpenQuery pobiera ciąg, do którego nie można przekazać zmiennej, jako część ciągu wysłanego do OpenQuery.

Zamiast tego możesz sformatować zapytanie w ten sposób. Notacja następuje po nazwa_serwera.nazwa_bazy_danych.nazwaschematu.nazwa_tabeli. Jeśli używasz połączonego serwera przez ODBC, pomiń nazwę bazy danych i nazwę schematu, jak pokazano poniżej

    Dim conn As SqlConnection = New SqlConnection("your SQL Connection String")
    Dim cmd As SqlCommand = conn.CreateCommand()
    cmd.CommandText = "Select * db...table where investor = @investor"
    Dim parameter As SqlParameter = cmd.CreateParameter()
    parameter.DbType = SqlDbType.Int
    parameter.ParameterName = "@investor"
    parameter.Direction = ParameterDirection.Input
    parameter.Value = 34


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL MAX wielu kolumn?

  2. Zachowaj relacje rodzic-dziecko podczas kopiowania danych hierarchicznych

  3. Dzielenie ciągu w serwerze sql

  4. TSQL Try / Catch w ramach transakcji lub odwrotnie?

  5. Nazwy plików SQL Server a wersje