我们正在尝试在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("UserLogin$LoginButton", "", true, "UserLogin", "", false, false))" id="UserLogin_LoginButton" />
</div>
</td>
</tr>
型
我们没有兴趣添加unsafe-inline。如果有其他解决方案,请建议。谢谢
我们尝试用这些样式创建单独的css,但在运行时,这些样式仍被追加
1条答案
按热度按时间ogsagwnx1#
我认为你在实现无内联样式方面完全不走运。即使是现代框架通常也很难在没有内联样式的情况下正确工作。
我意识到OP说对
unsafe-inline
不感兴趣,所以我觉得强调一个允许注入JavaScript的毯子default-src 'unsafe-inline';
和随之而来的潜在的整个网站妥协之间的区别非常重要,以及在少数情况下可能导致一些信息泄漏的建议样式唯一解决方案-有一个很好的帖子here解释了这一点。default-src 'self' ; style-src 'self' 'unsafe-inline' ;
或类似的内容安全策略将只允许unsafe-inline
用于您的样式,同时仍然保护您免受绝大多数问题的影响。