Flex から JavaScript を実行する:このJavaScriptの機能は危険なのでしょうか?
-
09-06-2019 - |
質問
JavaScript を生成して実行する機能が必要な Flex アプリケーションがあります。これを言うとき、Flex アプリケーションで作成した生の JavaScript (既存の JavaScript メソッドだけでなく) を実行する必要があることを意味します。
現在、次の JavaScript メソッドを公開することでこれを行っています。
function doScript(js){ eval(js);}
これで、Flex で次のようなことができるようになります (注:実際の Flex アプリのアラート ボックスよりも実質的なことを行っています)。
ExternalInterface.call("doScript","alert('foo'));
私の質問は、これがセキュリティ上のリスクを課すかどうかです。Flex と JasvaScript はすべてクライアント側で実行されるため、セキュリティ上のリスクはないと考えています...
これを行うより良い方法はありますか?
解決
最初の引数である JavaScript 関数は必要ありません。 ExternalInterface
任意の JavaScript コードを指定できます。関数名である必要はありません (ドキュメントにはそのように書かれていますが、それは間違いです)。
これを試して:
ExternalInterface.call("alert('hello')");
他のヒント
これは本質的に危険ではありませんが、ユーザーが提供したデータを関数に渡した瞬間に、コード インジェクションが悪用される可能性が高まります。それは心配だし、避けたいことだ。より良いアプローチは、必要な機能のみを公開することだと思います 必要, 、それ以上は何もありません。
私の知る限り、そして私は明らかにハッカーではありませんが、あなたは全く大丈夫です。本当に、誰かがその気になれば、とにかくクライアント側であなたのコードを悪用することができますが、JavaScriptを使用してサーバー側のコードを悪用する方法がわかりません(サーバー側のJavaScriptを使用しない限り)
これにより、eval を呼び出すことによってすでに実行できなかったことをどこで実行できるのかわかりません。ここにセキュリティ ホールが導入されているとしても、私にはわかりません。
スクリプトのアクションはステートメント内の「AllowScriptAccess」タグによって制御されることにも注意してください。Web ページがこれらのアクションを望まない場合は、スクリプトによる呼び出しを許可すべきではありません。
http://kb.adobe.com/selfservice/viewContent.do?externalId=tn_16494
ExternalInterface.call("eval", "alert('hello');");