Javascript 键盘输入隐藏的秘密信息

Javascript 键盘输入隐藏的秘密信息,javascript,jquery,html,css,Javascript,Jquery,Html,Css,我只是想了想,想知道这是否可能是在愚人节的精神 你是否可能在一个类似于游戏机的网站上随机输入一个密码(a、上、下、b、L1、R1),但在这个网站上,你会在键盘上输入“9 2 k(向上箭头)3”,只要你在这个网站上,它就会做些什么,比如说提醒('hey')?我很想知道你会怎么做 // our combo var combo = [57, 50, 75, 38, 51]; var keys = new Array(combo.length); $(document).on('key

我只是想了想,想知道这是否可能是在愚人节的精神

你是否可能在一个类似于游戏机的网站上随机输入一个密码(a、上、下、b、L1、R1),但在这个网站上,你会在键盘上输入“9 2 k(向上箭头)3”,只要你在这个网站上,它就会做些什么,比如说
提醒('hey')
?我很想知道你会怎么做

  // our combo
  var combo = [57, 50, 75, 38, 51];

  var keys = new Array(combo.length);
  $(document).on('keydown', function(evt){
    // remove the earliest of the stored keys
    keys.shift();
    // push in the latest key pressed
    keys.push(evt.which);

    // compare with combo array - you could use any comparison method (convert to string,...)
    if (!keys.some(function(e, i) { return e !== combo[i] }))
      alert('hey')
  })

小提琴-

在尝试组合键之前,您需要单击运行区域(右下窗格)


小提琴-


在尝试密钥组合之前,您需要在运行区域(右下窗格)中单击。

好吧,您可以做一些事情来利用这一点,并使其更加模糊,因此用户必须跳过更多的环才能获得密钥组合,但这对于基本实现来说已经足够好了

var代码='.57.50.75.38.51';
输入的var=“”;
var-clearCombo;
//按键不会注册向上箭头
$('body').keydown(函数(e){
clearTimeout(clearCombo);
输入+='.+e.which;
clearCombo=setTimeout(函数(){
输入=“”;
}, 1000);
如果(输入==代码){
警觉(“我可怜美食家”);
}
});

好吧,您可以做一些事情来利用它,并使其更加模糊,因此用户必须跳转更多的环才能获得密钥组合,但这对于基本实现来说已经足够好了

var代码='.57.50.75.38.51';
输入的var=“”;
var-clearCombo;
//按键不会注册向上箭头
$('body').keydown(函数(e){
clearTimeout(clearCombo);
输入+='.+e.which;
clearCombo=setTimeout(函数(){
输入=“”;
}, 1000);
如果(输入==代码){
警觉(“我可怜美食家”);
}
});


是的,这是可能的,因为您必须编写代码。首先在文档上绑定keypress事件,捕捉它们并在某处获取keyCode。当字符在短时间内(比如1秒)按顺序出现时,执行
alert('hey fool!')
如果您不希望用户能够检查网站源并找出组合,您甚至可以通过websocket发送字符并在服务器上检查它们。(如果你不介意带宽)。@JCOC611虽然这在理论上是一个很酷的想法,但即使是分析服务也很少感到有这种侵入性,因为这基本上会让网站看起来像一个键盘记录程序。@BrandonAnzaldi其实没那么糟糕,因为只有当你关注网站时,它才会记录按键。如果您将选项卡切换到您的银行,则不会记录密钥。@JCOC611可能我是一个离群者,但它会给我带来麻烦。如果站点的交互很重,则更为重要。但这取决于网站所有者及其用户:^)是的,这是可能的,因为您必须编写代码。首先在文档上绑定keypress事件,捕捉它们并在某处获取keyCode。当字符在短时间内(比如1秒)按顺序出现时,执行
alert('hey fool!')
如果您不希望用户能够检查网站源并找出组合,您甚至可以通过websocket发送字符并在服务器上检查它们。(如果你不介意带宽)。@JCOC611虽然这在理论上是一个很酷的想法,但即使是分析服务也很少感到有这种侵入性,因为这基本上会让网站看起来像一个键盘记录程序。@BrandonAnzaldi其实没那么糟糕,因为只有当你关注网站时,它才会记录按键。如果您将选项卡切换到您的银行,则不会记录密钥。@JCOC611可能我是一个离群者,但它会给我带来麻烦。如果站点的交互很重,则更为重要。但这取决于网站所有者和他们的用户:^)在您输入整个内容之前,这个组合的第一个键是否会转移?如果您在
键上迭代
,那么当您输入组合的第一个键时,不会立即触发警报吗?在每次按键时,您只会将1个代码输入到键数组中(同时弹出最旧的非必需键-请注意,键数组已初始化为与组合一样长)。然后将最后的x(=组合长度)键与组合进行比较,如果匹配,则发出警报。干杯啊,你有一个长度,我错过了这一部分,所以它看起来像你会推动,然后立即关闭相同的关键!在你可以输入全部内容之前,这个组合的第一个键是否会被移走?如果您在
键上迭代
,那么当您输入组合的第一个键时,不会立即触发警报吗?在每次按键时,您只会将1个代码输入到键数组中(同时弹出最旧的非必需键-请注意,键数组已初始化为与组合一样长)。然后将最后的x(=组合长度)键与组合进行比较,如果匹配,则发出警报。干杯啊,你有一个长度,我错过了这一部分,所以它看起来像你会推动,然后立即关闭相同的关键!我投了赞成票,但我认为数组比带分隔符的字符串更优雅。我很想对potatopeelings的答案做出准确的评论。它更简洁,更干净。字符串串联的唯一好处是它是一个简单的比较,而不是遍历每个元素。虽然使用
.join()
可以与数组相同。实际上,这种方法的任何好处充其量只是名义上的,最坏的情况下根本不存在我投了赞成票,但我认为数组比带分隔符的字符串更优雅。我很想对potatopeelings的答案做出准确的评论。它更简洁,更干净。字符串串联的唯一好处是它是一个简单的比较,而不是遍历每个元素。虽然使用
.join()
可以与数组相同。实际上,这种方法的任何好处充其量只是名义上的,最坏的情况下根本不存在