允许用户提供的<iframe>而不会冒XSS的风险?</iframe>

时间:2012-01-19 18:35:25

标签: php xss

我的网站允许写博客,我使用textarea作为博客帖子,我需要允许用户分享像youtube视频这样的内容(我需要允许iframe标签这样做)或使用img标签显示图片或使用通过允许标签链接,问题是我需要保护网站免受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;        
  ?>

可以这样做吗?

2 个答案:

答案 0 :(得分:1)

我非常推荐使用预先构建的rich text editor。建立自己的过程将是一个漫长的过程,并且可能非常繁琐。 TinyMCE(根据GPL许可证)是一个非常受欢迎的版本,CKEditor也是如此(虽然这个花钱)。还有更多,但我肯定会建议使用现有的,而不是建立自己的。

至于防止某些XSS攻击,您可以查看couple different locations以获取有关XSS的信息。一些好的基本事物总是消毒一切,并总是假设某些东西被劫持。在您确认它是您所期望的之前,不要相信用户的输入。

答案 1 :(得分:1)

新发布的HTMPurifier 4.4增加了一个完成此功能的功能。

http://htmlpurifier.org/phorum/read.php?5,5319,5555#msg-5555

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