Javascript 是否可以记录在浏览器中键入的文本';谁的控制台?
我制作了一个函数/对象(函数和对象在Javascript中是一样的) 记录键入的密钥。这是我网站上的一项安全措施。当然,我主要感兴趣的是控制台中键入的内容。由于我花了很长时间手动写出tJavascript 是否可以记录在浏览器中键入的文本';谁的控制台?,javascript,jquery,dom,xss,Javascript,Jquery,Dom,Xss,我制作了一个函数/对象(函数和对象在Javascript中是一样的) 记录键入的密钥。这是我网站上的一项安全措施。当然,我主要感兴趣的是控制台中键入的内容。由于我花了很长时间手动写出this.keymap,我希望我没有浪费时间。但是当我测试我的页面并在控制台中键入内容时,它没有被记录,而如果我点击主体本身并键入内容,它就会被记录。是否有任何可能的方法可以将内容输入控制台???比如说,浏览器中运行的Javascript代码的作用域是窗口。由于控制台与窗口分开运行,Javascript无法直接访问它
his.keymap
,我希望我没有浪费时间。但是当我测试我的页面并在控制台中键入内容时,它没有被记录,而如果我点击主体
本身并键入内容,它就会被记录。是否有任何可能的方法可以将内容输入控制台???比如说,浏览器中运行的Javascript代码的作用域是窗口。由于控制台与窗口分开运行,Javascript无法直接访问它
因此,不可能将用户正在键入的文本记录到Javascript控制台中
话虽如此,如果用户从控制台调用函数,并且您有机会覆盖这些函数,那么您可以了解一点用户正在做什么
作为概念证明,在页面中添加以下Javascript:
var myLog = "";
var realSetTimeout = window.setTimeout;
window.setTimeout = function(a, b){
myLog += "setTimeout was called from " + (new Error).stack + "\n";
myLog += "with arguments: " + a + " and " + b + "\n";
return realSetTimeout.apply(this, arguments);
};
现在,如果用户要运行setTimeout(函数)({test;},1000)
从他们的控制台,您的myLog
变量将包含如下内容:
Chrome
setTimeout was called from Error
at window.setTimeout (<anonymous>:3:51)
at <anonymous>:2:1
at Object.InjectedScript._evaluateOn (<anonymous>:875:140)
at Object.InjectedScript._evaluateAndWrap (<anonymous>:808:34)
at Object.InjectedScript.evaluate (<anonymous>:664:21)
with arguments: function (){ test; } and 1000
(当然,上面的代码也会记录从普通页面脚本发出的对setTimeout的每次调用!因此您可能只想记录那些具有匹配stacktrace的调用。)
因此,如果用户调用正常,实际上可以稍微监视一下用户的控制台命令
也许使用getter还可以监视属性访问
您的用户是否会欣赏您这样做,或者您是否会从中获得任何有用的信息,这是另一回事 就像上面所说的,浏览器中运行的Javascript代码的作用域是窗口。由于控制台与窗口分开运行,Javascript无法直接访问它
因此,不可能将用户正在键入的文本记录到Javascript控制台中
话虽如此,如果用户从控制台调用函数,并且您有机会覆盖这些函数,那么您可以了解一点用户正在做什么
作为概念证明,在页面中添加以下Javascript:
var myLog = "";
var realSetTimeout = window.setTimeout;
window.setTimeout = function(a, b){
myLog += "setTimeout was called from " + (new Error).stack + "\n";
myLog += "with arguments: " + a + " and " + b + "\n";
return realSetTimeout.apply(this, arguments);
};
现在,如果用户要运行setTimeout(函数)({test;},1000)
从他们的控制台,您的myLog
变量将包含如下内容:
Chrome
setTimeout was called from Error
at window.setTimeout (<anonymous>:3:51)
at <anonymous>:2:1
at Object.InjectedScript._evaluateOn (<anonymous>:875:140)
at Object.InjectedScript._evaluateAndWrap (<anonymous>:808:34)
at Object.InjectedScript.evaluate (<anonymous>:664:21)
with arguments: function (){ test; } and 1000
(当然,上面的代码也会记录从普通页面脚本发出的对setTimeout的每次调用!因此您可能只想记录那些具有匹配stacktrace的调用。)
因此,如果用户调用正常,实际上可以稍微监视一下用户的控制台命令
也许使用getter还可以监视属性访问
您的用户是否会欣赏您这样做,或者您是否会从中获得任何有用的信息,这是另一回事 javascript键盘记录者:很快就会出现在你附近的操作系统中。当然-实现你自己的浏览器并记录键入的任何内容。。。否则,当你的代码根本不运行时,你就很难让你的代码做任何事情。你在网站上编写的代码都有一个窗口范围。控制台不是你的窗口的一部分,所以不,你不能这样做。这个问题的可能重复与那个问题的重复相差甚远,所以前两次投票结果与目标相差甚远。javascript键盘记录者:很快就会出现在你附近的操作系统上。当然-实现你自己的浏览器并记录键入的任何内容。。。否则,当你的代码根本不运行时,你就很难让你的代码做任何事情。你在网站上编写的代码都有一个窗口范围。控制台不是你的窗口的一部分,所以不,你不能这样做。这个问题的可能重复与那个问题的重复相差甚远,所以前两个接近的投票远远偏离了目标。