将HTML数据插入到db表中

时间:2011-10-07 07:02:01

标签: php html mysqli

我在将html标记数据插入db table

之前使用了以下函数
function html($data, $db)
{     
    $data = $db->escape_string($data);
    return $data;
}

但是有问题:我看到“/” - 在每个“符号”之前斜线 对于前。

<p style=\"margin-top: 15px; margin-right: 0px; margin-bottom: 10px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 10px; padding-left: 0px; \">

如何处理这个问题?

4 个答案:

答案 0 :(得分:8)

不,这取决于你的escape_string()函数的作用。 此外,您打开或关闭magic_quotes_gpc指令(默认情况下应该关闭)。

为了安全地插入数据库,您需要使用mysql_real_escape_string() NO addslashes()没有自制功能,但那一个。或者,更好的是,使用参数化查询来解除逃避引号的工作。试试PDO

编辑:

现在看到了mysqli标签,所以mysql_real_escape_string()不是一个选项,但magic_quotes指令仍然是这个的罪魁祸首。

如果您有magic_quotes,可以在PHP ini中关闭它们,通过ini_set('magic_quotes_gpc',0); .htacces php_flag magic_quotes_gpc Off或者使用这样的简单函数:< / p>

function escape($value)
{
  if(get_magic_quotes_gpc())
  {
    $value = stripslashes($value);
  }
  //return mysql_real_escape_string($value);  changed after update
  return $value;
}

在使用mysql_real_escape_string()之前一定要打开一个连接,否则它将返回FALSE。

此外,在进入数据库之前,html不需要被撤消。我的意思是,你需要逃避你的查询,你通过我提到的方法实现了这一点。 Html及其恶意对数据库没有影响。

Html需要在OUTPUT上进行转义,并且只有这样,并且您至少使用htmlentities(),但需要采取进一步措施以避免任何可能的XSS注入漏洞。这是一个复杂的主题,它需要大量的工作才能逃脱隐形控制字符,恶意标记等。您需要进一步研究这个问题,并开始阅读XSS注入威胁。

无论如何,不​​允许在浏览器上执行代码是一个开始。 不允许用户直接在您的网页上编写HTML (同样的建议不仅适用于用户提交的输入,还适用于来自外部的所有内容,例如$ _GET参数或Cookie,或者甚至是隐藏的表单值)或者你很容易遇到<script></script>危险的问题,这可能会导致cookie窃取,重定向错误,流量劫持,以及我无法在此列出的许多内容。 httmlentities()实际上提供了很好的保护,即使它的输出也不是很漂亮。

答案 1 :(得分:4)

答案 2 :(得分:0)

你正在使用“/”,因为服务器启用了magic_quotes_gpc。 你必须检查magic_quotes_gpc是否启用。

if (get_magic_quotes_gpc()) {
    $text = stripslashes($text);
}
else {
    $text = $text;
}

使用get_magic_quotes_gpc()来检查。

答案 3 :(得分:-1)