ASP.net表单中的内容安全策略错误

to94eoyn  于 5个月前  发布在  .NET
关注(0)|答案(1)|浏览(74)

我们正在尝试在asp.net表单中实现CSP。将所有散列添加到CSP头可以解决大部分问题。但我们面临一些内联样式问题。在aspx页面中,我们有如下所示的标签x1c 0d1x

<asp:Login ID="UserLogin" runat="server" class="loginControl" 
 FailureText="Email address or password is incorrect." OnLoggedIn="AfterLogin"
 OnLoginError="OnLoginError"
 MembershipProvider="SqlProvider">
 <LayoutTemplate>
     <div class="error">
         <asp:Literal ID="FailureText" runat="server" EnableViewState="False"></asp:Literal>
     </div>
     <div class="login">
         <asp:Label ID="UserNameLabel" runat="server" AssociatedControlID="UserName" CssClass="fontbold">Email:</asp:Label><br />
         <asp:TextBox ID="UserName" runat="server" Width="180px"></asp:TextBox>
         <asp:RequiredFieldValidator ID="UserNameRequired" runat="server" ValidationGroup="UserLogin" ToolTip="Email is required." ErrorMessage="User Name is required." ControlToValidate="UserName">*</asp:RequiredFieldValidator>
     </div>
     <div class="login">
         <asp:Label ID="PasswordLabel" runat="server" AssociatedControlID="Password" Font-Bold="True">Password:</asp:Label><br />
         <asp:TextBox ID="Password" runat="server" Width="180px" TextMode="Password" AutoCompleteType="Disabled"></asp:TextBox>
         <asp:RequiredFieldValidator ID="PasswordRequired" runat="server" ValidationGroup="UserLogin" ToolTip="Password is required." ErrorMessage="Password is required." ControlToValidate="Password">*</asp:RequiredFieldValidator>
     </div>
     <div class="login">
         <asp:Button ID="LoginButton" runat="server" ValidationGroup="UserLogin" CommandName="Login" Text="Sign In" />
     </div>
 </LayoutTemplate>

字符串
</asp:Login>
但在运行时,.net注入了一些代码中不可用的样式,这引发了CSP违规

<table id="UserLogin" cellspacing="0" cellpadding="0" class="loginControl" style="border-collapse:collapse;">
<tr>
    <td>
                            <div class="error">
                                
                            </div>
                            <div class="login">
                                <label for="UserLogin_UserName" id="UserLogin_UserNameLabel" class="fontbold">Email:</label><br />
                                <input name="UserLogin$UserName" type="text" id="UserLogin_UserName" style="width:180px;" />
                                <span id="UserLogin_UserNameRequired" title="Email is required." style="visibility:hidden;">*</span>
                            </div>
                            <div class="login">
                                <label for="UserLogin_Password" id="UserLogin_PasswordLabel" style="font-weight:bold;">Password:</label><br />
                                <input name="UserLogin$Password" type="password" id="UserLogin_Password" style="width:180px;" />
                                <span id="UserLogin_PasswordRequired" title="Password is required." style="visibility:hidden;">*</span>
                            </div>
                            <div class="login">
                                <input type="submit" name="UserLogin$LoginButton" value="Sign In" onclick="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(&quot;UserLogin$LoginButton&quot;, &quot;&quot;, true, &quot;UserLogin&quot;, &quot;&quot;, false, false))" id="UserLogin_LoginButton" />
                            </div>
                        </td>
</tr>


我们没有兴趣添加unsafe-inline。如果有其他解决方案,请建议。谢谢
我们尝试用这些样式创建单独的css,但在运行时,这些样式仍被追加

ogsagwnx

ogsagwnx1#

我认为你在实现无内联样式方面完全不走运。即使是现代框架通常也很难在没有内联样式的情况下正确工作。
我意识到OP说对unsafe-inline不感兴趣,所以我觉得强调一个允许注入JavaScript的毯子default-src 'unsafe-inline';和随之而来的潜在的整个网站妥协之间的区别非常重要,以及在少数情况下可能导致一些信息泄漏的建议样式唯一解决方案-有一个很好的帖子here解释了这一点。
default-src 'self' ; style-src 'self' 'unsafe-inline' ;或类似的内容安全策略将只允许unsafe-inline用于您的样式,同时仍然保护您免受绝大多数问题的影响。

相关问题