Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc AWS ASP.NET MVC网站上未设置安全cookie_Asp.net Mvc_Url Rewriting_Iis 8_Amazon Elb - Fatal编程技术网

Asp.net mvc AWS ASP.NET MVC网站上未设置安全cookie

Asp.net mvc AWS ASP.NET MVC网站上未设置安全cookie,asp.net-mvc,url-rewriting,iis-8,amazon-elb,Asp.net Mvc,Url Rewriting,Iis 8,Amazon Elb,我们进行了安全审查,发现ASP.NET MVC应用程序中的cookie没有设置为安全的,尽管在web.config中有以下设置: <httpCookies requireSSL="true" httpOnlyCookies="true" /> <rewrite> <rules> <rule name="HTTPS_AlwaysOn" patternSyntax="Wildcard"> <matc

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

<httpCookies requireSSL="true" httpOnlyCookies="true" />
<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>

网站未使用表单身份验证,因此无需设置

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

我已尝试实施一个解决方案,可在此处找到:

将以下重写规则添加到此web.config中:

<httpCookies requireSSL="true" httpOnlyCookies="true" />
<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页面忽略该条件?我是一个新来重写规则的人,所以不完全精通语法和它们的工作方式

我还不能测试这一点,但理论上我认为你只需要改变你的条件:

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

如果您曾经修复过此问题,请告诉我,我遇到了完全相同的问题,并且尝试了与您使用的完全相同的修复程序,但失败了。在我的例子中,“http”来自负载平衡器。