2016-09-29 17 views
0

注射後に鍵を入手できますか?(セイキーはハードどこにも符号化されていないthatsの暗号化キーであるかもしれない)このコードのようにコードを隠すのは安全ですか?

injectkey

injectkey('abc'); // Uncaught TypeError: injectkey is not a function(…) 

askmeforkey() // nope 

可能な利用

console.dir(NULL); // prints null 

injectkey('xyz'); 

そして再び

を試した後

var outside=[]; 

var NULL=(function(){ 
    var key=''; 
    console.log("Hi, I'm null!"); 
    window.injectkey=function(k){ 
     window.injectkey=null; 
     key=k; 
     return; 
     }; 
    window.askmeforkey=function(){return "nope! I could use my key for stuff though...";} 
    setTimeout(function(){ 
     outside.push("I still exist and can alter things outside but you can't see me!"); 
     console.log(outside); 
     },1000); 
    })(); 
NULL=null; 
console.log('NULL=='+NULL); // prints NULL==null 

いくつかの方法で何度もやり遂げることができましたエキュラ暗号化メッセージング

+1

「安全」を定義します。それが何らかの定義によって「安全」かどうかにかかわらず、無意味です。まったく同じことが、 'NULL'変数なしでほぼ​​同じ方法で達成できます。 –

+0

はい、私はそれの音が好きなのでnullを選択します!もし私の質問が虚偽で物を隠していたなら、あなたはあまりにも無意味だと言ったでしょう! (否定性は無意味です) –

+0

@ T.J.Crowder safe in - あなたは鍵を取得/閲覧/変更/削除できますか? –

答えて

2

keyは完全に匿名機能に限定されています。

var outside=[]; 

(function(){ 
    var key=''; 
    console.log("Hi, I'm null!"); 
    window.injectkey=function(k){ 
     window.injectkey=null; 
     key=k; 
     return; 
     }; 
    window.askmeforkey=function(){return "nope! I could use my key for stuff though...";} 
    setTimeout(function(){ 
     outside.push("I still exist and can alter things outside but you can't see me!"); 
     console.log(outside); 
     },1000); 
    })(); 

これは、より広く必要以上にさらす変数を回避するための一般的なパターンは次のとおりです。ここではすべて、これはまったく同じことをしNULLために必要がないことに注意してください。

+0

それは一般的です!そして鍵を手に入れる方法はありませんか? –

+1

@BenMuircroft:あなたが外部で利用できるようにするために何か明示的に(例えば、あなたがその関数を公開した関数の戻り値として)何かをしない限り、何もありません。 –

+1

@BenMuircroft:もちろん、* nothing *はユーザーからはプライベートです。彼らはブレークポイントを(タイムアウトコールバックのように)1行に置いて、デバッガで 'key'を調べることができます。しかし、* code *はそのスコープ関数の外側から 'key'にアクセスすることはできません。 –

関連する問題