Разрешить пользовательские <iframe>с, не рискуя XSS? - PullRequest
0 голосов
/ 19 января 2012

Мой веб-сайт разрешает вести блоги, я использую 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 ]

1 голос
/ 19 января 2012

Недавно выпущенный HTMPurifier 4.4 добавляет функцию, позволяющую сделать именно это.

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

Короче говоря, вы должны разрешить iframes, которые приходят из доверенных доменов. К фреймам из ненадежных доменов может относиться вредоносный javascript / flash / embeds

1 голос
/ 19 января 2012

Я бы очень рекомендовал использовать готовый форматированный текстовый редактор .Создание собственного будет долгим процессом и может быть очень громоздким. TinyMCE (по лицензии GPL) очень популярен, как и CKEditor (хотя это стоит денег).Есть еще много других, но я бы определенно рекомендовал использовать существующий вместо создания собственного.

Что касается предотвращения некоторых атак XSS, вы можете посмотреть на пару различные местоположения для получения информации относительно XSS.Некоторые хорошие базовые вещи всегда дезинфицируют все и всегда предполагают, что что-то было похищено.Не доверяйте вводу пользователя, пока не убедитесь, что это то, что вы ожидаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...