如何在与绑定重复器控件一起使用时对查询字符串进行消毒

本文关键字:查询 字符串 一起 绑定 控件 | 更新日期: 2023-09-27 18:05:04

给定以下URL:

domain.com/page.aspx?id=123

如何在数据绑定控件(如中继器SqlDataSource)上使用该查询字符串值?

<asp:SqlDataSource ID="projectDataSource" runat="server" 
    ConnectionString="MyConnectionStrings" 
    SelectCommand="select foo from bar">
    <SelectParameters>
        <asp:QueryStringParameter 
            DefaultValue="0" 
            Name="idfromqs" 
            QueryStringField="id" 
            Type="Int32" />
    </SelectParameters>
</asp:SqlDataSource>

使?id=asdf不产生错误?

这些类似的问题都有很好的答案,但似乎没有一个与我的问题非常吻合

  • 在ASP中验证查询字符串. NET(检查发生在文件后面的代码中)
  • 如何在Asp中拦截和预处理querystring。Net(对于一个简单的检查似乎过于激烈)

注意:这是一个内部应用程序,它被限制为本地ip地址的一小块。

如何在与绑定重复器控件一起使用时对查询字符串进行消毒

我不太担心恶意sql注入,更担心的是防止不太精明的用户看到令人讨厌的错误消息。

您可以使用SQLDataSourceSelecting事件,在那里您可以检查查询值。此事件在调用选择方法之前触发。

protected void SqlDataSource1_Selecting(object sender, SqlDataSourceSelectingEventArgs e)
{
    SqlDataSource1.SelectParameters.Clear(); //Clear existing parameters
    // based on your check, you can pass the default value
    SqlDataSource1.SelectParameters["idfromqs"].DefaultValue = "Set Value here";
}

把字体去掉。querystring已经是字符串,除非将其显式转换为其他类型(如int32)。如果有理由将其转换为int32类型,可以稍后在代码中这样做,这样更容易对其应用逻辑。

<asp:QueryStringParameter 
   DefaultValue="0" 
   Name="idfromqs" 
   QueryStringField="id" />