我想在浏览器上显示"me@mymail.com"
。我知道像这样显示电子邮件地址是不安全的。因此,当我们查看源代码时,它显示为javascript。这可以用剃须刀吗?在浏览器中显示电子邮件地址时,我习惯使用codeigniter php框架safe_email()
这样做。
您使用 Razor 的事实无关紧要。保护电子邮件地址免受地址收集器侵害的唯一方法是在页面中对其进行模糊处理,然后使用客户端脚本为适当的客户端对其进行去混淆处理。我喜欢使用人类可读的混淆,以免在禁用脚本的情况下锁定用户。这就是我所做的(使用MVC WebForms语法):
String emailAddress = "name@example.com";
public static String Escape(String s) {
StringBuilder sb = new StringBuilder();
foreach(Char c in s) {
sb.Append('%');
Int32 ic = (Int32)c;
String hex = ic.ToString("X2"); // convert to hexadecimal
sb.Append( hex );
}
return sb.ToString();
}
<span id="email"><%= Html.Encode( emailAddress.Replace("@", "REMOVE@CAPITALIZED") ) %></span>
<script type="text/ecmascript">
document.getElementById("email").innerText = unescape("<%= Escape( emailAddress ) %>" );
</script>
转义文本可以保护它们免受收割机的侵害,但脚本会自动在任何称职的浏览器中显示它。没有脚本的用户将看到一个人类可读的混淆地址,他们可以简单地更正自己。