在asp.net页面

时间:2016-10-03 21:06:12

标签: c# asp.net .net webforms

我有一个简单的页面,应根据在查询字符串中发送它的路径显示图像。我添加查询字符串后得到404错误代码。

  

www.domain.com/ViewImage.aspx?Image=/img/image.jpg

ViewImage.aspx

<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <table width="100%" cellpadding="0" cellspacing="0">
        <tr>
            <td align="center" valign="baseline">
                <img alt="image" id="Img2" runat="server" class="fullimage" src="" />
            </td>
        </tr>
    </table>
    </form>
</body>
</html>

ViewImage.aspx.cs

    protected void Page_Load(object sender, EventArgs e)
    {
        var src = Server.UrlDecode(this.Request.QueryString["Image"]);
        this.Img2.Src = validInput(src);
    }

    protected string validInput(string input)
    {
        var regex = "[\'<>\"]";
        if (null != input && !input.Contains("\"") && input.StartsWith("/"))
        {
                return !Regex.IsMatch(input, regex) ? AntiXssEncoder.XmlAttributeEncode(input):string.Empty;
        }
        return string.Empty;
    }

预期结果

<img alt="image" id="Img2" runat="server" class="fullimage" src="/img/image.jpg" />

当前结果 error 404

这是我尝试过并检查的内容:

验证页面存在

www.domain.com/ViewImage.aspx工作正常,没有src图像设置,但是正确查找页面。

已验证图片存在

www.domain.com/img/image.jpg工作正常,img显示正确。

尝试使用错误的路径

www.domain.com/ViewImage.aspx?Image=/asdasdas/asdas.jpg 我没有得到404错误,Image src设置正确

仅使用文件夹尝试,网址中没有图片

www.domain.com/ViewImage.aspx?Image=/img,这不会出现404错误,但如果添加最后一个斜线,我也会得到404错误。

  

www.domain.com/ViewImage.aspx?Image=/img /

这最后一个网址出现了404错误。

备注

  • 我们在服务器(https)中使用SSL,不确定这是否重要。
  • 我认为可能/应该在IIS配置中修复错误,不确定是什么或如何。

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

要记住的一件事是,不支持查询字符串值中的/,但也许某些浏览器可能会在URL中输入时为您编写代码。路径应该是URI编码的(%2F而不是/)。您的服务器配置可能会导致/在某种导致404的路径解析中使用;如果您的查询字符串没有格式错误,则可能没有这个问题。

您还可以稍微简化代码。 Request.QueryString会自动解码参数,因此您无需手动执行此操作:

protected void Page_Load(object sender, EventArgs e)
{
    // The query string is automatically decoded
    var src = this.Request.QueryString["Image"]; 
    this.Img2.Src = validInput(src);
}

protected string validInput(string input)
{
    var regex = "[\'<>\"]";
    if (null != input && !input.Contains("\"") && input.StartsWith("/"))
    {
        return !Regex.IsMatch(input, regex) ? AntiXssEncoder.XmlAttributeEncode(input):string.Empty;
    }
    return string.Empty;
}