1

サブドメインのないすべてのトラフィックをサブドメインにリダイレクトする必要がありますwww(例: foo.com-> www.foo.com)。

以下のコードは機能していますが、コードのリダイレクトは脆弱であり、セキュリティ上の欠陥をもたらす可能性があることはわかっています。

これは上記を達成するための適切な方法ですか、それともおそらく使用すべき別のディレクティブのセットがありますか?

host("^(?!www).+".r) { h =>
  unmatchedPath { p =>
    schemeName { s =>
      redirect(s"$s://www.$h$p", StatusCodes.MovedPermanently)
    }
  }
}

編集:にStatusCodes.SeeOther変更StatusCodes.MovedPermanently

4

1 に答える 1

0

私の最初のエラーは間違ったステータスコードを使用していました(StatusCodes.SeeOther代わりに StatusCodes.MovedPermanently)、2番目のエラーはURLのパス部分のみを使用していました

私の一連のテストに合格した以下のバージョン(以下を参照):

host("^(?!www).+".r) { h =>
  unmatchedPath { p =>
    requestUri { s =>
      val r = s.withHost(s"www.$h")
      redirect(r, StatusCodes.MovedPermanently)
    }
  }
}

これは以下のテストに合格します

"Redirect correctly" in {
    "request"                       | "redirect"                          |
    u("http://acme.com")            ! u("http://www.acme.com")            |
    u("http://foo.com")             ! u("http://www.foo.com")             |
    u("http://acme.com/search?a=1") ! u("http://www.acme.com/search?a=1") |
    u("http://acme.com/search#abc") ! u("http://www.acme.com/search#abc") |
    u("http://acme.com/service/")   ! u("http://www.acme.com/service/")   |
    u("https://acme.com")           ! u("https://www.acme.com")           |> { (a :java.net.URI, b :java.net.URI) => {
      Get(a.toString) ~> wholeRoute ~> check {
        status === MovedPermanently
        header("Location").get.value == b.toString
      }

    }
  }
}
于 2016-08-04T13:05:20.100 に答える