Javascript 是否可以记录在浏览器中键入的文本';谁的控制台?

Javascript 是否可以记录在浏览器中键入的文本';谁的控制台?,javascript,jquery,dom,xss,Javascript,Jquery,Dom,Xss,我制作了一个函数/对象(函数和对象在Javascript中是一样的) 记录键入的密钥。这是我网站上的一项安全措施。当然,我主要感兴趣的是控制台中键入的内容。由于我花了很长时间手动写出this.keymap,我希望我没有浪费时间。但是当我测试我的页面并在控制台中键入内容时,它没有被记录,而如果我点击主体本身并键入内容,它就会被记录。是否有任何可能的方法可以将内容输入控制台???比如说,浏览器中运行的Javascript代码的作用域是窗口。由于控制台与窗口分开运行,Javascript无法直接访问它

我制作了一个函数/对象(函数和对象在Javascript中是一样的)

记录键入的密钥。这是我网站上的一项安全措施。当然,我主要感兴趣的是控制台中键入的内容。由于我花了很长时间手动写出t
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键盘记录者:很快就会出现在你附近的操作系统上。当然-实现你自己的浏览器并记录键入的任何内容。。。否则,当你的代码根本不运行时,你就很难让你的代码做任何事情。你在网站上编写的代码都有一个窗口范围。控制台不是你的窗口的一部分,所以不,你不能这样做。这个问题的可能重复与那个问题的重复相差甚远,所以前两个接近的投票远远偏离了目标。