2

我想确保在错误页面上没有任何不愉快的事情进入引荐来源网址。

为了验证 http 标头,我应该检查什么。

以下是我当前的代码:

// Ensure the referrer header is good
if (this.Request.UrlReferrer.IsWellFormedOriginalString() &&
    this.Request.UrlReferrer.Host.Equals(this.Request.Url.Host))
{

这将导致使用 %3C 和 %3E 而不是 < 和 > 的 acunetix 扫描失败,因此我显然需要涵盖 html 编码 - 还有什么我遗漏的吗?

更新 我可以使用以下代码捕获所有 acunetix 扫描:

if (this.Request.UrlReferrer.IsWellFormedOriginalString() &&
    this.Request.UrlReferrer.Host.Equals(this.Request.Url.Host) &&
    !Regex.IsMatch(this.Request.UrlReferrer.ToString(),
                   "%3C",
                   RegexOptions.IgnoreCase))
{
4

2 回答 2

1

我想确保在错误页面上没有任何不愉快的事情进入引荐来源网址。

然后始终对您输出到错误页面的任何字符串(包括引荐来源网址)进行 HTML 转义。

尝试逐个选择包含潜在危险字符的输入并将其列入黑名单是在倒退。您可能无法捕获所有可能的攻击,并且您将不必要地禁止有效 URL。(有一个带有 '%3C' 的 URL 是完全合理的。)

于 2009-03-24T15:28:28.120 回答
0

this.Request.UrlReferrer 可能为空,如果没有提供或参与的推荐人。

于 2009-03-24T12:40:33.830 回答