在PHP中过滤/清理电子邮件主题和正文

3

我正在使用PHPMailer发送邮件。

现在,我们都知道需要始终检查用户输入。
但是电子邮件的主题和正文如何处理呢?(我不是指电子邮件地址)

哪些内容需要进行净化以及如何净化?有哪些(主要的)漏洞?

我是否应该像使用HTMLPurifier一样处理它?因为我希望用户能够标记他们的电子邮件。或者我应该使用/编写可以使用的BB-code函数?

更新:

对于邮件正文:
我现在使用具有ent_quotes标志的htmlspecialchars。之后在消息上运行BB-code(jBBCode)解析器。看起来很安全。

对于主题:
我不对主题字段进行任何验证/净化等操作(除了min和max strlen)。 通过一些JavaScript测试,看起来一切都没问题。

现在我可以认为这是安全的吗?(注:该代码没有在电子邮件之外的任何地方打印。)

2个回答

2

是的,在发送之前需要清理用户输入。HTMLPurifier和HTMLawed可以很好地进行净化处理,但需要调整以避免阻止有用的内容——两者都会谨慎处理。BBCode或Markdown可以使过滤变得更加容易,只要您不需要进行复杂的布局。


请再次查看我的更新问题并给我您的想法。我已经更新了一些信息。 - Ramon Bakker

1
你可以使用

标签


<?php
filter_var($body, FILTER_SANITIZE_FULL_SPECIAL_CHARS)

为了防止特殊字符,您可以使用RAW等方法来进行保护。

<?php
filter_var($body, FILTER_SANITIZE_RAW, FILTER_FLAG_ENCODE_HIGH)

完整的细节可以在这里找到 -> https://secure.php.net/manual/en/function.filter-var.php

这些将确保安全,但不允许任何标记工作。 - Synchro
使用此错误如下:使用未定义的常量FILTER_SANITIZE_RAW - 假定'FILTER_SANITIZE_RAW'(这将在PHP的将来版本中引发错误) - Viral Patel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接