🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

4回答

1669閲覧

文字列をJavaScript上でJavaScriptのコードとして実行したい

MorningGlory

総合スコア8

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2021/03/09 18:15

編集2021/03/09 18:48

私は、JavaScriptの難読化について調べています。
難読化では人間の目ではみにくいというだけで、実行自体はできてしまいます。
なので、JavaScriptのコードを暗号化、実行するときに復号することでセキュリティの向上を図りたいのです。

そこで、タイトルの通り、文字列、テキストファイルをJavaScript上でJavaScriptのコードとして実行したいのですが、
その方法に見当がつかず、悩んでいます。そもそもそのようなことが可能なのでしょうか。

例えば、 test.js 内に

a = 'console.log('Hello')';

という文字列があったとして、これを test.js上でJavaScriptのコードとして実行可能なのかが知りたいです。
または、この文字列 a を test2.jsとして保存し、test2.jsに制御を移すことができるのでしょうか。

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kei344

2021/03/09 18:31

通常そのような手段をとることがないため、「何のために(何がしたくて)」を質問文に追記することをお勧めします。
m.ts10806

2021/03/09 19:34 編集

以前に同じような質問が出てしこたま荒れたような記憶。 セキュリティ対策はサーバー側でやるものです。 結局実行するなら同じ。
takasima20

2021/03/09 23:00

その暗号化や復号化は「どこ」でやる前提なのかな?
guest

回答4

0

ベストアンサー

なので、JavaScriptのコードを暗号化、実行するときに復号することでセキュリティの向上を図りたいのです。

JavaScriptの範囲内でできることは、せいぜい「パット見をごまかす」程度のことです。

ブラウザサイドで復号を行うということは、「ブラウザ内で復号された結果を得られる」ということなので、その気になれば復号後のソースを抽出することも可能です。手間をかけるに値するメリットはないと考えます。

投稿2021/03/09 23:01

maisumakun

総合スコア145975

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

例えば、 test.js 内に

a = 'console.log('Hello')';
という文字列があったとして、これを test.js上でJavaScriptのコードとして実行可能なのかが知りたいです。

それ、【難読化】の最初の一歩ですよ。
すでに回答ついてますが、eval で実行可能です。

【難読化】では部分的に非可逆な変換もいれますが、maisumakun の回答の通り、フロントのみでは「パット見をごまかす」程度のことしか無理です。

投稿2021/03/10 00:22

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

苦労して考えたコードを見られたくないのかなぁ?と、予想してみたり。
実行直前にサーバー側からDLして実行直後に削除してあげれば、
簡単には分からないようになると思うけども…
本気で検証されるとたぶん捉えられちゃうかなとも思う。

似たようなことを考えた人がいたっぽいので参考にURL貼っておきます。

参考URL Qiita Javascriptソースコードを見られないように隠蔽してみた。
https://qiita.com/yomogenium/items/881a55417dc047756e78

投稿2021/03/09 23:05

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2021/03/09 23:10

>本気で検証されるとたぶん捉えられちゃうかなとも思う ほんとそれですよね。 いわゆるクラッカーレベルになると小手先でやったところですぐ暴かれるし、そもそも暴かれてダメなコードならローカルで遊ばせるにとどめるべきで。
退会済みユーザー

退会済みユーザー

2021/03/09 23:28

> m.ts10806様 ここの上位におられる方はごにょごにょできる方ばかりだと思っております。 僕程度でもげふんげふんですし。
guest

0

eval関数で可能です。
ただし通常のスクリプトに比べてパフォーマンスが落ちる可能性があります。

また検索すればどこでも言ってると思いますが、セキュリティ上のリスクが生じ得るので、使い方と影響について正しく理解して利用すべきです。

真っ先に出てくると思われるこちらでもevalを使用しないでくださいとガッツリ書いてありますが、代替用法も色々とありますので参考にしてください。

投稿2021/03/09 18:39

編集2021/03/09 18:43
kairi003

総合スコア1332

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問