我最近添加了一个使用 mysql/php 的新闻系统,它运行良好,但是在添加 html 时出现了一些错误。
例如,如果我添加一个 youtube 视频,它将添加 / 或 \
我要对下面的代码进行哪些更改以将 html 存储到数据库中?
这是 HTML 最终的样子:
这可能只不过是一些未剥离的斜线。看来您在保存数据之前正在转义斜杠(干得好!),但是当您去显示数据时,您似乎没有删除这些斜杠。回显时尝试以下操作:
echo stripslashes( $myrow['title'] );
您很可能启用了魔术引号。如果是这样,您应该检查这一点并相应地去除斜线。
function magic_quotes_strip($value){
if(get_magic_quotes_gpc()){
if(is_array($value)){
return array_map('stripslashes',$value);
}else{
return stripslashes($value);
}
}else{
return $value;
}
}
//Strip all slashes from post array before handling
$_POST = magic_quotes_strip($_POST);
然后在输入之前做你正常的mysql转义,不用担心双重转义:
$title = mysql_escape_string($_POST['title']);
笔记:
PHP_SELF
是一个 XSS 漏洞,你应该htmlentites或删除它,所以它只是action=""
$_SESSION[usr_name]
您usr_name
应该将其用作常量$_SESSION['usr_name']
您的代码中有一个地方会无缘无故地添加过多的斜杠。
你必须找到这个地方并删除过度的削减。
这可能是一个臭名昭著的magic_quotes_gpc
ini 设置。您必须关闭它,或者,如果不能,请使用上面链接中的代码在配置文件的最顶部去除这些无用的斜线。
这可能是一些愚蠢无用的“终极清理功能”。您必须找到它并从中删除削减。
这可能在其他地方,比如在generate_wysiwyg()
函数内部或任何地方。
请记住:只做 stripslashes() 只是一个丑陋的拐杖,只在一个地方更正您的数据,而在其他地方却被宠坏了。