我在将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)
如何处理这个问题?
不,这取决于你的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不漂亮.
归档时间: |
|
查看次数: |
1477 次 |
最近记录: |