我最近开始在我的“文章条目”页面上使用NicEdit。但是,我对安全性和防止滥用有一些疑问。
第一个问题: 我目前在数据库类中使用“mysql_real_escape_string()”清理每个输入。另外,我使用“htmlspecialchars(htmlentities(strip_tags($ var)))来清理HTML值。
在将“HTML输入”添加到数据库时,如何清理“HTML输入”,或者我的工作方式是否完美?
第二个问题: 当我提出这个问题时,有一个“类似标题”的问题,所以我曾经提到过一次。有人在谈论“滥用HTML输入”以捣乱他的有效模板。 (例如只是输入)
也可能在我当前的系统上发生。如何在PHP中处理它?</ p>
聚苯乙烯。我想继续使用NicEdit,所以使用BBCode系统应该是最后的建议。
谢谢。
答案 0 :(得分:3)
mysql_real_escape_string
不是清理,它转义文本值,以保持SQL查询的语法有效/明确/注入安全。strip_tags
清理您的字符串。htmlentities
和 htmlspecialchars
是过度的,可能只是乱用您的数据。既然你之前也在剥离标签,那就是双重矫枉过正了。mysql_real_escape_string
一次。您也可以使用 htmlspecialchars
(推荐)或 {{1来保护您的HTML语法,通过HTML转义文本,然后将其输出到HTML中}, 不是 。答案 1 :(得分: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));
}