我有一个textarea,其值将被插入到mysql数据库中。为了防止mysql注入,我是通过nl2br,mysql_real_escape_string,htmlentities还是2或全部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
,但您最好使用带有PDO
或MDB2
的预准备语句。
从不将编码数据存储在数据库中。您应该始终存储原始数据。也就是说,请勿使用nl2br
或htmlentities
进行存储。但是,如果要将数据插入到DOM中,则应将其用于 display (nl2br
纯粹是可视化的,htmlentities
将有助于防止XSS)。另请注意,htmlspecialchars
可能是首选,具体取决于您希望如何处理显示 - 这应足以满足基本的XSS保护。
记住这句口头禅:
答案 2 :(得分:0)
如果您使用PDO或mysqli的预准备语句,那么您只需绑定参数。如果使用旧的mysql扩展,则应使用mysql_real_escape_string()
。