我想要一个JavaScript代码来保护网页元素免受输入窃取攻击。我希望通过注册的事件处理程序拦截击键,并将其从网页上的JavaScript中屏蔽,以防止各种JavaScript攻击。
答案 0 :(得分:4)
你要的是一个JavaScript代码,它拦截击键的方式是没有其他JavaScript代码可以拦截击键,遗憾的是这是不可能的,因为你的代码必须比其他代码具有特权,而这不是JavaScript的工作方式。
Keyloggers是一个严重的问题,无法在应用程序层解决,尤其是使用JavaScript,如果您尝试保护的攻击者已经首先控制了JavaScript。 即使您可以这样做,那么您可能仍然必须在某处发送这些击键,其他恶意JavaScript代码可以在传输中拦截它。 没有简单的方法来防止键盘记录器。阅读Trusteer的Anti-Keylogger Myths论文,以获得良好的开端。
您必须确保在没有知识且不符合用户意愿的情况下不会执行恶意JavaScript代码(因为您的用户始终能够在您的页面上下文中执行任意代码,如果没有别的话,使用bookmarklet ,你只需处理它)。如果您在自己的网页中加入广告或某些第三方小部件,请使用Caja或ADsafe等技术。
更新:我刚刚阅读了您刚刚发布的评论,说明了您要实现的目标。如果你想编写一个浏览器插件来阻止恶意代码获得击键,同时只允许好的代码来获得击键,那么你就会遇到一个更严重的问题:你如何从邪恶的代码中分辨好代码?一切都只是功能,它不像他们有一些好的属性设置为true或false。你能做的最多就是完全阻止密码字段的keydown和keypress事件,但是除了打破大量的代码告诉用户密码的强度和类似的东西之外,你真的什么都得不到,因为攻击者可以轻松读取密码值在某些时间间隔甚至不依赖于键盘事件。如果您阻止读取密码值的能力,那么您将破坏验证两个版本的密码是否匹配的代码以及类似的东西,但仍然无法实现任何目标,因为攻击者可以在表单时读取它已提交,或者发布了AJAX请求,等等,但令人作呕......
答案 1 :(得分:3)
你可能不会。
任何值得晚餐的键盘记录器都位于键盘驱动程序和应用程序之间。当击键进入浏览器窗口并且您的脚本 - 在管道末端正确时 - 可能已经发生了日志记录。
相反,说服您的用户更好地照顾他们的计算机并运行病毒扫描。您可以推荐Rapport,这是英国银行目前正在推广的。{/ p>
答案 2 :(得分:0)
我不确定你是否想要这个,你的意思是这样吗?
onkeydown="function(){return false;}"
希望这有帮助。
答案 3 :(得分:0)
通常,输入可以从以下DOM事件中截取
window.onkeydown
window.onkeypress
window.onkeyup
document.onkeydown
document.onkeypress
document.onkeyup
使用像JavaScript Keylogger & Anti-Keylogger之类的脚本可以做到这一点,以确保没有为这些事件分配操作。
它将是这样的
// this will attach a listener to the onkeypress() event
document.onkeypress = function(e){
window.keyp = "";
window.keyp += e.key; //we store the key into a window variable to create the complete word
if(e.code === "Space") // we check for when space is pressed to print the word out in console
{
console.log(window.keyp); //print
window.keyp = ""; // we made the window variable null again
}
};
//to overcome this we can have someting as AntiKeylogger and call it when the page is loaded
//disables the keystroke logging
function AntiKeylogger(){
window.onkeydown = undefined;
window.onkeypress = undefined;
window.onkeyup = undefined;
document.onkeydown = undefined;
document.onkeypress = undefined;
document.onkeyup = undefined;
}();
但结果不同而且取决于你执行它的时间,如果恶意脚本在延迟或一个事件后执行,这将无济于事。掩蔽涉及在所有人面前捕捉事件,这在目前似乎是不可能的。