允许用户提供<;iframe>;s而没有XSS风险


Allowing user-supplied <iframe>s without risking XSS?

我的网站允许写博客,我使用博客文章的文本区域,我需要允许用户共享youtube视频(我需要允许iframe标签这样做)或使用img标签或通过允许a标签使用链接显示图像。问题是我需要保护网站免受XXS攻击,这就是为什么我害怕允许这些标签,有什么工作可以做到这一点吗?

我能用这样的东西吗:

<?php
   $string = "<b>hello world!</b>";
   echo "without filtering:".$string;
   echo "<br>";
   $filtered = htmlspecialchars($string); // insert into database filtered
   echo "After filtering:".$filtered;
   echo "<br>";
   $de_filtering = htmlspecialchars_decode($filtered); //retrieve from database and display
   echo "After de-filtering:".$de_filtering;        
  ?>

有可能做到吗?

新发布的HTMPurifier 4.4添加了一个功能来实现这一点。

http://htmlpurifier.org/phorum/read.php?5,53195555#消息-5555

简而言之,您应该允许来自受信任域的iframe。来自不受信任域的Iframe可能包括恶意javascript/flash/embeds

我非常建议使用预构建的富文本编辑器。建立自己的系统将是一个漫长的过程,而且可能非常繁琐。TinyMCE(在GPL许可证下)是一个非常受欢迎的应用程序,CKEditor也是(尽管这个需要花钱)。还有很多,但我绝对建议使用现有的,而不是自己建造。

至于防止一些XSS攻击,您可以在几个不同的位置查看有关XSS的信息。一些好的基本事情总是净化一切,并总是假设有什么东西被劫持了。在验证用户的输入是否符合您的期望之前,不要相信用户的输入。