Javascript XSS安全-删除所有脚本,允许其他一切

Javascript XSS安全-删除所有脚本,允许其他一切,javascript,html,xss,sanitization,Javascript,Html,Xss,Sanitization,我们正在我们的网页上显示第三方HTML,它可以正确地呈现大多数内容,包括链接和图像。我们基本上希望针对所有脚本进行清理,即 <script>...</script> 。。。 但事情可以变得相当有创意。脚本可以显示在“script”标记之外的一个简单情况是 <a href="javascript:alert('XSS')"> 如果用户在您的网站上发表评论,您可以跳过所有HTML,或者跳过所有HTML,除了、、、和。在我的例子中,我们需要允许所有HTML

我们正在我们的网页上显示第三方HTML,它可以正确地呈现大多数内容,包括链接和图像。我们基本上希望针对所有脚本进行清理,即

<script>...</script>
。。。
但事情可以变得相当有创意。脚本可以显示在“script”标记之外的一个简单情况是

<a href="javascript:alert('XSS')"> 

如果用户在您的网站上发表评论,您可以跳过所有HTML,或者跳过所有HTML,除了
。在我的例子中,我们需要允许所有HTML,但禁用所有脚本,这要困难得多,但并非罕见的要求。是否有一个库或工具支持这种级别的HTML权限和XSS安全性


语言,按优先顺序排列:Python、PHP、Java、C/C++。

您可以使用javascript(或jQuery)在提交页面之前检查href是否具有使用regex的任何
标记的http://格式。

AFAIK,该站点只列出整个XSS注入。类似的方法将不适用于碎片(多点)注射,我认为更隐秘。您所能做的最好的事情就是在将字符显示到页面之前使用类似的代码对其进行编码。但这将阻止显示HTML


您可以做其他标记,比如论坛如何做(使用
[code][/code]
语法的论坛)。也可以考虑使用StAcQuead中使用的编辑器,如果您只需要文本格式,那么它很容易使用。

您是否考虑过使用PHP框架? 有一个安全类,它包含xss_clean()函数和更多函数,看起来可以非常紧密地处理您的需求


我建议您使用最强大的XSS预防措施。一般来说,最好的方法是将希望允许的元素和属性(以及值)列入白名单,而不是将不允许的元素和属性列入黑名单

我只能在中提供一个基于PHP的解决方案,除了安全性之外,它还有助于确保标记的有效性(非常适合用户提交的HTML片段)

我看你找到了-
我还建议使用(开放式Web应用程序安全项目)作为资源。

我们正在编译第三方HTML,因此这不起作用。我们确实需要HTML的几乎所有功能,除了脚本。“语言,按优先顺序:Python、PHP、Java、C/C++。”客户端验证很好,但从来都不是最终的解决方案,而且在引导时,您没有提供任何示例。这可能行得通。我没有在问题中详细说明,但我们也希望删除非恶意脚本,因此可以将其与该技术结合使用。请改用HTLPurifier。Codeigniter的XSS清理是基于黑名单的,这使得几乎可以肯定事情能够通过。它可以阻止像alert这样的词,如果执行这些词,它本身不会带来风险。你能给我一个建议,让我知道如何在删除脚本的同时将“href”列入白名单吗?我相信你会用白名单来做这件事,但我已经好几年没用过它了。或者你是说一般来说,没有HTMLPurifier?你还考虑过其他什么工具吗?别忘了所有其他讨厌的东西,比如
,点击劫持,以及其他恼人的东西,比如
,游离的结束标记或打开的注释分隔符,它们会破坏页面。。有很多事情值得关注。希望我能了解更多的上下文,但我想如果你只想要最低限度的安全性,就使用一些弱的东西,比如字符串替换或正则表达式。如果你想要严密的安全性,你应该使用已建立的第三方脚本。上下文是将任意电子邮件加载到网页中。想要gmail显示的所有内容,而不是它不想显示的任何内容(例如脚本)。我真的不知道安全地这么做有多疯狂。甚至Gmail也被发现有XSS漏洞:,但我明白你的意思。在另一个答案中,我将使用Codeigniter XSS函数尝试HTMLpurifier或HTMLTidy(当然,请确保查看源代码)。这真是一件棘手的事情,我倾向于不允许有一点是出于安全考虑。它还取决于内容的来源;它来自哪里?这是“任意电子邮件”?我不明白。