2017-02-11 3 views
1

Я довольно новичок в работе с SQL Server и ASP.NET, поэтому я беспокоюсь о SQL-инъекциях или других угрозах. У меня есть FormView, ссылающийся на SqlDataSource, где FormView имеет логику кода, препятствующую несанкционированным пользователям вносить изменения в базу данных. Является ли этот подход безопасен в использовании:Этот подход безопасен в использовании?

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConnectionString="<%$ ConnectionStrings:DefaultConnection %>" 
    SelectCommand="SELECT Ads.AdId, Ads.UserId, Ads.Title, Ads.Summary, Ads.Description, Ads.ImageId, Ads.Price, Ads.MapRadius, Ads.Latitude, Ads.Longitude, Users.UserName FROM Ads INNER JOIN Users ON Users.UserId = Ads.UserId WHERE ([AdID] = @AdID)" UpdateCommand="UPDATE Ads SET Title = @Title, Summary = @Summary, Description = @Description, Price = @Price, Ads.MapRadius = @MapRadius, Latitude = @Latitude, Longitude = @Longitude, DateModified = @DateModified WHERE ([AdID] = @AdID)" OnSelecting="SqlDataSource1_Selecting"> 
    <SelectParameters> 
     <asp:QueryStringParameter Name="AdID" QueryStringField="Ad" Type="String" /> 
    </SelectParameters> 
    <UpdateParameters> 
     <asp:Parameter Name="Title" /> 
     <asp:Parameter Name="Summary" /> 
     <asp:Parameter Name="Description" /> 
     <asp:Parameter Name="Price" DbType="Double" /> 
     <asp:Parameter Name="MapRadius" DbType="Double" /> 
     <asp:Parameter Name="Latitude" DbType="Double" /> 
     <asp:Parameter Name="Longitude" DbType="Double" /> 
     <asp:Parameter Name="DateModified" DbType="DateTime" /> 
    </UpdateParameters> 
</asp:SqlDataSource> 

Если URL может быть что-то вроде:

domain.com/Display?Ad=314c226b-6dfd-4fd7-997b-2ec25d18c0c2 

Более конкретно, мое беспокойство с помощью строки запроса в качестве параметра. Для более общего вопроса, если бы я не использовал <UpdateParameters> или <InsertParameters>, может ли быть риск внедрения SQL при использовании asp:SqlDataSource?

Спасибо!

ответ

3

Использование <UpdateParameters> и <InsertParameters> - это то, что помогает предотвратить SQL-инъекцию, и вы правы в их использовании.

+0

Что делать, если я только выбираю данные и не собираюсь обновлять, вставлять или удалять? ex: Использование GridView с SqlDataSource и фильтрация результатов с использованием параметра строки запроса для поиска конкретных данных. – MuffinMan

+1

'SelectParameters' - использование параметров, а не встраивание переменной непосредственно в строку SQL - это то, что сражает SQL-инъекцию. –