【问题标题】:How to escape backslashes in querystring如何在查询字符串中转义反斜杠
【发布时间】:2012-03-26 12:13:15
【问题描述】:

我有一个 SqlDataSource,它从查询字符串中获取一个值并将其与网格视图绑定。除非查询字符串值中有反斜杠,否则一切正常。如何转义反斜杠?

例子:

www.example.com?id=testuser -> 有效。

www.example.com?id=test\user -> 即使“test\user”存在也不起作用。

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConnectionString="<%$ ConnectionStrings:ConnectionString1 %>" 

    SelectCommand="SELECT * FROM User WHERE userID = @id">
    <SelectParameters>
        <asp:QueryStringParameter Name="id" 
            QueryStringField="id" DbType="String" />
    </SelectParameters>
</asp:SqlDataSource>


<form id="form1" runat="server">
  <div>
    <asp:GridView ID="GridViewTask" runat="server" AutoGenerateColumns="False" 
        DataSourceID="SqlDataSource1">
        <Columns>                
            <asp:BoundField DataField="UnitId" HeaderText="UnitId" ReadOnly="True" 
                SortExpression="UnitId" />
            <asp:BoundField DataField="UserName" HeaderText="UserName" ReadOnly="True" 
                SortExpression="UserName" />           
        </Columns>
    </asp:GridView>
  </div>
</form>

感谢您的帮助。

【问题讨论】:

  • 我以前没用过sqldatasource,我希望它能对参数做一些花哨的事情,否则这是一个等待发生的sql注入灾难,只是提醒
  • @Daniel,说实话,我也不知道。有人可以插话吗?
  • 为了解决 SQL 注入问题,ASP.NET 不仅仅是将参数拼接到 SQL 语句中;参数在 SQL 语句之外发送。此外,如果页面检测到攻击,默认情况下会抛出错误。不过我不知道 ASP.NET 使用什么检测技术。

标签: asp.net string escaping backslash querystringparameter


【解决方案1】:

反斜杠是查询字符串中的%5C

【讨论】:

    【解决方案2】:

    试试内置实用程序:

        String Url = @"www.example.com?id=test\user";
    
        Url = HttpUtility.UrlEncode(Url);
    

    http://msdn.microsoft.com/en-us/library/system.web.httputility.urlencode.aspx

    提示:还有一个 UrlDecode 函数。

    【讨论】:

    • 这不是更多的 sql/c# 问题吗?由于@id 作为参数传入,sql 无法正确处理反斜杠。 url是否事先被编码和解码有关系吗?
    【解决方案3】:

    您确定“www.example.com?id=test\user”甚至可以成功运行该页面吗? URL 中的斜杠会导致服务器尝试在错误的位置查找错误的页面。

    如果您从另一个页面/程序创建 URL,您将使用 Server.UrlEncode;如果您手动创建它,您应该自己编码(使用 John 的 %5C 建议)。

    【讨论】:

      猜你喜欢
      • 2012-08-02
      • 2012-01-26
      • 2021-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多