我有一个允许用户保存图像的网站。我用“mysql_real_escape_string”清理了 mysql 插入,但是有人在他的图像描述中输入了一个带有内容重定向的元数据,这样每当我们的网站加载(也加载最新的图像)时,它就会重定向。
如何清理我的字符串或 sql 查询以防止这种情况发生?
提前致谢!
我有一个允许用户保存图像的网站。我用“mysql_real_escape_string”清理了 mysql 插入,但是有人在他的图像描述中输入了一个带有内容重定向的元数据,这样每当我们的网站加载(也加载最新的图像)时,它就会重定向。
如何清理我的字符串或 sql 查询以防止这种情况发生?
提前致谢!
对于这个特定的示例,您可以通过在输出数据时使用htmlentities来避免它:
<?php
$str = "A 'quote' is <b>bold</b>";
// Outputs: A 'quote' is <b>bold</b>
echo htmlentities($str);
// Outputs: A 'quote' is <b>bold</b>
echo htmlentities($str, ENT_QUOTES);
?>
问题是它会破坏几乎所有用于您保存的内容的 HTML。如果您试图允许某些标签并禁止其他标签,它很快就会变得更加复杂。
mysql_real_escape_string
仅用于防止sql注入。
为了防止 XSS,您需要使用htmlspecialchars或htmlentities来清理 html 内容。
我认为您应该在htmlspecialchars();
从数据库中放入任何内容之前以及在将用户输入提交到数据库之前使用准备好的语句 + htmlspecialchars();
[可选]
这是您可以做的几件事
strip_tags()
mysqli_*
函数代替mysql_
htmlentities()