Facebook上传播javascript worm。蠕虫欺骗用户执行copying and pasting the payload into the address bar的javascript。这是而不是xss ,这是社交工程。如果你阅读了蠕虫的源代码,你就会发现它会在会话中发挥作用并伪造像Sammy蠕虫这样的请求。 Web应用程序有什么方法可以防止此类攻击?
答案 0 :(得分:4)
如果我们谈论的是操纵DOM的恶意用户脚本(就像这个似乎正在做的那样):
您可以确保所有本机JS代码都隐藏在全局范围之外(通过闭包),然后劫持document
的{{1}}属性。蠕虫有可能绕过这种方式,但肯定会让事情变得更难。
这不是我实际尝试过并证明有效的方法,但基本思路是:
window
假设是,在页面初始化期间执行的所有本机代码(包括jQuery代码等)都应该通过闭包绑定到实际的(function () {
// Initialize page
// When we're done, make document inaccessible
window.document = null;
})();
对象。地址栏中的“javascript:”代码不应该通过在全局范围内执行来访问实际文档。
同样,我可能会遗漏一些与这个想法明显存在缺陷的东西,而且我已经准备好接受所有的挫折。也许还需要采取其他措施来完全隐藏document
。
答案 1 :(得分:3)
教育是最好也是唯一的方式。
答案 2 :(得分:2)
对于像这样非常简单的社会工程蠕虫来说,它应该归结为教育。与大多数社会工程问题一样,这是一个意识问题。
我看到很多人似乎都会因为每个Facebook骗局而陷入困境,而且这个人应该比大多数人更容易避免,因为它实际上需要用户输入命令。但人们迫切希望看到一个死去的恐怖分子的照片。 WTF?
棘手的是如何说服他们,虽然他们所做的事情可能不会直接伤害他们,但确实会花费成本。这与试图说服家庭用户运行防病毒和防火墙是一样的问题 - 许多人甚至不关心他们是否被感染并且作为僵尸网络的一部分运行,只要他们可以玩他们的游戏并上网。 / p>
技术上 - 它可以由facebook完成,但不会。您可以通过简单的模式匹配和删除密钥签名来阻止此传播。它只需要花费太多精力,一旦你对特定问题进行了分类,就会有一种方法可以绕过它。
tl; dr - 教育每个人!工作繁重,无法取胜,但值得继续努力。
答案 3 :(得分:1)
一个非常简单的解决方法是强制用户使用没有地址栏的浏览器窗口。虽然这个解决方案有自己的问题。
另一个解决方案是使用javascript和/或flash可以与剪贴板进行交互。每当触发ctrl + c事件(或计时器)时,都可以执行检查。如果消息以javascript:
开头,则会将空白消息或警告复制到剪贴板。
答案 4 :(得分:0)
如果你正在谈论如何保护你的网站用户免受这种形式的攻击(即偷取cookie),我假设以下基本步骤会有所帮助,当然你可以做的更多,这个小列表并不全面:
答案 5 :(得分:0)
不幸的是,实际上没有办法阻止用户在您的网络应用程序环境中执行javascript。您可以发布一条注释,警告用户不要在地址栏中粘贴他们不理解的脚本,或者您可以尝试对您的客户端代码进行模糊处理,但这些都不能解决问题。在混淆代码的情况下,诈骗者编写可用代码只需要更多的工作。
由于代码在您的webapp上下文中执行,因此一旦请求到达服务器,您就没有万无一失的方法来区分合法用户操作与基于脚本的操作。您可以做的最好的事情就是尝试使用启发式方法来检测可疑请求并停止它们。