0

我有一个允许用户保存图像的网站。我用“mysql_real_escape_string”清理了 mysql 插入,但是有人在他的图像描述中输入了一个带有内容重定向的元数据,这样每当我们的网站加载(也加载最新的图像)时,它就会重定向。

如何清理我的字符串或 sql 查询以防止这种情况发生?

提前致谢!

4

4 回答 4

0

对于这个特定的示例,您可以通过在输出数据时使用htmlentities来避免它:

<?php
$str = "A 'quote' is <b>bold</b>";

// Outputs: A 'quote' is &lt;b&gt;bold&lt;/b&gt;
echo htmlentities($str);

// Outputs: A &#039;quote&#039; is &lt;b&gt;bold&lt;/b&gt;
echo htmlentities($str, ENT_QUOTES);
?>

问题是它会破坏几乎所有用于您保存的内容的 HTML。如果您试图允许某些标签并禁止其他标签,它很快就会变得更加复杂。

于 2012-09-12T09:40:05.887 回答
0

mysql_real_escape_string仅用于防止sql注入。

为了防止 XSS,您需要使用htmlspecialcharshtmlentities来清理 html 内容。

于 2012-09-12T09:40:06.140 回答
0

我认为您应该在htmlspecialchars();从数据库中放入任何内容之前以及在将用户输入提交到数据库之前使用准备好的语句 + htmlspecialchars();[可选]

于 2012-09-12T09:42:30.030 回答
0

这是您可以做的几件事

  1. 采用strip_tags()
  2. 使用mysqli_*函数代替mysql_
  3. 使用参数化查询/准备好的语句。
  4. 如果可能,请考虑使用 PHP 框架。
  5. 将特殊字符转换为各自的htmlentities()
于 2012-09-12T09:42:38.787 回答