我们进行了一次安全审核,发现我们的ASP.NET MVC应用程序中的cookie没有被设置为安全,尽管在web.config中有以下设置:
<httpCookies requireSSL="true" httpOnlyCookies="true" />
网站未使用表单身份验证,因此无需<forms requireSSL="true">
设置。
该网站托管在AWS app服务器上,可通过ELB访问。在应用服务器内部,网站是HTTP,但外部是HTTPS。
我试图在这里找到解决方案:
向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页面?我是新手重写规则,因此不完全精通语法和工作方式。
答案 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>