超长的 URL 通常是评论为垃圾邮件的可靠标志。此代码段将把 URL 长度(作为作者 URL,而不仅仅是文本中的 URL)超过 50 个字符的评论标记为垃圾邮件,否则保持其状态不变。
<?php
function rkv_url_spamcheck( $approved , $commentdata ) {
return ( strlen( $commentdata['comment_author_url'] ) > 50 ) ? 'spam' : $approved;
}
add_filter( 'pre_comment_approved', 'rkv_url_spamcheck', 99, 2 );
?>
此页面的 URL 长度为 74 个字符。
因此,使用此代码段,如果用户将其作为作者 URL 留在此评论中,则该评论将被标记为垃圾邮件。
哦,仅限于作者 URL - 我明白了。
我将“不仅仅是在文本中”理解为“不仅在文本中”。我错了 - 尽管我怀疑其他人也可能被此绊倒。如果您在标题或第一句话中也提到“作者 URL”,也许会更清楚一些?
我刚刚发现 WordPress 似乎接受评论中的工作脚本。根据我阅读的其他关于在输出用户输入之前对其进行清理的内容,这似乎是一个大忌。我将在这里尝试一下,看看它是否在您的网站上也能运行:alert('really?!?’)。
如果您的网站像我的网站一样,此页面现在将在每次刷新时发出“really?!?”警报。另一方面,如果您阻止了这种情况发生,我希望学习在自己的网站上采取有效的方法来做到这一点。
如果这个小脚本在这里运行 - 并且可能在数百万个其他 WP 网站上运行 - 我当然很想听听您对它的安全性有何看法。
谢谢,
Dave
我看到您的评论表单已删除了脚本标签,只将无害的字符串作为消息的一部分保留了下来。非常好。
我昨天在 WordPress.org 支持论坛上提出了关于此问题的问题,得到的回复是“尝试通过转到您的讨论设置(仪表盘)在评论黑名单中阻止脚本中通常使用的关键字,例如 script、type、javascript 等。”这对我来说似乎并不是特别令人放心。
您能否请我指点一下在自己的网站上加强评论表单的最佳方法?
再次感谢,
Dave
实际上,您可以使用正则表达式。
首先,您应该使用 filter_var($url, FILTER_VALIDATE_URL) 而不是正则表达式。对于正则表达式,您可以尝试 regexr.com 上的示例。