我将设计一个网页,其中包含<div>
个允许用户使用CSS提交其(X)HTML并插入<div>
个内容的网页。
我知道它会严重影响XSS,因此我将使用HTML Purifier来清理(X)HTML和CSS。例如,我绝对不允许<script>
,<iframe>
和外部资源。但我希望允许几乎所有其他标签和CSS属性。
问题就出现了。我希望将客户端元素(可视化)保留在<div>
(s)内。我使用position: absolute;
和overflow: hidden;
尝试了部分解决方案,如下所示:
<html>
<head>
<style>
div#jail {
position: absolute;
overflow: hidden;
border: 1px dotted red;
height: 200%; width: 50%;
left: 25%; top: 25%;
}
/* All client's CSS is ensured prefixed with div#jail */
div#jail .client_code {
margin: 0;
position: absolute;
top: -8px;
z-index: 1000;
}
</style>
</head>
<body>
<div id="jail">
<p class="client_code">elements being jailed</p>
</div>
</body>
</html>
到目前为止,除了<p>
之外,我已成功将div#jail
内容position: fixed;
置于position: fixed;
内,用于大多数客户的HTML元素和CSS。
也就是说,如果用户使用CSS div#jail .client_code {
position: fixed;
top: 0px;
}
,他们的元素可以突破监狱:
position: fixed;
那么,仅阻止{{1}}是否可以,并且监狱将是强硬有效的?
如果有任何其他想法/设计来实现这一点,欢迎任何解决方案!非常感谢!