将HTML数据插入到db表中

her*_*ron 1 html php mysqli

我在将html标记数据插入db表之前使用了以下函数

function html($data, $db)
{     
    $data = $db->escape_string($data);
    return $data;
}
Run Code Online (Sandbox Code Playgroud)

但是有问题:我看到"/" - 在每个"符号"之前斜线为ex.

<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; \">
Run Code Online (Sandbox Code Playgroud)

如何处理这个问题?

Dam*_*rsy 8

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

为了安全地插入数据库,您需要使用mysql_real_escape_string() .没有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或者有一个像这样的简单函数:

function escape($value)
{
  if(get_magic_quotes_gpc())
  {
    $value = stripslashes($value);
  }
  //return mysql_real_escape_string($value);  changed after update
  return $value;
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

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