nicedit - 它是否安全,是否受到网站css的影响?

时间:2011-07-16 19:11:07

标签: nicedit

我正在考虑将nicedit(http://nicedit.com/)用于我的网站。

我认为nicedit只是使用按钮创建简单的html,当用户保存时会发送html。

  1. 是否推荐?有人还在努力吗?
  2. 假设我稍后在我的网站上显示这个HTML,由于用户能够植入恶意javascript,这不是很危险吗?如果没有,nicedit如何防止这种情况?
  3. 此外,当我稍后显示此HTML时,它会受到我的CSS的影响吗?如果是这样,我该如何防止这种情况?
  4. 感谢。

2 个答案:

答案 0 :(得分:0)

这就是我使用的工具,就像在清理数据库之前清理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));
} 

答案 1 :(得分:0)

  1. 似乎不再维护。但我已经将它用于我只需要一个简单/轻量级WYSIWYG编辑器的目的。如果您正在寻找能够获得持续核心更新或其他功能的东西,我将不会指望它。我终于崩溃并写了很多我自己的功能,如桌子和YouTube视频。

  2. 是的,黑客可以使用它在您的网站上发布客户端和/或服务器漏洞。但这是任何编辑都可能面临的威胁。您需要过滤两种方法的代码。

  3. 您需要通过清理帖子变量来阻止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在iframe中显示html内容。

    2. 如果你想要另一个建议,那么elRTE最近是我的goto编辑。一旦你了解代码库和API,它会更先进,但完全值得。您将面临与上述任何编辑器相同的问题。除了编辑期间的CSS,因为elRTE是基于帧的,你可以指定样式表。 elRTE Homepage

    3. 编辑:我假设您使用的是PHP。如果没有道歉。