参数化查询 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>

参数化查询 C# SQL 注入保护

根据Microsoft安全准则,通过使用 sql 参数,您可以免受 sql 注入的影响。

请检查以下链接:https://msdn.microsoft.com/en-us/library/ff648339.aspx

这完全取决于存储过程的作用。您的spRL_Prd_ItemMaster过程可能会构造动态 SQL - 仅使用参数是避免"经典"SQL 注入攻击的一种方式,但如果将参数传递给存储过程,则如果过程本身使用参数值构造 SQL,则仍然可以构建 SQL 注入攻击。

如果不看到spRL_Prd_ItemMaster的文本,就不可能断然说你对SQL注入无懈可击。