如何防止浏览器用JavaScript替换文本字段中的电子邮件?

时间:2012-05-09 19:53:31

标签: php javascript forms email spam-prevention

我有一个像这样的字段:

<input type="text" name="email" />

我正在使用PHP来检查表单的有效性,除了这个之外还包含其他字段。如果有效性检查失败,我会将值存储在会话中并再次输出表单,并显示错误消息并预先填充表单值。

如果我添加电子邮件,说“person@example.com”,表单无效,则“person@example.com”将替换为JS:

 <script type='text/javascript'> <!-- var prefix = 'ma' + 'il' + 'to'; var path = 'hr' + 'ef' + '='; var addy34269 = 'person' + '@'; addy34269 = addy34269 + 'example' + '.' + 'com'; document.write('<a ' + path + '\'' + prefix + ':' + addy34269 + '\'>'); document.write(addy34269); document.write('<\/a>'); //-->\n </script><script type='text/javascript'> <!-- document.write('<span style=\'display: none;\'>'); //--> </script>This email address is being protected from spambots. You need JavaScript enabled to view it. <script type='text/javascript'> <!-- document.write('</'); document.write('span>'); //--> </script>

毋庸置疑,这不是我想要的。这种情况发生在Chrome和Firefox中;我不确定其他人。如何阻止浏览器在表单失效后替换电子邮件?

我曾想过使用str_replace使电子邮件看起来不像电子邮件,然后使用JS进行另一个字符串替换以使其恢复到原始值,但如果可能的话,我想在没有JS的情况下这样做。有什么想法吗?

3 个答案:

答案 0 :(得分:1)

我之前见过这个。我在我的网站上使用CloudFare,并且明文中的电子邮件地址被编码以防止它们被垃圾邮件程序员窃取。您可能拥有类似的服务,可以帮助保护您的网络托管服务商。

 <script type='text/javascript'> <!-- var prefix = 'ma' + 'il' + 'to'; var path = 'hr' + 'ef' + '='; var addy34269 = 'person' + '@'; addy34269 = addy34269 + 'example' + '.' + 'com'; document.write('<a ' + path + '\'' + prefix + ':' + addy34269 + '\'>'); document.write(addy34269); document.write('<\/a>'); //-->\n </script><script type='text/javascript'> <!-- document.write('<span style=\'display: none;\'>'); //--> </script>This email address is being protected from spambots. You need JavaScript enabled to view it. <script type='text/javascript'> <!-- document.write('</'); document.write('span>'); //--> </script>

仔细阅读代码,您会注意到它如何声明“此电子邮件地址受spambots保护。”

编辑:这是服务器端编辑,因此请求该页面的每个浏览器都将获得该结果。

答案 1 :(得分:1)

当你(或你的主人)使用Joomla时!您可以完全禁用“电子邮件隐藏”插件或禁用单个电子邮件的隐藏真实功能,如上所述here

答案 2 :(得分:1)

当您使用最高安全设置的CDN激活cloudflare时会发生这种情况。您可以登录您的cloudflare帐户并将设置更改为适度。

此外,如果您使用的是joomla,则可以在要替换的电子邮件地址前添加{emailcloak = off}。例如:{emailcloak = off} youremail@emailofyoursite.com

这通常可以解决问题。