我有适用于PHP表单验证规则的规则,但我也不想要有效的但毫无意义的真实的人类垃圾邮件。当前,下面的JavaScript代码获取页面加载时间的时间戳和表单提交的时间戳。如果时差低于18秒,则会询问“您是超人吗?”在警报框中,并且不允许用户在时间到之前提交。
Q1)Date.now()
受ie9 +支持。哪个替代功能可以在ie7 +中完成相同的工作? (参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/now#Browser_compatibility)
Q2)此功能本身是否存在安全漏洞?我问是因为我怀疑代码是否可以从外部编辑变量document.getElementById('PageLoadTime').innerHTML = pageloaded
!
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>trial</title>
</head>
<body>
<div>user page loading timestamp: <span id="PageLoadTime"></span></div>
<div>form submission timestamp: <span id="submitTime"></span></div>
<div>time difference: <span id="difference"></span></div>
<script>
var pageloaded = Date.now();
document.getElementById('PageLoadTime').innerHTML = pageloaded;
function GetSubmitTime(pageloaded) {
document.getElementById('submitTime').innerHTML = Date.now();
document.getElementById('difference').innerHTML = Math.floor((Date.now() - pageloaded)/1000);
if ( Math.floor((Date.now() - pageloaded)/1000) < 18 )
{
if(event.preventDefault){
event.preventDefault();
}else{
event.returnValue = false; // for IE as dont support preventDefault;
}
alert("are you superman?");
}
}
</script>
<form method="post" action="my home page" onsubmit="GetSubmitTime(pageloaded)">
<input type="text" id="e1" name="n1">
<input type="submit" value="send" >
</form>
</body>
</html>
最佳答案
Date.now()
返回new Date().getTime()
返回的内容,而后者基本上一直得到支持。
将元素的innerHTML
设置为系统时间戳不会带来安全风险。
客户端中的任何内容都不会受到用户的篡改。任何使用您的表单的人都可以强制提交表单,而无需考虑您的时间检查。
关于javascript - Date.now()和innerHTML安全性的跨浏览器替代方案?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24933898/