我需要显示通过跨域请求加载的外部资源,并确保只显示" 安全 "内容.
可以使用Prototype的String#stripScripts删除脚本块.但处理程序如onclick或onerror仍在那里.
是否有任何图书馆至少可以
embed或object).那里有任何与JavaScript相关的链接和示例吗?
我正在保存用户提交的HTML(在数据库中).我必须防止Javascript注入攻击.我见过的最有害的是style ="expression(...)"中的脚本.
除此之外,有效用户内容的公平金额将包含特殊字符和XML结构,所以我想如果可能的话,避免白名单的做法.(列出每个允许的HTML元素和属性).
Javascript攻击字符串的示例是:
1)
"你好,<dog>元素有一个<script> alert("bad!")</ script>问题......"
2)
"嗨,这个<b style ="width:表达式(警告('坏!'))">狗</ b>是黑色的."
有没有办法防止这样的Javascript,并保持其余的完整?
到目前为止,我唯一的解决方案是使用正则表达式来删除某些模式.它解决了案例1,但不是案例2.
编辑: 对不起,忘了提及环境 - 它本质上是MS堆栈:
我希望阻塞点成为ASP.NET层 - 任何人都可以制作错误的HTTP请求.
编辑2:
感谢大家的链接.假设我可以定义我的列表(他的内容将包含许多数学和编程结构,因此白名单会非常烦人)我仍然有一个问题:
什么样的解析器允许我删除"坏"部分?坏部分可能是一个完整的元素,但那么属于这些属性的脚本呢.我无法删除<a hrefs> willy-nilly.
我正在寻找一个用JavaScript编写的简单HTML清理程序.它不需要100%XSS安全.
我正在我的网站上实现Markdown和WMD Markdown编辑器(来自github的SO主分支).问题是,实时预览中显示的HTML不会被过滤,就像在SO上一样.我正在寻找一个用JavaScript编写的简单/快速HTML清理程序,以便我可以过滤预览窗口的内容.
无需具有完整XSS保护的完整解析器.我不是将输出发送回服务器.在将结果存储到数据库之前,我将Markdown发送到我使用正确的完整HTML清理程序的服务器.
谷歌对我来说绝对没用.我只收到数百条(通常是不正确的)文章,介绍如何从各种服务器端语言的用户生成的HTML中过滤掉javascript.
UPDATE
我会更好地解释为什么我需要这个.我的网站有一个非常类似于StackOverflow上的编辑器.有一个文本区域可以输入MarkDown语法,下面有一个预览窗口,可以显示提交后它的样子.
当用户提交某些内容时,它将以MarkDown格式发送到服务器.服务器将其转换为HTML,然后在其上运行HTML清理程序以清理HTML.MarkDown允许任意HTML,所以我需要清理它.例如,用户输入如下内容:
<script>alert('Boo!');</script>
Run Code Online (Sandbox Code Playgroud)
MarkDown转换器不会触及它,因为它是HTML.HTML清理程序将删除它,以便脚本元素消失.
但这不是预览窗口中发生的情况.预览窗口仅将MarkDown转换为HTML,但不会对其进行清理.因此,预览窗口将具有脚本元素.这意味着预览窗口与服务器上的实际呈现不同.
我想解决这个问题,所以我需要一个快速而又脏的JavaScript HTML清理程序.使用基本元素/属性黑名单和白名单的简单方法就可以了.它不需要是XSS安全的,因为XSS保护是由服务器端的HTML清理程序完成的.
这只是为了确保预览窗口在99.99%的时间内与实际渲染相匹配,这对我来说已经足够了.
你能帮我吗?提前致谢!