如何保护sql条目免受“meta”注入?

时间:2012-09-12 09:37:15

标签: php mysql sql-injection

我有一个允许用户保存图像的网站。我使用'mysql_real_escape_string'清理mysql插件,但是有人去了并在其图像描述中输入了内容重定向的元数据,因此无论何时我们的网站加载(加载最新图像),它都会重定向。

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

提前致谢!

4 个答案:

答案 0 :(得分: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用于你正在保存的东西。如果你试图允许某些标签并禁止其他标签,它会很快变得更加复杂。

答案 1 :(得分:0)

mysql_real_escape_string仅用于防止sql注入。

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

答案 2 :(得分:0)

我认为你应该在每次从数据库中放入任何内容之前使用htmlspecialchars();,然后在将用户输入提交到数据库之前使用预准备语句+ htmlspecialchars(); [可选]

答案 3 :(得分:0)

以下是您可以做的几件事

  1. 使用strip_tags()
  2. 使用mysqli_*功能代替mysql_
  3. 使用参数化查询/准备好的陈述。
  4. 如果可能,请考虑使用PHP框架。
  5. 将特殊字符转换为各自的htmlentities()