在将文本区域输出回文本区域时,如何正确清理从文本区域接收的数据?

时间:2009-02-27 01:47:42

标签: php mysql html forms sanitization

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

感谢您的帮助。我从来都不太确定这样做的正确方法......

2 个答案:

答案 0 :(得分:14)

保存时不应使用htmlentities。显示时应使用htmlentities。经验法则是在您需要之前不对数据进行编码/清理。如果您在保存时对其htmlentities进行了保存,那么当用户想要编辑输入时,您必须对文本执行html_entity_decode。所以你要消毒你需要的东西,仅此而已。保存时,您需要清理SQL注入,因此mysql_real_escape_string它。显示时,您需要清理XSS,因此htmlentities

另外,我不确定你是否看过Darryl Hein的评论,但你真的不想启用magic_quotes。 They are a bad, bad, thing并且自PHP 5.3起已被弃用,并且将在PHP 6中完全消失。

答案 1 :(得分:2)

除了Paolo关于何时使用htmlentities()的答案之外,除非您使用的是旧版本的PHP,否则清理插入mysql数据库的正确方法是使用Prepared Statements mysqli extension的一部分。这取代了使用mysql_real_escape_string()的任何需要。

除此之外,我认为你已经完成了任务。