我在将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; \">
如何处理这个问题?
答案 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)
mysql_real_escape_string
就是答案
http://php.net/manual/en/function.mysql-real-escape-string.php
答案 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)