初心者の質問かもしれませんが、私は本当に混乱しています。
ユーザーが4つの可能な回答から選択する必要があるオンラインクイズを作成しようとしています。しかし、1 つの質問が本当に気になるので、行き詰まりました。だから:
ユーザーが間違った答えをクリックすると、ボタンの背景色を変更して無効にするJavaScript関数があります。また、正解ボタン (送信) は存在しない機能を呼び出します。これは、ソース コードをざっと見てみることにした場合に、人々を混乱させるだけです。すべてがうまくいきましたが、それから私は考え始めました。ユーザーが私のソース コードを詳しく調べることにした場合はどうなりますか? 彼は私の JavaScript 関数を見ることができ、実際にプレイしなくても正しい答えを見つけられるでしょう。
ソースを非表示にする方法はありますか (私が理解しているように、JavaScript では不可能です)、別の方法を使用できますか? これらの状況で他の開発者は何を使用していますか? 助言がありますか?:)
4 に答える
本当に安全にしたい場合は、サーバー側 (PHP など) で行う必要があります。詐欺師をより困難にするためにできることは、完全なセキュリティを実現できない、このようなさまざまな js 難読化ツールの 1 つを使用して JavaScript コードを難読化することです。
ユーザーがチートできる理由は、答えが JavaScript コードにあるからです。
解決策: JavaScript コードに答えを入れないでください。代わりにサーバーに保管してください。
このようなもの: ユーザーが質問に対する回答を変更するたびに...
- JavaScript はサーバーに応答を送信します。
- サーバーは YES または NO で応答します。
- JavaScript はユーザーへの返信を表示します。
ユーザーは答えを見ることはなく、それが真か偽かだけです。
tl;dr AJAX を学びます。
これは良い質問であり、すべての Web 開発者が自問すべきものです...
これは、私たち Web 開発者が毎日直面している大きな問題です。私たちの JavaScript は表示可能で、場合によっては編集可能です。クライアントから来るものは何も信用しないでください!
私が通常行うことは、
- サーバー上である種の一意のハッシュを生成する
- このハッシュを HTML と JavaScript に埋め込みます。
- このハッシュをサーバーへのリクエストとともに送信します。
- ハッシュを再度作成し、送信されたハッシュと一致することを確認して、サーバー上のハッシュを検証します。
ハッシュは、アイテムの ID、セッション ID、一部のソルト、およびリクエストを検証するために再構築できるその他の識別可能なデータの連結である可能性があります。
他の回答を完了するために、サーバーのセットアップ方法を学ぶのに数日かかる可能性があることを説明するために、回答を非表示にする単純な node.js サーバーを設定するための 5 分間のガイドを短縮します。
node.js をインストールします。
server.js
以下の内容でという名前のファイルを作成します。
var express = require("express"),
app = express();
app.get("first_answer",function(req,res){
res.send("b");
});
app.listen(8080);
ターミナルを開き、入力します
npm install express
cd path_to_the_folder_you_placed_the_file
node server.js
これにより、express.js モジュールがインストールされ、サーバーが実行されます。
ここで、サイトで jQuery を使用して、サーバーからの回答を要求するだけです。jQuery を使用した例:
var user_answer = ...
$.get("http://localhost:8080/first_answer",function(answer){
if (answer == user_answer)
alert("you got it right!");
});
より複雑な例とサーバーの最適な使用法については、express.js
ドキュメントを読んでください。(;