17

Spring Boot のデフォルトであると思われる HttpOnly セッションをオフにしたいと思います。春のブートで HttpOnly をオフにするにはどうすればよいですか?

現在、次のようなコードがあります。

@RequestMapping(value = "/stuff", method = GET)
public @ResponseBody
myObject doStuff(HttpSession session)
{
        session.setAttribute("foo", "bar");
        return  new MyObject();
}

これは、HTTP 呼び出しで応答ヘッダーを返します。

Set-Cookie: JSESSIONID=D14846D9767B6404F1FB4B013AB66FB3; Path=/; HttpOnly 

HttpOnly フラグに注意してください。私はそれをオフにしたいと思います。どうすればいいですか?

補足: はい、httpOnly はセキュリティ機能であり、それをオフにすることで、javascript が私の Cookie、つまり XSS にアクセスできることを知っています。

また、デフォルト以外の構成はありません。

@ComponentScan
@EnableAutoConfiguration
public class WebApplication {

    public static void main(String[] args) {
        SpringApplication app = new SpringApplication(WebApplication.class);
        app.run(args);
    }
}
4

4 に答える 4

15

スプリング ブートに適合する受け入れられた回答の別の代替手段は、のカスタマイズ メソッドをオーバーライドすることEmbeddedServletContainerCustomizerです。

まず、インターフェースを実装します。

@Configuration
@ComponentScan
@EnableAutoConfiguration
public class Application implements EmbeddedServletContainerCustomizer

次に、customize メソッドのオーバーライドを追加します。

@Override
public void customize(final ConfigurableEmbeddedServletContainer container)
{
    ((TomcatEmbeddedServletContainerFactory) container).addContextCustomizers(new TomcatContextCustomizer()
    {
        @Override
        public void customize(Context context)
        {
            context.setUseHttpOnly(false);
        }
    });
}

ちなみに、httpOnlyがまったく設定されていないことがわかりました..そのため、このメソッドを使用してhttpOnlyをオンにする必要がありました(明らかに、上記の設定は「true」です)。

このメソッドを使用して、json の gzip をオンにしたり、最大 http ヘッダーサイズを拡張したりするなど、Tomcat の他のことを調整することもできます (kerberos 認証の場合、これを行う必要がありました)。

((TomcatEmbeddedServletContainerFactory) container).addConnectorCustomizers(new TomcatConnectorCustomizer()
{
    @Override
    public void customize(final Connector connector)
    {
        AbstractHttp11Protocol httpProtocol = (AbstractHttp11Protocol) connector.getProtocolHandler();
        httpProtocol.setMaxHttpHeaderSize(65536);
        httpProtocol.setCompression("on");
        httpProtocol.setCompressionMinSize(256);
        String mimeTypes = httpProtocol.getCompressableMimeTypes();
        String mimeTypesWithJson = mimeTypes + "," + MediaType.APPLICATION_JSON_VALUE;
        httpProtocol.setCompressableMimeTypes(mimeTypesWithJson);
    }
});
于 2014-06-12T15:10:01.183 に答える
6

少なくとも Spring Boot >= 1.4 では、次のプロパティを使用するだけでさらに簡単になります。

server.servlet.session.cookie.http-only= # "HttpOnly" flag for the session cookie. configuration property.

公式ドキュメントに記載されているとおり。

于 2016-11-18T15:09:46.327 に答える