Самый безопасный способ запуска запроса с клиента на сервер SQL с использованием сети Asp - PullRequest
0 голосов
/ 11 декабря 2018

Я новичок в asp net, мне нужно спросить, какой самый безопасный способ запустить запрос от моего клиента в asp net, а затем на sql server.

Первый вариант, который я использую до сих пор, ясоздать свой запрос от клиента, пример

"insert into customers (name) values('john')"

А внутри сети asp я просто беру свою строку из клиента и просто выполняю ее.

Inside Post method:
//Here i am getting query from client:
SqlConnection connection = new SqlConnection(connectionString);
SqlCommand cmd = new SqlCommand(queryFromClient,connection);
cmd.ExecuteNonQuery();

Я ищу, чтобы сделать свои запросы более безопасными,если у меня будет какая-либо инъекция или хакерство на моем сервере, кто-то может легко отправить любой запрос, который он хочет, удалить базу данных или что-нибудь еще ... Так что я ищу способ предотвратить это.

Ответы [ 4 ]

0 голосов
/ 11 декабря 2018

Вы можете использовать хранимую процедуру с параметрами

Create Procedure USP_INSERTINTOCUSTOMER
@NAME varchar(max)
AS
Begin
   INSERT INTO CUSTOMER (NAME) Values (@Name)
END

Вы можете вызвать это в своих программах на C #

SqlCommand cmd = new SqlCommand("USP_INSERTINTOCUSTOMER",connection);
command.Parameters.AddWithValue("@Name", "YOUR_VALUE");
cmd.CommandType = CommandType.StoredProcedure;
cmd.ExecuteNonQuery();
0 голосов
/ 11 декабря 2018

Безопасного пути нет вообще.Если вы берете произвольный запрос от клиента, он может отправлять буквально все, что дает им полный контроль над базой данных.Всегда угрожайте каждому параметру запроса как ненадежным, потенциально опасным данным и никогда не отправляйте их напрямую в БД.

Безопасный вариант - заставить сервер строить все запросы самостоятельно, возможно, руководствуясь некоторыми параметрами, предоставленными клиентом, ноокончательный текст всегда должен быть составлен на стороне сервера.Куски запроса могут быть условно добавлены параметрами запроса, а необработанные данные могут быть параметризованы, но все проверено сервером.

Это, конечно, означает, что вы не сможете выполнять произвольные запросы.

0 голосов
/ 11 декабря 2018

Если вы получаете полный запрос от своего клиента, это небезопасно по своей природе, поскольку клиент может перехватить запрос и изменить запрос, отправляемый в ваш веб-API, на что угодно!

Чтобы предотвратить это, вы должны выписать статически типизированный запрос, готовый к приему параметров от вашего клиента, например, если у вас есть метод в вашем веб-API для вставки нового человека в вашу базу данных, этот код будетдостаточно, и вы передадите имя человека в веб-интерфейс.

string q = "insert into persons (name) values(@name)"
SqlCommand cmd = new SqlCommand(q, connection);
cmd.Parameters.Add("@name", SqlDbType.VarChar).Value = "james";

Этот метод выше параметризует ваш SQL-запрос, предотвращая SQL-инъекции.

Чтобы избежать необходимости предпринимать такие усилия,Microsoft выпустила фреймворк под названием Entity Framework , который обрабатывает все это для вас и делает вашу жизнь намного проще, когда речь идет о быстром создании безопасного веб-API.

0 голосов
/ 11 декабря 2018

Используйте SqlCommand.Parameters.Add() для добавления varian \ bles:

string query = "insert into customers (name) values(@name)"
SqlCommand cmd = new SqlCommand(query, con);
cms.Parameters.Add("@value", SqlDbType.VarChar).Value = "john";

Конечно, для фиксированного запроса без каких-либо переменных не имеет значения, что вы пишете так, как нет, или добавляете параметры, однако еслиВы хотите добавить значения переменных (например, из текстового поля), что вы обязательно сделаете, cms.Parameters.Add() это путь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...