質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.35%
JavaScript

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

Q&A

解決済

2回答

416閲覧

javascriptで生成した数値をクライアント側で変更することが可能かどうか

tajix_japan

総合スコア132

JavaScript

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

0グッド

0クリップ

投稿2020/07/19 07:05

javascriptでゲームを作っています。
ゲーム内において、ある作業の結果をフォームで送信します。
その部分の抜き取りが下記のjavascriptです。

javascriptの中にフォームのhtmlを記載し、そのフォームの中に

<input type="hidden" name="point" value="' + value.point + '" > の形で、javascriptで計算した結果 value.point を代入し、 <button type=\"submit\">登録</button>ボタンにより <form action="check.php" method="post">  のphpに数値を渡します。

質問です。

この場合、セキュリティ的にクライアント側で何らかの操作をすることにより、
value.pointの数値の変更とかはできるものなのでしょうか?

出来るとなると、javascriptゲームがすべて成り立たなくなるので、基本的に
はできないとは思うのですが、javascriptそのものがクライアント依存のアプリ
なので、心配になり確認する次第です。

また、できるとした場合、防止策などご存じでしたらご教示いただきたくお願い
いたします。

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

javascript

1 2<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script> 3<script> 4・・・ 5省略 6・・・ 7 //結果表示 8 function showResult(){ 9 $('<div class="image"><img src="result.jpg"></div>').appendTo('#loadarea').hide().fadeIn(2000); 10 setTimeout(function(){ 11 $('#loadarea').html(""); 12 $('<p>結果</p>').appendTo('#result'); 13 $.each(result, function(key, value){ 14 $('<div class="title">' + value.title + </div>').appendTo('#result'); 15 $('<div class="image"><img src="' + value.img + '"><form action="check.php" method="post"><input type="hidden" name="point" value="' + value.point + '" > <button type=\"submit\">登録</button></form></div><br>').appendTo('#result'); 16 }) 17 $('<p>次へく?<p>').appendTo('#result'); 18 $('#try').show(); 19 }, 20 3000) 21 } 22 23省略 24</script> 25 26

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

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

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

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

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

guest

回答2

0

ベストアンサー

この場合、JavaScript を動作させるまでもありません。
直接、適当な値を POST してしまえば不正な値が採用されます。

対策は、規約で縛る。サーバ側ですべての処理を行う。他に 146 通りあります。
Qiita でもチート対策としていくつかは紹介されているので調べてみると良いです。

ただ、正直基礎的なセキュリティ知識(というかアプリケーション制作で必要な知識)が不足しているので、体系的な学習から始めたほうが良いと思います。

投稿2020/07/19 07:44

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

tajix_japan

2020/07/19 08:02

有難うございます。 体系的に学習させていただきます。 チート対策という言葉が分かっただけでもありがたいです。 有難うございました。
guest

0

te2jiさんの回答通りではありますが、
どうすればある程度セキュリティ措置をとれるか、の回答を試みてみます。

ゲームページがPHPにて実行している前提で話を進めます。

  1. ゲーム開始時に、サーバー側でトークンを発行し、セッションに格納しておく。
  2. JavaScript側では、変数に格納しておく。
  3. 送信時に、ポイントと共にトークンを送信する(その際、HTMLにいちいち起こすと面倒で余計セキュリティ甘くなるので、Ajax通信にする)
  4. PHP側では、送信されたトークンと、

セッションに格納されたトークンを比較、
合っていればポイント反映、合ってなければ不正な値として弾く

って感じである程度防げるかと。
ただ、これでもまだ不正する方法あるし、甘いかと思います。
とかく、重要な処理や不正チェックは、あくまでサーバー側でやるべきってことです。

投稿2020/07/19 08:18

miyabi_takatsuk

総合スコア9555

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

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

tajix_japan

2020/07/19 08:51

有難うございます。 アプリ側の制作ポイントが分かった気がします。 基本、javascriptは極力使わず、サーバー側で解決したいと思います。 javascriptでクライアント側を作らざるを得ない場合は ご指導いただきました方法で作ってみたいと思います。 地獄を味わうところでした。 本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問