1

我最近开始在我的“文章条目”页面上使用 NicEdit。但是,我对安全性和防止滥用有一些疑问。

第一个问题: 我目前在我的数据库类中使用“mysql_real_escape_string()”清理每个输入。此外,我使用“htmlspecialchars(htmlentities(strip_tags($var))) 清理 HTML 值。

您将如何在将“HTML 输入”添加到数据库时对其进行清理,或者我这样做的方式是否完美?

第二个问题: 当我提出这个问题时,有一个“类似标题”的问题,所以我读了一次。有人在谈论“滥用 HTML 输入”来弄乱他的有效模板。(例如只是输入)

它也可能发生在我当前的系统上。在PHP中应该如何处理?

附言。我想继续使用 NicEdit,所以使用 BBCode 系统应该是最后的建议。

谢谢你。

4

2 回答 2

3
  1. mysql_real_escape_string不是sanitization,它转义文本值以保持 SQL 查询的语法有效/明确/注入安全。
  2. strip_tags正在清理你的字符串。
  3. 两者都按顺序做htmlentities htmlspecialchars矫枉过正的,可能只会使您的数据乱码。由于您也在此之前剥离标签,因此这是双重矫枉过正。
  4. 规则是确保您的数据不会破坏您的 SQL 语法,因此您在将数据放入查询之前执行mysql_real_escape_string 一次。您也可以做同样的事情,保护您的 HTML 语法,通过在将文本输出到 HTML 之前 HTML 转义文本,使用( htmlspecialchars推荐) htmlentities而不是两者
  5. 如需更深入地了解这一切,请阅读The Great Escapism(或:使用文本中的文本您需要知道的内容)
  6. 我不知道 NicEdit,但我认为它允许您的用户在后台使用 HTML 设置文本样式。那你为什么要从数据中剥离 HTML 呢?那时使用 WYSIWYG 编辑器是没有意义的。
于 2011-12-11T03:42:16.923 回答
0

这是我在我的一个 NICEDIT 应用程序中使用的一个函数,它似乎与 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));
} 
于 2011-12-31T05:49:45.660 回答