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

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

詳細はこちら
JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

XHR

XHR(別名XMLHttpRequest)はJavaScriptなどのスクリプト言語を使ってサーバーとHTTP通信を行うAPIを指します。

JavaScript

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

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

Q&A

解決済

3回答

32924閲覧

【JavaScript】JSONの中に変数を埋め込むにはどうすればいいですか?

退会済みユーザー

退会済みユーザー

総合スコア0

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

XHR

XHR(別名XMLHttpRequest)はJavaScriptなどのスクリプト言語を使ってサーバーとHTTP通信を行うAPIを指します。

JavaScript

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

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

0グッド

0クリップ

投稿2016/05/22 11:32

JavaScript

1var connection = new XMLHttpRequest(); 2 3var url = 'http://<server>:<port>/logon/long'; 4var body ='{userName:"Sarah", password: "abc"}'; 5 6connection.open('POST', url, false); 7connection.setRequestHeader('Content-Type', 'application/json'); 8connection.send(body);

XHRでREST APIを使っています。

問題は、これではユーザー名パスワードが、
ソースで丸見えになっていることです。

対応策として、
分かりにくくするために正規表現を使い
変数を埋め込むことにしました。

※実際はもう少し複雑ですが、
分かりやすくするために、簡潔な例にしています。

JavaScript

1Var FakePass = "1a2b3c" 2FakePass = FakePass.replace(/[0-9]/g, "") 3 4var body ='{userName:"Sarah", password: FakePass}'; 5

しかしこれだと、上手くログインできません。

JSONの文字列の中に、変数を埋め込むには、どうすればよいのでしょうか?

ありがとうございます・・・

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

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

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

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

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

guest

回答3

0

どのようなトリックを仕込んだとしてもそのコードがクライアント側のJavaScriptで処理されている限り、簡単にハックされてしまうのは避けられません。
根本的に設計を変えて、パスワードそのものを伝送しない仕組みを作るか、伝送路をSSLで保護するのが良策だと思います。

投稿2016/05/22 12:03

tkanda

総合スコア2425

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

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

退会済みユーザー

退会済みユーザー

2016/05/22 12:09

アドバイスありがとうございます・・・SSLを検索してみましたが、初心者の私にはレベルが高すぎで諦めました。もし良いサイトなどあれば教えて頂けますか? このアプリは社内向けでエンドユーザーも数名、また彼らはプログラミングが分からないので、ぱっとみてパスワードが分からないならOK、ということでこの方法を採用しました・・・
tkanda

2016/05/22 12:19

SSLはネットワーク上を流れるデータを暗号化する技術であって、JavaScriptプログラミングの範疇ではありません。 解りやすく言うと、Webサイトにアクセスする時に http: で始まるアドレスを指定しますよね?SSLで暗号化された通信を行っているWebサイトにアクセスする場合は、これが https: になります。例えばこの teratail も https: で始まるアドレスでアクセスしていますよね、これはつまり teratail へのログインIDとパスワード、書き込み内容等はネットワーク上で暗号化され、保護されているということを示しています。 SSLを使うかどうかはWebサーバーの設定の話であり、プログラミングとは無関係です。 SSLは世の中のほぼすべてのレンタルサーバーのオプションメニューで用意されていますのでご利用のレンタルサーバー業者に問い合わせてみることをお勧めします。
退会済みユーザー

退会済みユーザー

2016/05/22 12:24

ありがとうございます。勉強になりました。ちょっと調べてみます。
guest

0

JSONとして渡すなら

JavaScript

1var body ='{"userName":"Sarah", "password": "' + FakePass + '"}'; 2```か、 3```JavaScript 4var body = JSON.stringify( { userName: "Sarah", password: FakePass } ); 5```したほうが良いです。 6 7[JSON] JSONフォーマットの書式】 8[https://www.ipentec.com/document/document.aspx?page=json-format](https://www.ipentec.com/document/document.aspx?page=json-format) 9> 注意 キーは文字列型のみです。 10 11【JavaScript Object Notation - Wikipedia】 12[https://ja.wikipedia.org/wiki/JavaScript_Object_Notation](https://ja.wikipedia.org/wiki/JavaScript_Object_Notation) 13> ここで注意することはキーとして使うデータ型は文字列に限ることである。 14 15JSON.stringify() - JavaScript | MDN16[https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify)

投稿2016/05/22 12:17

編集2016/05/22 12:22
kei344

総合スコア69596

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

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

退会済みユーザー

退会済みユーザー

2016/05/22 12:18

ありがとうございます!
guest

0

ベストアンサー

こんな感じでは?

JavaScript

1Var FakePass = "1a2b3c" 2FakePass = FakePass.replace(/[0-9]/g, "") 3 4var body ='{userName:"Sarah", password: "' + FakePass + '"}';

投稿2016/05/22 11:37

編集2016/05/22 11:38
takasima20

総合スコア7460

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

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

退会済みユーザー

退会済みユーザー

2016/05/22 12:06

ありがとうございます!できました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問