我有一个简单的页面,应根据在查询字符串中发送它的路径显示图像。我添加查询字符串后得到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 /
备注:
有什么建议吗?
答案 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;
}