7

用户将在文本区域中输入文本。然后将其直接插入到 mySQL 数据库中。我在上面使用了 trim、htmlentities、mysql_real_escape_string 并且我启用了魔术引号。将该数据输出回文本区域时,我应该如何对其进行清理?

谢谢你的帮助。我从来没有太确定这样做的正确方法......

4

2 回答 2

14

htmlentities保存时不应使用。您应该htmlentities在显示它时使用。经验法则是在需要之前不要对数据进行编码/清理。如果您在保存时对它进行操作,那么当用户想要编辑输入时htmlentities您必须对文本进行操作。html_entity_decode因此,您可以根据需要进行消毒,仅此而已。保存时,您需要对 SQL 注入进行清理,这样就可以mysql_real_escape_string了。显示时,您需要对 XSS 进行清理,因此您可以这样htmlentities做。

另外,我不确定您是否看到了 Darryl Hein 的评论,但您确实不想启用 magic_quotes。它们很糟糕,很糟糕,从 PHP 5.3 开始已被弃用,并且将在 PHP 6 中完全消失。

于 2009-02-27T01:51:13.647 回答
2

除了 Paolo 关于何时使用的回答之外htmlentities(),除非您使用的是旧版本的 PHP,否则清理以插入 mysql DB 的正确方法是使用准备好的语句,它是mysqli 扩展的一部分。这取代了任何需要使用mysql_real_escape_string()的 .

除此之外,我认为你已经涵盖了一些事情。

于 2009-02-27T02:00:59.443 回答