nicedit - это безопасно и это влияет на css сайта? - PullRequest
0 голосов
/ 16 июля 2011

Я подумываю использовать nicedit (http://nicedit.com/) для моего сайта.

Я предполагаю, что nicedit просто создает простой HTML с помощью кнопок, и этот HTML отправляется, когда пользователь сохраняет его.

  1. Это рекомендуется? Кто-то еще работает над этим?
  2. Предполагается, что позже я показываю этот HTML-код на своем сайте, разве это не опасно из-за того, что пользователь может устанавливать вредоносный JavaScript? Если нет, то как nicedit предотвращает это?
  3. Кроме того, когда я отобразлю этот HTML позже, это повлияет на мой css? Если так, как я могу предотвратить это?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 26 января 2014
  1. Это больше не поддерживается. Но я использовал его для целей, где мне нужен был простой / легкий WYSIWYG редактор. Если вы ищете что-то, что получает постоянные обновления ядра или дополнительные функции, я бы на это не рассчитывал. Я наконец сломался и написал много своих собственных функций, таких как таблицы и видео на YouTube.

  2. Да, хакер может использовать его для публикации на вашем сайте эксплойта клиента и / или сервера. Но это угроза, с которой вы можете столкнуться в любом редакторе. Вам необходимо отфильтровать код для двух методов.

Вы должны предотвратить инъекцию SQL, очистив ваши пост-переменные. Я всегда помещал это в начало моих сценариев, чтобы очистить их и вызывать их с $input['whateveryouarepassing'] вместо $_POST['whateveryouarepassing']. Отредактируйте $mysqli->real_escape_string() детали для работы с вашим объектом базы данных. Используйте MySQLi или PDO с подготовленными инструкциями, чтобы усилить атаку.

$input = array();

if(isset($_POST)) {

    foreach ($_POST as $key => $value) {

        if (@get_magic_quotes_gpc()) {

            $key = stripslashes($key);

            $value = stripslashes($value);

        }

        $key = $mysqli->real_escape_string($key);

        $value = $mysqli->real_escape_string($value);

        $input[$key] = $value;

    }

}

Затем мне нравится очищать его с помощью этой функции, которую я собирал годами с помощью различных методов очистки плохого кода. Вместо этого используйте HTML Purifier, если вы можете его настроить. Если нет, то вот этот плохой мальчик. Назовите это с cleanHTML($input['whateveryouarepassing']);.

function cleanHTML($string) {

    $string = preg_replace('#(&\#*\w+)[\x00-\x20]+;#u', "$1;", $string);

    $string = preg_replace('#(&\#x*)([0-9A-F]+);*#iu', "$1$2;", $string);

    $string = html_entity_decode($string, ENT_COMPAT, "UTF-8");

    $string = preg_replace('#(<[^>]+[\x00-\x20\"\'\/])(on|xmlns)[^>]*>#iUu', "$1>", $string);

    $string = preg_replace('#([a-z]*)[\x00-\x20\/]*=[\x00-\x20\/]*([\`\'\"]*)[\x00-\x20\/]*j[\x00-\x20]*a[\x00-\x20]*v[\x00-\x20]*a[\x00-\x20]*s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:#iUu', '$1=$2nojavascript...', $string);

    $string = preg_replace('#([a-z]*)[\x00-\x20\/]*=[\x00-\x20\/]*([\`\'\"]*)[\x00-\x20\/]*v[\x00-\x20]*b[\x00-\x20]*s[\x00-\x20]*c[\x00-\x20]*r[\x00-\x20]*i[\x00-\x20]*p[\x00-\x20]*t[\x00-\x20]*:#iUu', '$1=$2novbscript...', $string);

    $string = preg_replace('#([a-z]*)[\x00-\x20\/]*=[\x00-\x20\/]*([\`\'\"]*)[\x00-\x20\/]*-moz-binding[\x00-\x20]*:#Uu', '$1=$2nomozbinding...', $string);

    $string = preg_replace('#([a-z]*)[\x00-\x20\/]*=[\x00-\x20\/]*([\`\'\"]*)[\x00-\x20\/]*data[\x00-\x20]*:#Uu', '$1=$2nodata...', $string);

    $string = preg_replace('#(<[^>]+[\x00-\x20\"\'\/])style[^>]*>#iUu', "$1>", $string);

    $string = preg_replace('#</*\w+:\w[^>]*>#i', "", $string);

    $string = preg_replace('/^<\?php(.*)(\?>)?$/s', '$1', $string);

    $string = preg_replace('#</*(applet|meta|xml|blink|link|script|embed|object|frame|iframe|frameset|ilayer|layer|bgsound|title|base)[^>]*>#i', "", $string);

    return $string;

}
  1. HTML будет зависеть от вашего CSS при редактировании и отображении. Вам понадобится код дополнительных CSS-правил, если это проблема. Если проблема заключается в редактировании, перейдите в редактор на основе iframe, чтобы css не отображал содержимое html в iframe.

  2. Если вы хотите другое предложение, elRTE является моим редактором goto в эти дни. Немного более продвинутое, но оно того стоит, когда вы познакомитесь с основами кода и API. Вы столкнетесь с теми же проблемами, что и выше, как и любой редактор. За исключением CSS во время редактирования, поскольку elRTE основан на фреймах, и вы можете указать таблицы стилей. Домашняя страница elRTE

Редактировать: я опубликовал это, предполагая, что вы используете PHP. Извините, если нет.

0 голосов
/ 31 декабря 2011

Это то, что я использую, оно работает как талисман для очистки содержимого экземпляра nicedit перед тем, как войти в базу данных

function cleanFromEditor($text) { 

    //try to decode html before we clean it then we submit to database
    $text = stripslashes(html_entity_decode($text));

    //clean out tags that we don't want in the text
    $text = strip_tags($text,'<p><div><strong><em><ul><ol><li><u><blockquote><br><sub><img><a><h1><h2><h3><span><b>');

    //conversion elements
    $conversion = array(
        '<br>'=>'<br />',
        '<b>'=>'<strong>',
        '</b>'=>'</strong>',
        '<i>'=>'<em>',
        '</i>'=>'</em>'
    );

    //clean up the old html with new
    foreach($conversion as $old=>$new){
        $text = str_replace($old, $new, $text);
    }   

    return htmlentities(mysql_real_escape_string($text));
} 
...