私はあるコード(A)が何らかの種類のトークンを生成し、それを他のコード(B)に渡す方法を探していますコードを傍受できません(E)。安全にトークンを関数間で渡す
この質問では、Aがトークンを安全に生成できると仮定します。
Bが、トークンを含むオブジェクトを引数の1つとして受け取るAにいくつかの関数Fを公開する場合、Aはそのトークンを直接渡すことができます。
しかし、Eは、たとえば、console.log
を上書きしてスタックを調べることによってこのトークンを見つけることができます。
var x = console.log
console.log = function Eve()
{
x.apply(this, arguments);
console.info(Thing.caller.arguments);
}
(Fはもちろんのconsole.log
を起動すると仮定して、実際には、このように上書きされる可能性が十分な機能があります)
私は削除することである、私はこれに対する緩和策があると思います潜在的に侵害された機能を呼び出す前に、渡されたオブジェクトからトークンを保護します。 即ち
var y = function Y(Secure)
{
var Thing = Secure.Arg;
delete Secure.Arg;
console.log('SomeMessage', arguments) ;
}
y({Arg:'SomeArg'})
(FFで少なくとも)スタック上arguments
オブジェクトが現在空のオブジェクトが含まれているので、オブジェクトの引数は、スタック上の値を変更操作します。 Eが渡されたデータにアクセスできる他の方法はありますか? はいの場合、これらの方法を緩和するか、より良いセキュリティで他のオプションを検討する必要がありますか?
EDIT for Clarity:Eは、AまたはBのコントロールの外側にある手段で注入されます。 Greasemonkeyのユーザースクリプト
私はあなたがこの他の解決策を避けるために悪い時を過すと思います。異なる起点のiframeの内部で実行します。 –