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