针对mysql注入的Textarea保护 - PHP

时间:2012-03-28 14:51:13

标签: php mysql code-injection html-entities

我有一个textarea,其值将被插入到mysql数据库中。为了防止mysql注入,我是通过nl2br,mysql_real_escape_string,htmlentities还是2或全部3的组合处理输入?我以什么顺序处理数据?

3 个答案:

答案 0 :(得分:5)

nl2br基本上将所有"\n"转换为"<br/>",所以我看不出它如何帮助sql注入(不是mysql注入顺便说一句)

mysql_real_escape_string通常用于此类事情。

htmlentities用于防止用户在允许用户输入时向您的网站注入恶意<script>的错误。请注意,按字母顺序存储字符串通常是一种公认​​的做法,只要在输出字符串时调用htmlentities

你需要知道上述每一项所做的事情,并且只在你需要的时候使用它们,而不是将它们结合起来,因为它们可能会破坏更糟糕的东西。

保护数据库的另一个更好,更安全的替代方法是使用mysqli http://sg.php.net/mysqli,它提供了准备好的语句来帮助您过滤掉您的SQL

答案 1 :(得分:3)

插入时所需的处理是mysql_real_escape_string,但您最好使用带有PDOMDB2的预准备语句。

从不将编码数据存储在数据库中。您应该始终存储原始数据。也就是说,请勿使用nl2brhtmlentities进行存储。但是,如果要将数据插入到DOM中,则应将其用于 display nl2br纯粹是可视化的,htmlentities将有助于防止XSS)。另请注意,htmlspecialchars可能是首选,具体取决于您希望如何处理显示 - 这应足以满足基本的XSS保护。

记住这句口头禅:

  • 逃生存储
  • 编码显示

答案 2 :(得分:0)

如果您使用PDO或mysqli的预准备语句,那么您只需绑定参数。如果使用旧的mysql扩展,则应使用mysql_real_escape_string()