我正在尝试为自己建立一个网站,人们可能会在将来使用它。目前,我允许用户发布iframe的youtube和谷歌Map等复制整个'iframe'从谷歌Map或youtube粘贴到邮箱只是为了保持简单。后来我把它存储在mysql数据库中。我正在某个页面上显示这篇文章。我不太担心,因为虽然我要求用户只粘贴youtube或maps iframes,但恶意代码的src可能是一个魔鬼般的想法。有什么方法可以防止这种情况发生?
svdrlsy41#
我认为有多种风险,其中一些是:跨站点脚本。有太多的方法来实现这一点,如果你允许充分的 <iframe> 要显示为输入的标记。这可能是最主要的风险,也是最重要的障碍。如果您只是将完整的iframe标记(由攻击者输入)写入后续页面,那么就很难阻止xss。如果你真的想这么做,你应该看看像谷歌caja或htmlpurifier或类似的html清理,但它是一个可以蠕虫,你最好尽量避免。信息泄露到恶意网站。这在很大程度上取决于浏览器(以及这种浏览器的确切版本),但有些信息(例如窗口大小等)确实会泄漏到iframe中的网站,即使这些信息来自不同的来源。来自恶意网站的信息/控制泄漏。更糟糕的是,嵌入的网站会对窗口有一些控制,例如它可以重定向窗口(同样,我认为这取决于浏览器,我不太确定),或者可以更改url散列片段。如果 postMessage 如果使用,iframe可以向您的应用程序发送消息,如果您的应用程序没有得到适当的保护(不一定是现在,而是将来的任何时候,比如5年后,经过大量开发),则可以利用这些消息。任意的文本注入,可能导致社会工程。假设一个对手有一个框架,上面写着“你是本月超级大奖的得主!请致电1-800-attacker,提供您的详细信息并获得奖励!“。。。你明白了。这个消息看起来像是来自你网站的合法消息,而实际上不是。所以你最好不要让人们输入从谷歌Map或其他任何地方复制的完整标签。似乎有一个有限的东西你想允许(例如youtube视频和谷歌Map链接只有两个),你应该有定制的控制。用户只需输入视频id/slug(在?v=…之后的部分),或者粘贴完整的链接,从中获取id,然后在服务器端为页面创建实际的标记。同样对于googleMap,如果用户在Map窗口中导航到他想要的任何地方并粘贴url,我想你可以创建自己的iframe,因为一切都在googleMap的url中。所以简而言之,你不应该允许人们输入标签。xss可以通过消毒剂减轻,但上面列出的其他风险不能。
<iframe>
postMessage
1条答案
按热度按时间svdrlsy41#
我认为有多种风险,其中一些是:
跨站点脚本。有太多的方法来实现这一点,如果你允许充分的
<iframe>
要显示为输入的标记。这可能是最主要的风险,也是最重要的障碍。如果您只是将完整的iframe标记(由攻击者输入)写入后续页面,那么就很难阻止xss。如果你真的想这么做,你应该看看像谷歌caja或htmlpurifier或类似的html清理,但它是一个可以蠕虫,你最好尽量避免。信息泄露到恶意网站。这在很大程度上取决于浏览器(以及这种浏览器的确切版本),但有些信息(例如窗口大小等)确实会泄漏到iframe中的网站,即使这些信息来自不同的来源。
来自恶意网站的信息/控制泄漏。更糟糕的是,嵌入的网站会对窗口有一些控制,例如它可以重定向窗口(同样,我认为这取决于浏览器,我不太确定),或者可以更改url散列片段。如果
postMessage
如果使用,iframe可以向您的应用程序发送消息,如果您的应用程序没有得到适当的保护(不一定是现在,而是将来的任何时候,比如5年后,经过大量开发),则可以利用这些消息。任意的文本注入,可能导致社会工程。假设一个对手有一个框架,上面写着“你是本月超级大奖的得主!请致电1-800-attacker,提供您的详细信息并获得奖励!“。。。你明白了。这个消息看起来像是来自你网站的合法消息,而实际上不是。
所以你最好不要让人们输入从谷歌Map或其他任何地方复制的完整标签。似乎有一个有限的东西你想允许(例如youtube视频和谷歌Map链接只有两个),你应该有定制的控制。用户只需输入视频id/slug(在?v=…之后的部分),或者粘贴完整的链接,从中获取id,然后在服务器端为页面创建实际的标记。同样对于googleMap,如果用户在Map窗口中导航到他想要的任何地方并粘贴url,我想你可以创建自己的iframe,因为一切都在googleMap的url中。
所以简而言之,你不应该允许人们输入标签。xss可以通过消毒剂减轻,但上面列出的其他风险不能。