我已经到处搜索了解如何防止html注入。我也在这个网站上提出两个问题。但我没有得到令人信服的答案。现在,我给我的脚本,我为防止mysql,html注入用我的HTML格式。
//sql injection prevention
$name =mysql_real_escape_string($_POST['name']);
$login = mysql_real_escape_string($_POST['login']);
$user = mysql_real_escape_string($_POST['user']);
//striping tags
$user =strip_tags($user);
$login = strip_tags($login);
$name =strip_tags($name);
在此之后,我尝试使用以下脚本检查我的脚本的工作情况,并将其放入我的html中的名称,登录,用户表单并将其保存在我的数据库中
<script>
document.location = "http://badurl";
</script>
但是当我将上述脚本保存在数据库中并尝试检索它以便在页面中显示时,它转到了badurl site.i认为strip_tags不起作用我想知道原因。你能否告诉我如何将htmlspecialchars放入while循环中(如下面的脚本)
while ( $row = mysql_fetch_array($query) ) {
echo('<big><big><big style="color: rgb(158, 0, 0);">' . $row['name'] . ' </big></big></big><p>');
echo('<big><div style="text-align: justify;">' . $row['login'] . ' </big> </div>');
echo('<div style="text-align: justify;">' . $row['user'] . ' </div>');
答案 0 :(得分:5)
在打印之前,您应该在字段上使用htmlspecialchars
。
while ( $row = mysql_fetch_array($query) ) {
echo('<big><big><big style="color: rgb(158, 0, 0);">' . htmlspecialchars($row['name']) . ' </big></big></big><p>');
echo('<big><div style="text-align: justify;">' . htmlspecialchars($row['login']) . ' </big> </div>');
echo('<div style="text-align: justify;">' . htmlspecialchars($row['user']) . ' </div>');
答案 1 :(得分:1)
我建议使用HTMLPurifier库而不是原始的php函数。
答案 2 :(得分:0)
如果要一起删除所有标签,请使用strip_tags。
如果要对标记进行编码,请使用htmlspecialchars或htmlentities。
如果您想有选择地删除可能导致注入但允许其他标记的标记,那么您可能希望研究使用domdocument实现解决方案。