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

问题描述 投票:0回答:1

我们正在尝试以asp.net形式实现CSP。将所有哈希添加到 CSP 标头可以解决大多数问题。但我们面临一些内联样式问题。 在 aspx 页面中,我们有如下所示的标签

 <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>

但是在运行时,.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,但仍在运行时,这些样式会被附加

c# asp.net .net content-security-policy csp
1个回答
0
投票

我认为您在实现无内联样式方面完全不走运。即使是现代框架在没有它们的情况下通常也难以正常工作。

然而,一切都不会丢失,因为虽然你可以通过注入样式泄漏信息,但范围比注入的 JavaScript 很多更有限 - 有一篇很好的文章here解释了这一点。

default-src 'self' ; style-src 'self' 'unsafe-inline' ;
或类似的内容安全策略将只允许
unsafe-inline
用于您的样式,同时仍然保护您免受绝大多数问题的影响。

© www.soinside.com 2019 - 2024. All rights reserved.