2017-02-11 103 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>,那麼使用asp:SqlDataSource時甚至會有SQL注入的風險?

謝謝!

回答

3

使用<UpdateParameters><InsertParameters>是什麼幫助防止SQL注入,並且您在使用它們時是正確的。

+0

如果我只是選擇數據而無意更新,插入或刪除,該怎麼辦?例如:使用帶有SqlDataSource的GridView並使用查詢字符串參數篩選結果以查找特定數據。 – MuffinMan

+1

'SelectParameters' - 使用參數而不是將變量直接嵌入到SQL字符串中是與SQL注入作鬥爭的東西。 –

相關問題