未在AWS ASP.NET MVC网站上设置安全cookie

时间:2016-12-02 19:52:00

标签: asp.net-mvc url-rewriting iis-8 amazon-elb

我们进行了一次安全审核,发现我们的ASP.NET MVC应用程序中的cookie没有被设置为安全,尽管在web.config中有以下设置:

<httpCookies requireSSL="true" httpOnlyCookies="true" />

网站未使用表单身份验证,因此无需<forms requireSSL="true">设置。

该网站托管在AWS app服务器上,可通过ELB访问。在应用服务器内部,网站是HTTP,但外部是HTTPS。

我试图在这里找到解决方案:

http://www.jamescrowley.co.uk/2014/03/07/ssl-termination-and-secure-cookiesrequiressl-with-asp-net-forms-authentication/

向web.config添加了以下重写规则:

<rewrite>
   <rules>
        <rule name="HTTPS_AlwaysOn" patternSyntax="Wildcard">
            <match url="*" />
            <serverVariables>
                <set name="HTTPS" value="on" />
            </serverVariables>
            <action type="None" />
            <conditions>
                <add input="{HTTP_X_FORWARDED_PROTO}" pattern="https" />
            </conditions>
        </rule>
    </rules>
</rewrite>

并将HTTPS变量添加到applicationHost.config以包含:

<rewrite>
    <allowedServerVariables>
        <add name="HTTPS" />
    </allowedServerVariables>
</rewrite>

不幸的是,这会导致ELB失败。在与我们的内部AWS支持团队交谈时,他们说这是因为ELB运行状况检查失败。网站的根目录中有一个health.html页面。有没有办法将条件应用于上述内容,以便它忽略ELB使用的health.html页面?我是新手重写规则,因此不完全精通语法和工作方式。

1 个答案:

答案 0 :(得分:1)

我还不能测试,但理论上我觉得你只需要改变你的条件:

        <conditions logicalGrouping="MatchAll" >
            <add input="{HTTP_X_FORWARDED_PROTO}" pattern="https" />
            <add input="{REQUEST_URI}" negate="true" pattern="^/health.html$" ignoreCase="true" />
        </conditions>