参数化查询 C# SQL 注入保护
本文关键字:注入 保护 SQL 查询 参数 | 更新日期: 2023-09-27 18:36:33
我正在用文本框过滤网格视图。
有人可以看一眼代码并让我知道我是否受到SQL注入攻击的保护吗?
<asp:TextBox ID="TextBox_ItemNbr" runat="server" Font-Size="X-Small"></asp:TextBox>
<asp:Button ID="Button_ItemNbr" runat="server" Text="ItemNbr Search" Font-Size="X-Small" OnClick="Button_ItemNbr_Click" />
<br /><br /><hr />
<asp:GridView ID="GridView_ItemNbr" runat="server" AllowPaging="True" AllowSorting="True" AutoGenerateColumns="False" DataSourceID="SqlDataSource_ItemNbrGridView" Font-Size="X-Small" PageSize="125">
<Columns>
<asp:BoundField DataField="Vendor Nbr" HeaderText="Vendor Nbr" SortExpression="Vendor Nbr" />
<asp:BoundField DataField="Vendor Name" HeaderText="Vendor Name" SortExpression="Vendor Name" />
<asp:BoundField DataField="Vendor Nbr Dept" HeaderText="Vendor Nbr Dept" SortExpression="Vendor Nbr Dept" />
<asp:BoundField DataField="Item Status" HeaderText="Item Status" SortExpression="Item Status" />
<asp:BoundField DataField="Item Nbr" HeaderText="Item Nbr" SortExpression="Item Nbr" ReadOnly="True" />
<asp:BoundField DataField="Item Desc 1" HeaderText="Item Desc 1" SortExpression="Item Desc 1" />
<asp:BoundField DataField="Unit Cost" HeaderText="Unit Cost" SortExpression="Unit Cost" />
<asp:BoundField DataField="Unit Retail" HeaderText="Unit Retail" SortExpression="Unit Retail" />
<asp:BoundField DataField="Vendor Stk Nbr" HeaderText="Vendor Stk Nbr" SortExpression="Vendor Stk Nbr" />
<asp:BoundField DataField="VNPK Qty" HeaderText="VNPK Qty" SortExpression="VNPK Qty" />
<asp:BoundField DataField="VNPK Cost" HeaderText="VNPK Cost" SortExpression="VNPK Cost" />
<asp:BoundField DataField="WHPK Qty" HeaderText="WHPK Qty" SortExpression="WHPK Qty" />
<asp:BoundField DataField="WHPK Cost" HeaderText="WHPK Cost" SortExpression="WHPK Cost" />
<asp:BoundField DataField="Group1" HeaderText="Group1" ReadOnly="True" SortExpression="Group1" />
<asp:BoundField DataField="Group2" HeaderText="Group2" ReadOnly="True" SortExpression="Group2" />
<asp:BoundField DataField="Group3" HeaderText="Group3" ReadOnly="True" SortExpression="Group3" />
</Columns>
</asp:GridView>
<asp:SqlDataSource ID="SqlDataSource_ItemNbrGridView" runat="server" ConnectionString="<%$ ConnectionStrings:constring_RL_Name %>" SelectCommand="spRL_Prd_ItemMaster" SelectCommandType="StoredProcedure">
<SelectParameters>
<asp:ControlParameter ControlID="TextBox_ItemNbr" DefaultValue="%" Name="ItemNbrSearch" PropertyName="Text" Type="String" />
</SelectParameters>
</asp:SqlDataSource>
根据Microsoft安全准则,通过使用 sql 参数,您可以免受 sql 注入的影响。
请检查以下链接:https://msdn.microsoft.com/en-us/library/ff648339.aspx
这完全取决于存储过程的作用。您的spRL_Prd_ItemMaster过程可能会构造动态 SQL - 仅使用参数是避免"经典"SQL 注入攻击的一种方式,但如果将参数传递给存储过程,则如果过程本身使用参数值构造 SQL,则仍然可以构建 SQL 注入攻击。
如果不看到spRL_Prd_ItemMaster的文本,就不可能断然说你对SQL注入无懈可击。