它是否安全,是否受到网站 CSS 的影响?



我正在考虑使用nicedit (http://nicedit.com/)作为我的网站。

我假设nicedit只是使用按钮创建简单的html,并在用户保存时发送html。

  1. 推荐吗?有人还在做吗?
  2. 假设我以后在我的网站上显示这个HTML,是不是很危险,因为用户能够植入恶意javascript?如果不是,nicedit如何防止这种情况?
  3. 另外,当我以后显示这个HTML时,它会受到我的css的影响吗?如果是这样,我该如何预防呢?

谢谢。

这就是我所使用的,它在将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. 似乎不再被维护了。但我使用它的目的,我只需要一个简单的/轻量级的所见即所得的编辑器。如果你正在寻找的东西,得到不断的核心更新或额外的功能,我不会指望它。我终于崩溃了,写了很多我自己的功能,比如表格和YouTube视频。

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

您需要通过清理post变量来防止SQL注入。我总是把这个放在我的脚本的开头来清理它们,用$input['whateveryouarepassing']而不是$_POST['whateveryouarepassing']来调用它们。编辑$mysqli->real_escape_string()部分与您的数据库对象一起工作。使用mysql或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净化器,如果你可以设置它。如果没有,这就是这个坏男孩。用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是我这些天的首选编辑器。稍微高级一点,但一旦您了解了代码库和API,就完全值得了。您将面临与任何编辑相同的问题。除了编辑期间的CSS,因为elRTE是基于框架的,您可以指定样式表。elRTE主页

编辑:我发布这个假设你是使用PHP。

相关内容

  • 没有找到相关文章

最新更新